Hibernate的一个小应用
hibernate
第一步,导入hiberante需要用到的jar包,因为使用hibernate时候,有日志信息输出,hibernate本身没有日志输出的jar包,导入其他日志的jar包
不要忘记还有mysql驱动的jar包
第二步,创建一个实体类,使用hibernate时候,不需要自己手动创建表,hibernate帮把表创建
1 package cn.lmn.entity; 2 3 public class User { 4 /* 5 * hibernate要求实体类有一个属性唯一的 6 */ 7 private int uid; 8 private String username; 9 private String password; 10 private String address; 11 public int getUid() { 12 return uid; 13 } 14 public void setUid(int uid) { 15 this.uid = uid; 16 } 17 public String getUsername() { 18 return username; 19 } 20 public void setUsername(String username) { 21 this.username = username; 22 } 23 public String getPassword() { 24 return password; 25 } 26 public void setPassword(String password) { 27 this.password = password; 28 } 29 public String getAddress() { 30 return address; 31 } 32 public void setAddress(String address) { 33 this.address = address; 34 } 35 }
第三步 配置实体类和数据库表一一对应关系(映射关系)
使用配置文件实现映射关系
(1)创建xml格式的配置文件
- 映射配置文件名称和位置没有固定要求
- 建议:在实体类所在包里面创建,实体类名称.hbm.xml
(2)配置是是xml格式,在配置文件中首先引入xml约束
- 学过约束dtd、schema,在hibernate里面引入的约束dtd约束
约束如下
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
User.hbm.xml
1 <?xml version="1.0" encoding="UTF-8"?> 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 <hibernate-mapping> 6 <!-- 1、配置类和表对应 7 class标签 8 name属性:实体类的全路径 9 table属性:数据库表的名称 10 --> 11 <class name="cn.lmn.entity.User" table="t_user" > 12 <!-- 2、配置实体类id和表id对应 13 hibernate要求实体类有一个属性唯一值 14 hibernate要求表有字段作为唯一值 15 --> 16 <!-- id标签 17 name属性:实体类里面id属性名称 18 column属性:生成的表字段的名称 19 --> 20 <id name="uid" column="uid"> 21 <!-- 设置数据库表id增长策略 22 native:生成id值 就是主键自动增长 23 --> 24 <generator class="native"></generator> 25 </id> 26 <!-- 配置其他属性和字段对应 27 name属性:实体类属性名称 28 column属性:生成表字段的名称 29 --> 30 <property name="username" column="username"></property> 31 <property name="password" column="password"></property> 32 <property name="address" column="address"></property> 33 </class> 34 35 </hibernate-mapping>
第四步 创建hibernate的核心配置文件
(1)核心配置文件格式xml,但是核心配置文件名称和位置固定的
- 位置:必须src下面
- 名称:必须hibernate.cfg.xml
(2)引入dtd约束
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
(3)hibernate操作过程中,只会加载核心配置文件,其他配置文件不会加载
第一部分: 配置数据库信息 必须的
第二部分: 配置hibernate信息 可选的
第三部分: 把映射文件放到核心配置文件中
完整的hibernate.cfg.xml文件
1 <?xml version="1.0" encoding="UTF-8"?> 2 <!DOCTYPE hibernate-configuration PUBLIC 3 "-//Hibernate/Hibernate Configuration DTD 3.0//EN" 4 "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"> 5 <hibernate-configuration> 6 <session-factory> 7 <!-- 1.配置数据库信息 --> 8 <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property> 9 <property name="hibernate.connection.url">jdbc:mysql:///hibernate_day01</property> 10 <property name="hibernate.connection.username">root</property> 11 <property name="hibernate.connection.password">123456</property> 12 <!-- 2.配置hiberante信息 --> 13 <!-- 输出底层sql语句 --> 14 <property name="hibernate.show_sql">true</property> 15 <!-- 输出底层sql语句格式化 --> 16 <property name="hibernate.format_sql">true</property> 17 <!-- 18 hibernate帮创建表,需要配置之后, 19 update:如果已经有表,更新。如果没有,创建 20 --> 21 <property name="hibernate.hbm2ddl.auto">update</property> 22 23 <!-- 配置数据库的方言 24 在mysql里面实现分页关键字limit,只能使用MySQL里面 25 在oracle数据库,实现分页rownum 26 让hibernate框架识别不同数据库 的自己特有的语句 27 --> 28 <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property> 29 30 31 <!-- 3.把映射文件放到核心配置文件中 --> 32 <mapping resource="cn/itcast/entity/User.hbm.xml"/> 33 34 </session-factory> 35 </hibernate-configuration>
实现添加操作
第一步 加载hibernate核心配置文件
第二步 创建SessionFactory对象
第三步 使用SessionFactory创建session对象
第四步 开启事务
第五步 写具体逻辑 crud操作
第六步 提交事务
第七步 关闭资源
1 @Test 2 public void testAdd() { 3 // 第一步 加载hibernate核心配置文件 4 // 到src下面找到名称是hibernate.cfg.xml 5 // 在hibernate里面封装对象 6 Configuration cfg = new Configuration(); 7 cfg.configure(); 8 9 // 第二步 创建SessionFactory对象 10 // 读取hibernate核心配置文件内容,创建sessionFactory 11 // 在过程中,根据映射关系,在配置数据库里面把表创建 12 SessionFactory sessionFactory = cfg.buildSessionFactory(); 13 14 // 第三步 使用SessionFactory创建session对象 15 // 类似于连接 16 Session session = sessionFactory.openSession(); 17 18 // 第四步 开启事务 19 Transaction tx = session.beginTransaction(); 20 21 // 第五步 写具体逻辑 crud操作 22 // 添加功能 23 User user = new User(); 24 user.setUsername("小三"); 25 user.setPassword("2123465"); 26 user.setAddress("中国"); 27 // 调用session的方法实现添加 28 session.save(user); 29 30 // 第六步 提交事务 31 tx.commit(); 32 33 // 第七步 关闭资源 34 session.close(); 35 sessionFactory.close(); 36 }
最后测试就可以了
写工具类
1 hibernate里面封装对象 2 cfg = new Configuration(); 3 cfg.configure(); 4 5 // 第二步 创建SessionFactory对象 6 // 读取hibernate核心配置文件内容,创建sessionFactory 7 // 在过程中,根据映射关系,在配置数据库里面把表创建 8 sessionFactory = cfg.buildSessionFactory(); 9 } 10 11 // 提供方法返回sessionFactory 12 public static SessionFactory sessionFactory() { 13 return sessionFactory; 14 } 15 }
再写一个测试
1 @Test 2 public void testAdd() { 3 //第一步 加载hibernate核心配置文件 4 //到src下面打到名称是hibernate.cfg.xml文件 5 //在hibernate里面封装对象 6 // Configuration cfg=new Configuration(); 7 // cfg.configure(); 8 9 //第二步 创建SessionFactory对象 10 //读取hibernate核心配置文件内容,创建sessionFactory 11 //在过程中,根据映射关系,在配置数据库里面把表创建 12 // SessionFactory sessionFactory = cfg.buildSessionFactory(); 13 SessionFactory sessionFactory =HibernateUtils.sessionFactory(); 14 //第三步 使用SessionFactory创建session对象 15 //类似于连接 16 Session session = sessionFactory.openSession(); 17 18 //第四步 开启事务 19 Transaction tx=session.beginTransaction(); 20 21 //第五步 写具体逻辑crud操作 22 //添加功能 23 User user = new User(); 24 user.setUsername("xiaosan"); 25 user.setPassword("123"); 26 user.setAddress("CHINA"); 27 //调用session中的方法实现添加 28 session.save(user); 29 30 //第六步 提交事务 31 tx.commit(); 32 33 //第七步 关闭资源 34 session.close(); 35 sessionFactory.close(); 36 }