hibernate基础教程liu.xls_第1页
hibernate基础教程liu.xls_第2页
hibernate基础教程liu.xls_第3页
hibernate基础教程liu.xls_第4页
hibernate基础教程liu.xls_第5页
已阅读5页,还剩282页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1 对象关系映射 2 环境构筑 3 注意事项 4 创建session对象 5 主键处理 6 基本操作 6 1 插入数据 6 2 修改数据 6 3 删除数据 6 4 查询数据 7 对象的状态 8 关联关系操作 8 1 多对一单向 8 2 一对多单向 8 3 多对一双向 8 4 一对一 8 5 多对多单向 8 6 多对多双向 8 7 练习 9 Hibernate检索 9 1 HQL 9 2 QBC 9 3 nativesql 9 4 批量处理数据 9 5 分页 10 专题 10 1 配置文件详解 10 2 加载策略 10 3 抓取策略 10 4 Cascade的使用 10 5 Hibernate的缓存机制 10 6 Hibernate事务 10 7 Hibernate并发处理 10 8 HibernateAPI 10 9 常见异常 MVC开发模式中 模型层解决什么问题 javaDB 对象记录 对象关系映射 就是完成java对象和数据库表中的记录的相互转化 持久化 把数据保存在数据库中 使用JDBC完成对象关系映射 对象记录 1 把数据储存在对象中1 2 创建Connection对象2 3 创建PreparedStatemet对象3 4 编写SQL语句4 5 执行SQL语句 把对象中的数据变成记录5 6 关闭连接6 7 处理异常7 如何封装JDBC 简化开发 减少重复代码 编写工具类 如何解决工具类的通用性 可以使用不同的数据库 可以完成不同的对象关系映射 提高通用性需要动态处理的问题 一可变的数据库信息 1 连接何种数据库 数据库服务器IP 数据库名 用户名 密码 二可变的对象和表的信息 1 能保存不同的对象 2 把数据保存到指定的表 3 把象的属性保存到指定的列 解决方案 把可变的信息集中存放在xml文件中 编写解析xml的工具类 得到相关信息 编写数据库处理的工具类 进行数据库操作 这些工作是否需要我们完成 现有的对象关系映射主流框架 hibernate ibatis 我们需要掌握的内容 如何把相关信息保存在xml文件中 如何使用工具类完成对象关系映射 hibernate和jdbc差异 类与对象表与记录 Q 1 为什么使用对象关系映射框架 2 什么时候使用对象关系映射框架 3 使用hibernate的代价 hibernate学习重点 0 设计表结构主键和业务无关 1 对象的状态 2 表之间的关系 如何在hibernate中描述表之间的关系 3 用哪种关系完成操作 在哪一端操作 4 HQL 5 异常处理 6 性能优化 A 1 避免jdbc的缺点 JDBC编程的缺点 实现业务逻辑的代码和数据库访问代码掺杂在一起 使程序结构不清晰 可读性差 在程序代码中嵌入面向关系的SQL语句 使开发人员不能完全运用面向对象的思维来编写程序 业务逻辑和关系数据模型绑定 如果关系数据模型发生变化 例如修改了CUSTOMERS表的结构 那么必须手工修改程序代码中所有相关的SQL语句 这 增加了维护软件的难度 2 表结构简单 插入操作多 3 效率的影响 0 设计表结构主键和业务无关 1 对象的状态 2 表之间的关系 如何在hibernate中描述表之间的关系 3 用哪种关系完成操作 在哪一端操作 4 HQL 5 异常处理 6 性能优化 vo 记录对象public class Demo 创建Connection对象public void save Vo vo 创建PreparedStatemet对象 创建Result对象 编写SQL语句 执行SQL语句 把记录储存在对象中 处理异常 增删改查 增删改查 实现业务逻辑的代码和数据库访问代码掺杂在一起 使程序结构不清晰 可读性差 在程序代码中嵌入面向关系的SQL语句 使开发人员不能完全运用面向对象的思维来编写程序 业务逻辑和关系数据模型绑定 如果关系数据模型发生变化 例如修改了CUSTOMERS表的结构 那么必须手工修改程序代码中所有相关的SQL语句 这 表之间的关系 如何在hibernate中描述表之间的关系 业务逻辑和关系数据模型绑定 如果关系数据模型发生变化 例如修改了CUSTOMERS表的结构 那么必须手工修改程序代码中所有相关的SQL语句 这 完成一个工具类 实现插入记录 public class MyUtil public void save 反射 1 参数 vo sql vo 表名 通过文件 把需要的信息传递到方法中 vo 和那个表对应 属性和列对应关系 使用哪个数据库 插入数据 java 查询数据根据id查询 DeptPOpo DeptPO session get DeptPO class 1 po setDname ajax 更改数据 Transaction ts session beginTransaction DeptPOpo DeptPO session get DeptPO class 1 po setXXXX xxx mit 删除 Transaction ts session beginTransaction DeptPOpo DeptPO session get DeptPO class 1 session delete po mit 对象的状态 javaDB 对象记录 持久状态 cpo DeptPO session get DeptPO class 1 DeptPO po new DeptPO 临时状态 po setDename java Transaction ts session beginTransaction session save po 持久状态 mit session close 游离状态 DeptPOpo DeptPO session get DeptPO class 1 po null DeptPOpo DeptPO session load DeptPO class 1 Transaction ts session beginTransaction DeptPOpo DeptPO session get DeptPO class 1 session delete po mit Transaction ts session beginTransaction DeptPOpo DeptPO session get DeptPO class 1 po setDeptid 2 po setXXXX xxx1 mit session close class DeptPO java util Set private Integer deptid private String deptname private Set emps class EmpPO private Integer eid private String ename private DeptPO dept EmpPO emp EmpPO session get EmpPO class 1 System out println emp getEname System out println emp getDept getDeptname DeptPO temp emp getDept DeptPO dept DeptPO session get DeptPO class 2 class PersintentSet implements java util Set 标准sqlselect deptid deptname from dept hqlfrom depterror from DeptPO from DeptPO d select d from DeptPO d select d deptid d deptname from DeptPO d 属性名 select d from DeptPO d List list query list list中的元素是DeptPO类型 select d deptname from DeptPO d List list query list for int I 0 i list size i DeptPO po DeptPO list get i while rs next create table Demo int id did number 10 age number 3 String id salary number 10 2 name varchar2 20 Date bir birthday date demo didagesalarynamebirthday DemoVo private Integer did private Integer age public DemoVo String name Integer age this name name this age age schema表空间 mysql sqlserver库 表 deptemp diddnameeidenamedid 数据库 dept deptiddname 1 ajax po DeptPO po DeptPO session get DeptPO class 1 deptid deptidnull dnamejava deptiddname 1 java deptid1 dnamejava deptiddname 6 java dept deptiddeptname 1 xxx3 2 java emp HashSet dept deptiddeptname 1 xxx3 2 java主表一 emp eidenamedeptid 1 liu2 2 liyang2 从表多 eid1 empenameliu deptdeptid2 deptname java java util Set 查询 列 从 表 查询对象 从 类 类名 select d deptid d deptname from DeptPO d while rs next DeptPO po new DeptPO po setDeptid list add po while rs next String deptid rs getXXX list add deptid rs getInt did rs getString did DeptPO po DeptPO list get i while rs next String id rs getDate birthday select d name d age from DemoPO d select new vo DemoVo d name d age from DemoPo while rs next String name rs getString name Integer age rs getInteger age DemoVo vo new DemoVo name age list add vo oracle Date bir Hibernatt开发环境构筑 1 下载需要的类库 2 数据库建表 插入测试数据 3 建立java项目 4 把类库加入到构建路径中 5 编写配置文件 6 编写程序文件 7 运行调试 1 下载需要的类库 下载地址 https www hibernate org 2 数据库建表 插入测试数据 drop table dept create table dept deptid number 3 deptname varchar2 20 leader varchar2 20 constraint dept pk primary key deptid insert into dept deptid deptname leader values 1 struts liu insert into dept deptid deptname leader values 2 spring yu insert into dept deptid deptname leader values 3 hibernate geng commit select from dept 3 建立java项目 hibernate配置文件 hibernate映射文件 储存数据的java类 测试程序 log4j属性文件 4 把类库加入到构建路径中 5 编写配置文件 1 hibernate配置文件 hibernate cfg xml org hibernate dialect Oracle9Dialect jdbc oracle thin localhost 1521 skywork tiger scott oracle jdbc driver OracleDriver true 2 hibernate映射文件 DeptPO hbm xmlDeptVo 3log4j属性文件 文件名 log4j properties hibernate使用log4j输出信息 此文件确定输出信息的方式和格式 非必需 没有这个文件程序运行时控制台会提示警告信息 6 编写程序文件 DeptPO java 用于储存数据 package po public class DeptPO private int deptid private String deptname private String leader public int getDeptid return deptid public void setDeptid int deptid this deptid deptid public String getDeptname return deptname public void setDeptname String deptname this deptname deptname public String getLeader return leader public void setLeader String leader this leader leader 测试程序 package test import org hibernate Session import org hibernate SessionFactory import org hibernate Transaction import org hibernate cfg Configuration import po DeptPO public class TestDemo2 public static void main String args hibernate配置文件路径 String location config hibernate cfg xml 创建Configuration对象 用于加载hibernate配置文件 Configuration cfg new Configuration 加载配置文件 cfg cfg configure location 创建SessionFactory对象 用于创建Session对象 SessionFactory sf cfg buildSessionFactory 创建Session对象session 用于保存数据 Session session sf openSession 开启事务 Transaction ts session beginTransaction 创建Hiberdemo1对象po 储存需要插入数据库的数据 DeptPO po new DeptPO po setDeptname ajax po setLeader Li 把对象中的数据插入数据库 session save po not commit yet 提交事务 mit 释放资源 session close 示例程序 hibernatedemo01 insert into dept deptid deptname leader values 1 struts liu insert into dept deptid deptname leader values 2 spring yu insert into dept deptid deptname leader values 3 hibernate geng hibernate配置文件 hibernate映射文件 储存数据的java类 log4j属性文件 Hibernate Hibernate Configuration DTD 3 0 EN org hibernate dialect Oracle9Dialect jdbc oracle thin localhost 1521 skywork tiger scott oracle jdbc driver OracleDriver true 完全限定类名 表名 和主键对应的属性名和类型 主键列名 主键类型 类中其他属性名和类型 和表中对应的列名 create table dept deptid number 10 2 deptname varchar2 20 log for java hibernate使用log4j输出信息 此文件确定输出信息的方式和格式 非必需 没有这个文件程序运行时控制台会提示警告信息 String location config hibernate cfg xml 创建Configuration对象 用于加载hibernate配置文件 Configuration cfg new Configuration 创建SessionFactory对象 用于创建Session对象 SessionFactory sf cfg buildSessionFactory Session session sf openSession Transaction ts session beginTransaction 创建Hiberdemo1对象po 储存需要插入数据库的数据 session save po not commit yet 学习中注意事项 编写映射文件 配置文件完毕后要认真检查 避免拷贝粘贴引起的错误 记录常见异常及解决方案 理解对象的状态 jdbchibernate 表类 记录对象 插入记录保存对象 更改记录更改对象属性 删除记录删除对象 从表中查询记录从类中查询对象 idname 编写映射文件 配置文件完毕后要认真检查 避免拷贝粘贴引起的错误 1 使用默认的hibernate配置文件 配置文件名 hibernate cfg xml位置 src文件夹下 创建Configuration对象 用于加载hibernate配置文件 Configuration cfg new Configuration 加载配置文件 cfg cfg configure 创建SessionFactory对象 用于创建Session对象 SessionFactory sf cfg buildSessionFactory 创建Session对象session 用于保存数据 Session session sf openSession 2配置文件存放在指定文件夹下 配置文件名 hibernate cfg xml位置 src hibernate配置文件路径 String location config hibernate cfg xml 创建Configuration对象 用于加载hibernate配置文件 Configuration cfg new Configuration 加载配置文件 cfg cfg configure location 创建SessionFactory对象 用于创建Session对象 SessionFactory sf cfg buildSessionFactory 创建Session对象session 用于保存数据 Session session sf openSession 3高效的创建session package util import org hibernate HibernateException import org hibernate Session import org hibernate cfg Configuration public class HibernateSessionFactory private static String CONFIG FILE LOCATION config hibernate cfg xml Holds a single instance of Session private static final ThreadLocal threadLocal new ThreadLocal The single instance of hibernate configuration private static final Configuration cfg new Configuration The single instance of hibernate SessionFactory private static org hibernate SessionFactory sessionFactory Returns the ThreadLocal Session instance Lazy initialize the SessionFactory if needed return Session throws HibernateException public static Session currentSession throws HibernateException Session session Session threadLocal get if session null session isOpen if sessionFactory null try cfg configure CONFIG FILE LOCATION sessionFactory cfg buildSessionFactory catch Exception e System err println Error Creating SessionFactory e printStackTrace session sessionFactory null sessionFactory openSession null threadLocal set session return session Close the single hibernate session instance throws HibernateException public static void closeSession throws HibernateException Session session Session threadLocal get threadLocal set null if session null session close Default constructor private HibernateSessionFactory 推荐在开发中使用第三种方式创建session对象 config hibernate cfg xml 位置 src文件夹下 单子 单例 private static String CONFIG FILE LOCATION config hibernate cfg xml private static final ThreadLocal threadLocal new ThreadLocal private static final Configuration cfg new Configuration private static org hibernate SessionFactory sessionFactory Returns the ThreadLocal Session instance Lazy initialize public static Session currentSession throws HibernateException cfg configure CONFIG FILE LOCATION sessionFactory cfg buildSessionFactory System err println Error Creating SessionFactory e printStackTrace session sessionFactory null sessionFactory openSession public static void closeSession throws HibernateException HibernateHibernate的的主主键键生生成成方方式式 Hibernate中的主键又叫做对象标识符 Object IDentifier 简称OID 它唯一标识一个对象 为了应付多变的业务需求 Hibernate制定了多种主键生成方式 如下图 比较常用的主键生成方式如下 1 increment 相当于select Max id from 表 然后增加1 并写入数据库 和底层的数据库无关 可以移植到任何数据库 缺点是当有多个并发进程的时候可能导致出现重复值 2 assigned 和数据库无关 由应用程序自己定义主键 很灵活 但是需要程序员编写额外的代码 3 identity 使用数据库的主键生成机制 自动为主键赋值 不便于移植 比如 为软的SqlServer提供了自动生成主键的类型 但Oracle没有 但是 优点是 由于是数据库底层实现的 所以不会发生主键重复的冲突问题 4 sequence 对某些支持序列的数据库可用 如Oracle 在hibernate中使用序列 准备工作 1 在数据库中建立序列 create sequence oraseq id seq start with 1 increment by 1 maxvalue 99999999 nocycle 2 建表 create table oraseq id number 8 name varchar2 20 description varchar2 20 constraint sque id pk primary key id po package po public class Oraseq implements java io Serializable private Long id private String name private String description default constructor public Oraseq public Oraseq String name String description aaa this name name this description description public Long getId return this id public void setId Long id this id id public String getName return this name public void setName String name this name name public String getDescription return this description public void setDescription String description this description description 映射文件 oraseq id seq package dao import org hibernate Session import org hibernate SessionFactory import org hibernate Transaction import org hibernate cfg Configuration import po Oraseq public class OraseqDAO public void insertOraseq String name String des Configuration cfg new Configuration cfg cfg configure SessionFactory sf cfg buildSessionFactory Session session sf openSession autocommit false Transaction ts session beginTransaction Oraseq po new Oraseq po setName name po setDescription des session save po mit session close 示例程序 hibernatedemo03 Hibernate中的主键又叫做对象标识符 Object IDentifier 简称OID 它唯一标识一个对象 和底层的数据库无关 可以移植到任何数据库 缺点是当有多个并发进程的时候可能导致出现重复值 和数据库无关 由应用程序自己定义主键 很灵活 但是需要程序员编写额外的代码 不便于移植 比如 为软的SqlServer提供了自动生成主键的类型 但Oracle没有 但是 优点是 由于是数据库底层实现的 所以不会发生主键重复的冲突问题 aaa 序序列列名名 DOCTYPE hibernate mapping PUBLIC Hibernate Hibernate Mapping DTD 3 0 EN oraseq id seq SessionFactory sf cfg buildSessionFactory Session session sf openSession autocommit false 单表增删改查 准备测试数据 create table hiber id number 6 name varchar2 20 select from hiber insert into hiber values 1 test1 insert into hiber values 2 test2 insert into hiber values 3 test3 package dao import java util List import mons beanutils BeanUtils import org hibernate Query import org hibernate Session import org hibernate Transaction import util HibernateSessionFactory import po Hiber public class HiberDAO 插入数据 public void insertHiber String name 创建session对象 Session session HibernateSessionFactory currentSession 开启事务 Transaction ts session beginTransaction 创建po对象 Hiber po new Hiber 储存数据 po setName name 把数据储存在数据库中 session save po not commit yet 提交事务 mit 关闭session对象 释放资源 HibernateSessionFactory closeSession 使用po删除数据 public void deleteHiber long id 创建session对象 开启事务 Session session HibernateSessionFactory currentSession Transaction ts session beginTransaction 创建po对象 id属性的值为删除条件 Hiber po Hiber session get Hiber class new Long id Hiber po new Hiber po setId new Long id 删除操作 session delete po 提交事务 释放资源 mit HibernateSessionFactory closeSession 实用hql删除数据 public void deleteByHql Session session HibernateSessionFactory currentSession Transaction ts session beginTransaction String hql delete Hiber where id 1 Query query session createQuery hql query executeUpdate mit HibernateSessionFactory closeSession 修改数据 public void updateHiber long id Session session HibernateSessionFactory currentSession Transaction ts session beginTransaction Hiber po Hiber session get Hiber class new Long id po setName updated session save po mit HibernateSessionFactory closeSession 按id使用session的get方法查询数据 返回一个po对象 public Hiber selectHiberById long id throws Exception Session session HibernateSessionFactory currentSession Hiber po Hiber session get Hiber class new Long id null load return exception HibernateSessionFactory closeSession return po 使用hql查询数据 每条数据储存在po中 返回java util ArrayList hibernate hql from 类名 public List selectAllHiber Session session HibernateSessionFactory currentSession String hql from Hiber Query query session createQuery hql List list query list HibernateSessionFactory closeSession return list 使用hql查询数据 每条数据储存在po中 使用占位符 public List selectByCondition int id String name Session session HibernateSessionFactory currentSession String hql select t from Hiber t where t id and t name Query query session createQuery hql query setLong 0 id query setString 1 name List list query list HibernateSessionFactory closeSession return list 使用hql查询数据 每条数据储存在对象数组中 public List selectObject Session session HibernateSessionFactory currentSession String hql select t id t name from Hiber t where t id and t name String hql select t id t name from Hiber t where t id and t name Query query session createQuery hql query setLong 0 3 query setString 1 updated List list query list HibernateSessionFactory closeSession return list 使用hql查询数据 记录储存在指定类型对象中 select new vo HiberVo t id t name from Hiber t where t id new vo HiberVo t id t name 使用查询的结果作为构造方法的参数 public List selectVo Session session HibernateSessionFactory currentSession String hql select new vo HiberVo t id t name from Hiber t where t id String hql select new vo HiberVo t name from Hiber t where t id Query query session createQuery hql query setLong 0 3 List list query list HibernateSessionFactory closeSession return list 示例程序 hibernatedemo02 任务 建表 插入测试数据 表名hibernate demo2 hidnameagesalary 1 韩永南2010000 2 田硕2010000 3 宋阳2015000 4 杨明2115000 5 李阳2116000 6 孙魁龙2217000 7 刘冰2218000 8 刘玉娟2319000 实现下列操作 1 插入一个新记录主键使用序列 nameagesalary 张三255000 2 查询全部信息 3 查询年龄是20的全部信息 4 把hid是3的记录salary更改为20000 5 查询年龄超过20的人姓名 工资 6 把张三的工资更改为10000 7 删除张三的信息 8 把全部记录的工资增加500 9 查询孙魁龙的工资 List list query list for int I 0 i list size i PO po PO list get i Integer id po getId PO ppo PO session get PO class id int salary ppo getSalary salary salary 500 ppo setSalary salary 查询 List list query list String sql from PO t where p name PO po PO query uniqueResult String sql select t salary from PO t where p name Integer salary Integer query uniqueResult idname 1 test1 2 test2 3 test3 Session session HibernateSessionFactory currentSession Transaction ts session beginTransaction session save po not commit yet HibernateSessionFactory closeSession Session session HibernateSessionFactory currentSession Transaction ts session beginTransaction Hiber po Hiber session get Hiber class new Long id HibernateSessionFactory closeSession Session session HibernateSessionFactory currentSession Transaction ts session beginTransaction String hql delete Hiber where id 1 Query query session createQuery hql HibernateSessionFactory closeSession Session session HibernateSessionFactory currentSession Transaction ts session beginTransaction Hiber po Hiber session get Hiber class new Long id HibernateSessionFactory closeSession public Hiber selectHiberById long id throws Exception Session session HibernateSessionFactory currentSession Hiber po Hiber session get Hiber class new Long id null load return exception HibernateSessionFactory closeSession Session session HibernateSessionFactory currentSession Query query session createQuery hql HibernateSessionFactory closeSession public List selectByCondition int id String name Session session HibernateSessionFactory currentSession String hql select t from Hiber t where t id and t name Query query session createQuery hql HibernateSessionFactory closeSession Session session HibernateSessionFactory currentSession String hql select t id t name from Hiber t where t id and t name String hql select t id t name from Hibe

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论