1、hibernate教学学习文档1 hibernate入门1.1 框架介绍1.2 回顾 传统使用JDBC开发 使用工具包,DbUtils (commons-.)1.3 hibernate 介绍 轻量级:依赖其他内容较少,消耗资源成本少。 持久层:与数据库进行数据交换。 ORM ,对象关系映射(object relation mapping) 对象:java一切都是对象,一般情况使用JavaBean 关系:数据库中的表(二维表) 映射:配置文件 1.4 流行框架2 第一个案例2.1 编写步骤 创建java项目 导入jar包 核心配置文件 hibernate.cfg.xml (configurati
2、on) JavaBean + 映射文件 (bean名称.hbm.xml) 注意:必须将映射文件,添加核心配置文件中 操作 api2.2 导入jar包 版本:3.6.10 导入jar(n个) %h%/hibernate3.jar 核心 %h%/librequired 必须目录下的所有 %h%/libjpa java 规范(java persist api)java持久api,hibernate对其支持(一般注解开发) 注意:数据驱动 2.3 核心配置文件 名称:hibernate.cfg.xml 位置:src (classpath) 内容:(driver、url、username、passwor
3、d、 方言) 约束 com.mysql.jdbc.Driver jdbc:mysql:/localhost:3306/h_day01_db root 1234 org.hibernate.dialect.MySQL5Dialect 注意:必须手动创建数据库 2.4 javabean和映射文件2.4.1 javabean 字段public class User private Integer uid; /注意:必须是整形 private String username; private String password;2.4.2 映射文件 名称:User.hbm.xml 位置:javabean同
4、包 内容:(配置javabean属性 和 表中字段 对应关系) 约束 注意:映射文件必须添加到核心配置文件中 解决方案:hibernate.cfg.xml 表不存在方案1:数据库手动创建表(建议)方案2:hibernate自动创建(上课优先) 3 CRUD操作添加:save更新:update删除:delete通过id查询 ,get(Class , id)查询所有:new Query(from .).list()分页: setFirstResult(int) setMaxResults(int)Test public void demo04() Configuration config = ne
5、w Configuration().configure(); SessionFactory sessionFactory = config.buildSessionFactory(); Session session = sessionFactory.openSession(); session.beginTransaction(); /分页查询 ,提供hibernate提供的api分页 / * 回顾sql select * from t_user limit startIndex,pageSize; / * startIndex 开始索引 / * pageSize 每页显示个数 Query
6、query = session.createQuery(from User); / 第一页/ query.setFirstResult(0);/ query.setMaxResults(2); / 第二页 query.setFirstResult(2); /回顾算法: startIndex = (pageNum - 1 ) * pageSize; query.setMaxResults(2); List allUser = query.list(); for (User user : allUser) System.out.println(user); session.getTransacti
7、on().commit(); /获得之前开启的事务 session.close(); sessionFactory.close(); Test public void demo03() Configuration config = new Configuration().configure(); SessionFactory sessionFactory = config.buildSessionFactory(); Session session = sessionFactory.openSession(); session.beginTransaction(); /查询所有-使用hiber
8、nate 查询 query 语句 hql / * hql hibernate提供面向对象的查询语句,类似与sql / * sql 格式: select 表中字段 from 表名 where . ,例如: select * from t_user / * hql 格式:select 对象属性 from 对象 where . ,例如:from User Query query = session.createQuery(from User); List allUser =query.list(); for (User user : allUser) System.out.println(user)
9、; session.getTransaction().commit(); /获得之前开启的事务 session.close(); sessionFactory.close(); Test public void demo02() Configuration config = new Configuration().configure(); SessionFactory sessionFactory = config.buildSessionFactory(); Session session = sessionFactory.openSession(); session.beginTransa
10、ction(); /通过id查询 User user = (User)session.get(User.class, 1); System.out.println(user); session.getTransaction().commit(); /获得之前开启的事务 session.close(); sessionFactory.close(); Test public void demo01() User user = new User(); user.setUid(1); user.setUsername(杰克); Configuration config = new Configura
11、tion().configure(); SessionFactory factory = config.buildSessionFactory(); Session session = factory.openSession(); Transaction transaction = session.beginTransaction(); /更新 - 通过id更新所有内容,如果没有设置null session.update(user); mit(); session.close(); factory.close(); 4 api详解4.1 结构图PO persistent object 持久对象
12、应用程序通过po类与hibernate进行交互。4.2 Configuration hibernate 提供用于加载配置文件的。 核心配置文件种类:hibernate.properties 和 hibernate.cfg.xml 一般情况使用 hibernate.cfg.xml ,可以配置不同内容(基本信息,映射文件) hibernate.properties 只能配置基本信息(key=value) 参考:%h%/project/etc/hibernate.properties 构造方法,new Configuration() hibernate将加载 hibernate.properties
13、 配置文件 提供方法:configure() 加载hibernate.cfg.xml 配置文件 通过 configure(String ) 指定自定义的cfg.xml文件。 加载映射文件 hbm.xml addResource() 加载自定义的映射文件。例如:config.addResource(cn/itcast/domain/User.hbm.xml); addClass() 加载自定义映射文件。例如:config.addClass(User.class); 建议:映射文件与Java通同名同包,且扩展名为hbm.xml 注意:如果重复添加JavaBean,提示错误 4.3 SessionF
14、actory hibernate提供 工厂,用于生成session 每一个应用程序只能有一个实例(单例),类似Jdbc时学习的连接池 线程安全的,及不同的线程都可以获得不同session。 获得实例 configuration.buildSessionFactory() 获得session openSession() 创建一个回话,每执行一次,session都是新的。 getCurrentSession() 获得当前线程中绑定的session,暂时不能用。 SessionFactory 缓存配置信息(例如: hibernate.cfg.xml / .hbm.xml 配置内容)4.4 Sessi
15、on hibernate 提供 操作 PO类 线程不安全,及每一个用户必须独享自己的session。 常用api save/update/delete/createQuery (list/setFirstResult/setMaxResults) 操作事务 session.beginTransaction() 开启事务 session.getTransaction() 获得当前事务4.5 事务操作 开启事务:beginTransaction() 提交事务:commit() 回滚事务:rollback()5 主配置文件详解 名称:hibernate.cfg.xml 位置:src (classpa
16、th) - WEB-INF/classes 配置 BeanFactory异常 原因:java web 6.0项目,默认进行Bean校验,通常不使用。 解决方案: 方案1:删除此jar 方案2:hibernate 配置取消 com.mysql.jdbc.Driver jdbc:mysql:/h_day01_db root 1234 org.hibernate.dialect.MySQL5Dialect true true none thread6 问题 如果使用session.openSession() 可以通过执行多次 session.beginTransaction() 进行多次事务操作。
17、但如果使用session.getCurrentSession() 只能使用一次,如果进行提交,默认情况下,将进行session.close(),解决此问题,spring采用 OpenSessionInViewFilter 过滤器。Test public void demo01() Configuration config = new Configuration().configure(); SessionFactory factory = config.buildSessionFactory(); Session session = factory.getCurrentSession(); /
18、开启事务 Transaction transaction = session.beginTransaction(); /* 操作 User user = new User(); user.setUsername(rose2); user.setPassword(1234); session.save(user); /5 提交 mit(); /再开启 Spring OpenSessionInViewFilter Transaction transaction2 = session.beginTransaction(); /* 操作 User user2 = new User(); user2.s
19、etUsername(tom); user2.setPassword(1234); session.save(user2); /5 提交 mit(); /6 释放 session.close(); /7 关闭工厂 factory.close(); 7 映射文件详解 文件名称: javabean名称.hbm.xml 位置:javabean同包 内容:7.1 约束7.2 属性基本设置普通属性 name : 默认用于配置javabean属性名称 length : 配置长度,字符串默认255,mysql类型 varchar(255) column : 当前属性对应表中字段(列)名称,默认name的值
20、方式1:column属性(attribute) , 方式2:子标签 type: 数据字段类型 方式1:hibernate类型,例如:string 方式2:java类型,例如:java.lang.String 方法3:mysql类型,例如:varchar(50) 日期时间类型 date , 日期 java.util.Date , 对应jdbc类型:java.sql.Date time , 时间 java.util.Date , 对应jdbc类型:java.sql.Time timestamp,时间戳 java.util.Date (注意:时间戳随着数据更改变化) , 对应jdbc类型:java.sql.Timestamp 项目使用: 字符串、long (date.getTime()、日期时间
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1