用户注册



邮箱:

密码:

用户登录


邮箱:

密码:
记住登录一个月忘记密码?

发表随想


还能输入:200字
云代码 - java代码库

Hibernate基本构建

2015-08-05 作者: 锋客举报

[java]代码库

===========================属性文件的配置================================
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
          "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
          "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<!-- Generated by MyEclipse Hibernate Tools.                   -->
<!-- 重点:学会hibernate的属性的配置(连接数据库) -->
<hibernate-configuration>
 
    <session-factory>
        <!-- 数据库方言 -->
        <property name="dialect">
            org.hibernate.dialect.MySQLDialect
        </property>
        <!-- 路径 -->
        <property name="connection.url">
            jdbc:mysql://127.0.0.1:3309/hibernatetest
        </property>
        <!-- 用户名 -->
        <property name="connection.username">root</property>
        <!-- 密码 -->
        <property name="connection.password">root</property>
        <!-- 驱动 -->
        <property name="connection.driver_class">
            com.mysql.jdbc.Driver
        </property>
        <!-- myeclipse中的数据库连接名 -->
        <property name="myeclipse.connection.profile">fengke</property>
        <!-- 显示数据查询语句 -->
        <property name="show_sql">true</property>
        <!-- 匹配的持久化类路径 -->
        <mapping resource="fengke/vo/Login.hbm.xml" />
    </session-factory>
 
</hibernate-configuration>
=====================================================================
我是用的是myeclipse,因此反向工程自动生成实体类
============================JUnit4 测试==========================================
package test;
 
import static org.junit.Assert.*;
import java.sql.Time;
import java.util.List;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
import fengke.util.HibernateSessionFactory;
import fengke.vo.Login;
/**
 * Hibernate测试
 * @author 锋客
 * 注意:
 *   1、对于事务的理解:
 *       在本例中如果不开启事务,做以一下循环
 *      int i = 0;
 *      while (i < 3) {
 *          Login login = new Login("fengke", "123456");
 *          session.save(login);
 *          i++;
 *      }
 *      String hql = "from Login";
 *      Query query = session.createQuery(hql);
 *      List<Login> list = query.list();
 *      for (Login q : list) {
 *          System.out.println(q.getId());
 *      }
 *   结果:数据库中不会有数据存入,但循环输出可以实现。
 *   结论:事务就像是先将数据临时存入到数据库中,可以进行任何操作,但是当你不提交事务时,
 *       程序运行结束,会清空操作的数据,还原到原本的数据库,但是数据库会记录这些操作,因为
 *       id主键的变化,并没有从1开始,而是从上次事务操作数据库最后一条数据的id为标准。
 *      
 *
 */
public class HibernateTest {
    static Session session = null;
    static Transaction transaction = null;
 
    @BeforeClass
    public static void setUpBeforeClass() throws Exception {
         
    }
 
    @AfterClass
    public static void tearDownAfterClass() throws Exception {
         
    }
 
    @Before
    public void setUp() throws Exception {
        // 配置hibernate环境
                System.out.println("开始配置Hibernate的环境");
                try {
                    // Configuration config = new Configuration().configure();
                    // SessionFactory sessionFactory = config.buildSessionFactory();
                    session = HibernateSessionFactory.getSession();
                    //使用beginTransaction()开启事务
                    transaction = session.beginTransaction();
                } catch (Exception e) {
                    e.printStackTrace();
                }
 
    }
 
    @After
    public void tearDown() throws Exception {
        // 关闭session
                System.out.println("关闭session");
                try {
                    transaction.commit();
                    session.close();
                } catch (Exception e) {
                    e.printStackTrace();
                }
    }
     
     
    /*
     * 测试是否Hibernate配置成功
     */
    @Test
    public void test() {
        int i = 0;
        while (i < 3) {
            Login login = new Login("fengke", "123456");
            session.save(login);
            i++;
        }
        String hql = "from Login";
        Query query = session.createQuery(hql);
        List<Login> list = query.list();
        for (Login q : list) {
            System.out.println(q.getId());
        }
 
    }
     
     
}
=================================更换数据库(更换另一个属性文件)==================================
package fengke.dao;
 
import java.util.List;
 
import org.hibernate.Hibernate;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
 
import fengke.util.HibernateSessionFactory;
import fengke.vo.Login;
import fengke.vo1.User;
 
public class Dao {
     
    public static void main(String[] args) {
        Session session = HibernateSessionFactory.getSession();
        Transaction tran=session.beginTransaction();
        int i=0;
        while (i<3) {
            Login login=new Login("fengke", "123456");
            session.save(login);
            i++;
        }
        String hql="from Login";
         Query query = session.createQuery(hql);
        List<Login> list = query.list();
        for(Login q:list){
            System.out.println("aaa");
        }
        tran.commit();//可以测试事务的特性
        session.close();
        System.out.println("******************更换数据库********************");
        exchangeDB();
                 
    }
   //更换数据库
    private static void exchangeDB() {
        //设置配置文件(链接数据库的文件)
        //注意:最好实体类的名字不要重复,否则
        /*1:比较简单的办法,更改其中一个类名。
        * 2:第二种解决办法,将类的映射文件,
        * <hibernate-mapping>结点后加上auto-import="false",默认为true,
        * 即变成<hibernate-mapping auto-import="false">,但是这样改了以后,千万要注意,
        * 在写HQL语句时候,比如"from cn.com.test01.TUser4",一定要加上完整包名,
        * 因为你设置了auto-import="false".
        */
        HibernateSessionFactory.setConfigFile("/hibernatefeng.cfg.xml");
        Session se = HibernateSessionFactory.getSession();
        Transaction tran=se.beginTransaction();
        int i=0;
        while (i<3) {
            User login=new User("root", "root");
            se.save(login);
            i++;
        }
        tran.commit();
        se.close();
    }
 
}

[源代码打包下载]




网友评论    (发表评论)


发表评论:

评论须知:

  • 1、评论每次加2分,每天上限为30;
  • 2、请文明用语,共同创建干净的技术交流环境;
  • 3、若被发现提交非法信息,评论将会被删除,并且给予扣分处理,严重者给予封号处理;
  • 4、请勿发布广告信息或其他无关评论,否则将会删除评论并扣分,严重者给予封号处理。


扫码下载

加载中,请稍后...

输入口令后可复制整站源码

加载中,请稍后...