Hibernate_简单实用流程
Hibernate:
使用步骤:
将\hibernate-release\lib\required添置构建路径
将sqljdbc添加构建路径
在src下创建hibernate.cfg.xml(有模板)在hibernate开发包下
hibernate-release-4.3.6.Final\project\documentation\src\main\
docbook\quickstart\tutorials\basic\src\test\resources下面的hibernate.cfg.xml作例子
主要有如下四部分配置 :
(1)与DB的连接
(2)可选配置
(3)资源文件注册
(4)二级缓存
示例如下:
1 <?xml version='1.0' encoding='gb2312'?> 2 <!DOCTYPE hibernate-configuration PUBLIC 3 "-//Hibernate/Hibernate Configuration DTD 3.0//EN" 4 "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> 5 <hibernate-configuration> 6 <session-factory> 7 <!--显示执行的SQL语句--> 8 <property name="show_sql">true</property> 9 <!--连接地址--> 10 <property name="connection.url">jdbc:sqlserver://127.0.0.1:1433;DatabaseName=hibernate</property> 11 <property name="connection.username">sa</property><!--连接数据库的用户名--> 12 <property name="connection.password">ea1111111111_</property><!--数据库用户密码--> 13 14 <!--数据库驱动--> 15 <property name="connection.driver_class">com.microsoft.sqlserver.jdbc.SQLServerDriver</property> 16 <!--JDBC连接池(使用内置的连接池)--> 17 <property name="connection.pool_size">1</property> 18 <!--设置Hibernate自动管理上下文的策略--> 19 <property name="current_session_context_class">thread</property> 20 <!--选择使用的方言--> 21 <property name="dialect">org.hibernate.dialect.SQLServer2005Dialect</property> 22 <!--在启动时删除并重新创建数据库--> 23 <property name="hbm2ddl.auto">create</property>
<!-- <property name="hbm2ddl.auto">update</property>
update: 表示自动根据model对象来更新表结构,启动hibernate时会自动检查数据库,如果缺少表,则自动建表;如果表里缺少列,则自动添加列。 -->
<!-- <property name="hbm2ddl.auto">update</property>
create-drop:启动hibernate时,自动创建表,程序关闭时,自动把相应的表都删除。所以程序结束时,表和数据也不会再存在。 --> 24 25 <mapping resource="com/base/model/Student.hbm.xml"/> <!-- 使用xml版时使用 -->
<mapping class="com.base.model.Teacher"/> <!-- 注解版使用class --> 26 </session-factory> 27 </hibernate-configuration>
修改数据库连接地址,用户名,密码,与使用的方言
创建model层
创建model映射配置文件**.hbm.xml
1:与被描述的类同名 ,如:UserModel.hbm.xml
2:存放位置与所描述类存放在同一文件夹下
3:主要有如下四部分配置 :
(1)类和表的映射
(2)主键的映射
(3)类的属性和DB中字段的映射
(4)关系的映射
在hibernate开发包下:hibernate-release-4.3.6.Final\project\documentation\src\main\
docbook\quickstart\tutorials\basic\src\test\java\org\hibernate\tutorial\hbm
下面的Event.hbm.xml作例子
示例如下:
1 <?xml version="1.0"?> 2 <!DOCTYPE hibernate-mapping PUBLIC 3 "-//Hibernate/Hibernate Mapping DTD 3.0//EN" 4 "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> 5 6 <hibernate-mapping package="org.hibernate.tutorial.hbm"> <!-- 包名 --> 7 8 <class name="Event" table="EVENTS"> <!-- 类名与对应的数据表名 --> 9 <id name="id" column="EVENT_ID"> <!-- 设置主键, 对应model与数据库中名称 --> 10 <generator class="increment"/> <!-- 设置自增--> 11 </id> 12 <property name="date" type="timestamp" column="EVENT_DATE"/> <!--普通字段 --> 13 <property name="title"/>
<!-- <many-to-one name="c" column="classId" class="com.base.model.Class"></many-to-one> //数据库中的外键 -->
14 </class> 15 16 </hibernate-mapping>
测试类: test
1 public class StudentTest { 2 3 /** 4 * @param args 5 */ 6 public static void main(String[] args) { 7 // TODO 自动生成的方法存根 8 Configuration configuration = new Configuration(); //实例化配置文件 9 ServiceRegistry serviceRegistry = //实例化服务登记 10 new StandardServiceRegistryBuilder().applySettings(configuration.getProperties()).build(); 11 //applySettings( 12 //configuration.getProperties()).build(); 13 // SessionFactory sessionFactory = configuration.buildSessionFactory(serviceRegistry); //获取session工厂(出错,原因未明) 14 15 SessionFactory sessionFactory = null; //获取session工厂 16 final ThreadLocal<Session> threadLocal = new ThreadLocal<Session>(); 17 try { 18 sessionFactory = new AnnotationConfiguration().configure().buildSessionFactory(); 19 } catch (Throwable ex) { 20 // Log the exception. 21 System.err.println("对不起数据工厂构建失败." + ex); 22 throw new ExceptionInInitializerError(ex); 23 } 24 25 26 //只有通过session才能进行对象的操作, 获得持久化 27 Session session = sessionFactory.openSession(); //生成一个新的session 28 session.beginTransaction(); //开启事物 29 30 Student s = new Student(); //创建一个学生 31 s.setName("张三"); //设置名称 32 session.save(s); //保存学生 33 ... 34 35 session.getTransaction().commit(); //提交事务 36 session.close(); //关闭session 37 sessionFactory.close(); //关闭session工厂 38 } 39 }