Hibernate3学习笔记(一)
来源:互联网 发布:白银公司大数据公司 编辑:程序博客网 时间:2024/05/22 17:44
将对象映射到数据库
//默认读取hibernate.cfg.xml文件Configuration cfg = new Configuration().configure();SchemaExport export = new SchemaExport(cfg);//是否将脚本打印到控制台是否输出脚本到数据库export.create(true,true);
Hibernate的几种状态
把对象存入表中(持久化数据)
//读取配置文件Configuration cfg = new Configuration().configure();//建立SessionFactory 对应一个数据库SessionFactory factory = cfg.buildSessionFactory();//取得session (这个session需要关闭)Session session = null;try{ session = factory.openSession(); //开启事务 session.beginTransaction(); User user = new User(); user.setName("张三"); user.setPassword("123456"); //保存对象 session.save(user); //提交事务 session.getTransaction().commit();}catch(Exception e){ e.printStackTrace(); //如果出问题就回滚事务 session.getTransaction().rollback();}finally{ //关闭session if(null!=session){ if(session.isOpen()){ session.close(); } }}
Hibernate中数据的几种状态
session = HibernateUtils.getSession();tx = sesion.beginTransaction();//此时进入Transient状态User user = new User();user.setName("张三");user.setPassword("123456");//Persistent状态//Persistent状态的对象,当属性发生改变的时候//hibernate在清理缓存(脏数据检查)的时候,会和数据库同步session.save(user);//改变对象属性user.set("李四");//提交事务tx.commit();//detached状态//数据库中存入的对象名字应该是李四//如果控制台打印SQL会发现打印了两条SQL语句,一条插入语句、一条更新语句。
Hibernate Session的get()方法
Session session = null;try{//HibernateUtils是自己写的一个Session工具类 session = HibernateUtils.getSession(); session.beginTransaction(); //该方法会在数据库里面根据这个id寻找该对象,找到就返回Object对象的实例,找不到返回null. User user = (User) session.get(User.class,"123456"); //此时user对象处于Persistent状态 user.setName("王五"); //改变后提交事务Hibernate会执行更新数据库操作 session.getTransaction().commit();}catch(Exception e){ e.printStackTrace(); session.getTransaction().rollback();}finally{ HibernateUtils.closeSession(session);}
Load方法
//...省略之前代码 关键部分代码:User user = (User) session.load(User.class,"1234356");//id随便写的user.setName("王五");//此时并未访问数据库(不会打印SQL语句)System.out.println(user.getName());//此时才开始访问数据库//因为load支持lazy(延迟加载),默认是开启代理的//理解Hibernate里面的延迟加载:真正使用的时候再创建对象//主要是提高性能//主要采用代理实现,使用CGLIB库生成的session.getTransaction().commit();//补充:load查询一个不存在的数据会抛出ObjectNotFound异常
CRUD总结
get和load方法的差别
* get不支持lazy,load在默认情况下支持lazy
* get加载数据,如果不存在则返回null,而load抛出ObjectNotFound异常
Transeint
*没有被session管理
*在数据库中没有与之匹配的记录
Persistent
*纳入session管理
*在数据库中有与之匹配的记录
*当属性发生改变,在清理缓存的时(脏数据检查)会自动同步数据库
Detached
*没有被session管理
*在数据库中存在与之匹配的记录
Session 是一个持久化管理器
Hibernate的hql
Session session = null;try{ session = HibernateUtils.getSession(); session.beginTransaction(); //createQuery方法会返回一个Query对象 Query query = session.createQuery("from User"); //Query的list方法返回一个java.util.List对象 List userList = query.list(); for (Iterator iter = userList.iterator();iter.hasNext();){ User user = (User) iter.next(); System.out.println("id="+user.getId()+"name="user.getName()); }}catch(Exception e){ e.printStackTrace();}finally{}
hql分页查询
/*Query里面有如下方法:public Query setMaxResults(int maxResults);//得到最大结果集public Query setFirstResult(int firstResult);//从哪开始查,从0开始*/Session session = HibernateUtils.getSession();session.beginTransaction();Query query = session.createQuery("from User");//设置从第几条开始 (第一条是0)query.setFirstResult(1);//设置一页多少query.setMaxResult(2);List userList = query.list(); for (Iterator iter = userList.iterator();iter.hasNext();){ User user = (User) iter.next(); System.out.println("id="+user.getId()+"name="user.getName());
Hibernate基本映射
实体类—表,采用< class>标签映射
实体类属性(不包括集合、自定义类和数组)—表字段,采用< property>标签映射
如果实体类的名字或者实体类的属性的名字和数据库关键字重复将会出现问题
class标签中的table可以指定表名称
property标签中column属性可以指定列名
实体类的设计原则:
*实现无参构造方法
*提供一个标识
*建议不要使用final修饰实体类
*建议为实体类生成getter和setter方法
主键生成策略:
*identity
*sequence
*uuid
*native
*assigned
*foreign
- Hibernate3学习笔记(一)
- hibernate3学习笔记(一)
- hibernate3 学习笔记(一)
- hibernate3学习笔记(一)
- Hibernate3.5.3 学习笔记(一)
- hibernate一对多:hibernate3学习笔记(一)
- hibernate3.3.2学习笔记 --- 多对一
- Hibernate3学习笔记(8)——hibernate3缓存管理
- Hibernate3.2学习笔记
- Hibernate3.6 学习笔记
- hibernate3.x学习笔记
- Hibernate3.0学习笔记
- hibernate3.3.2学习笔记
- Hibernate中多对一映射学习笔记(使用的hibernate3.6版本)
- hibernate3学习笔记(十七)|关系映射:多对一
- hibernate3学习笔记(十七)|关系映射:多对一
- Hibernate3.2(一)
- hibernate3学习笔记(八)|DetachedCriteria
- 字符串置换
- 静态代码块、构造代码块和构造函数执行顺序
- VS 项目文件 .vcxproj 文件 工程自定义宏, .vcxproj 文件组织结构
- 一个内向者的自我修炼
- hdu 1272 小希的迷宫
- Hibernate3学习笔记(一)
- Ubuntu 16.04 下快速搭建 LNMP环境
- login和downloadImage网络编程范例
- fpga LSTM
- c# controls.add 控件的使用 ,间接引用还是值引用
- 配置linux集群中的NFS文件共享服务 centos6.5Final
- 脚本
- redis cluster管理工具redis-trib.rb详解[转]
- LeetCode--Climbing Stairs