Hibernate概念深入和CURD(增删改查)
来源:互联网 发布:学摄影的软件 编辑:程序博客网 时间:2024/05/21 23:34
Hibernate概念深入和CURD(增删改查)
一 Hibernate开发流程
1.hibernate需要的三个条件
(1)domian类
(2)映射文件 User.hbm.xml
(3)创建表
2.开发流程
(1)站在面向对象的角度
由domain Object---àmapping ---àdb(官方推荐)
(2)站在关系模型的角度
由DB开始,用工具生成mapping和Domain object(使用较多)
(3)从映射文件开始写(用的较少)
注:以上任何两个都可以互相生成
二 开发中的细节
1.Domian Object限制(实体类对象限制)
(1)默认的构造是必须的,如果写了一个有参数的构造,必须要写上无参构造
原因是Hibernate会用反射的机制生成一个class对象,创建对象的时候用newInstance()方法去创建,用的是无参构造,例:
Class clazz = User.class;
User user = clazz.newInstance();
(2)有无意义的标识符id(主键)(可选)
在实际中用到,如果有id,会充分发挥它的特性
(3)非final的,对懒加载有影响(可选)
懒加载内部会自动的创建一个子类,如果是final,懒加载会有影响
2.映射文件 --- 把类映射成二维表
(1)一个java类在映射文件中用一对<class>标签表示,如果有多个java类,那么在映射文件中应该有多个<class>标签
(2)对于<class>标签来说,<clas>标签可以放到一个映射文件中,可以放到多个映射文件中
(3)映射文件的命名规范:类名.hbm.xml
三 代码编写
(1)HibernateUitl 工具类 -- 提取和数据库连接的宝贵资源
public final class HibernateUtil {
private static SessionFactory sessionFactory;
private HibernateUtil() {
}
//耗时资源放到代码块中,只执行一次
static {
Configuration cfg = new Configuration();
cfg.configure();// 用来完成Hibernate的初始化---用来读取配置文件中的信息,可以指定配置文件的位置
// cfg.configure("");
// 得到sessionFactoroy的工厂对象,相当于DirverManager,
sessionFactory = cfg.buildSessionFactory();
}
public static SessionFactory getSessionFactory() {
return sessionFactory;
}
public static Session getSession() {
return sessionFactory.openSession();
}
}
(2)添加用户 --- 使用上面的工具类优化代码
public static void addUser1(User user) {
Session session = null;
Transaction tx = null;
try {
session = HibernateUtil.getSession();
tx = session.beginTransaction();// 开启事务
session.save(user);
tx.commit();
} finally {
// 使资源得到释放
if (session != null) {
session.close();
}
}
}
(3)查询用户
//查 ---查询不用开启事务,不修改数据库中的东西
public static User getUser(int id){
Session session = null;
try {
session = HibernateUtil.getSession();
Class clazz = User.class;//通过映射文件查找class对象
//User user = (User) session.load(clazz, id);//懒加载,运行后没有立刻访问相应的数据库,返回的是代理对象,永远不可能为空,当第一次使用该对象的时候,才去访问
User user = (User) session.get(clazz, id);
return user;
} finally {
// 使资源得到释放
if (session != null) {
session.close();
}
}
}
四 session接口中的方法
Transation beginTransaction() 开启事务
Void clear() 清除缓存
Connection close() 关闭session释放资源的方法
Session只能按id查询,所以有了:
Criteria createCirteria(Class persistentClass) 查询所有...
Query createQuert(String queryString)
void delete(Object object)
Object load(Class theClass,Serializable id) 懒加载,当调用的时候,不是立刻去查数据库,只有第一次使用的时候才去查
Void persist(Object object) 保存对象
Void save(Object object) 保存对象 两者不同是:
在没有开启事务的时候,persist插入的语句没有做,而save插入的操作确做了,可是回滚了
五 对象状态
1.瞬时状态:自己new出来的对象就是瞬时状态
User user =new User() ;
user是一个瞬时对象,在数据库的表中没有记录和瞬时对象想对应的,也不管理瞬时 对象
当调用 session.save(user)方法之后,为持久状态
2.持久状态:数据库表中有记录和这个对象相对应的,当持久态的对象发生变化的时候,session中也变化
3.脱管状态:数据库的表中有一条记录和对象相对应的,并且这个对象不被session管理,但是在数据库表中有记录和它相对应,当对象再发生变化的时不会改变
当对象处于脱管状态的时候,又更新了数据库中的值,要调用更新的方法来通知Hibernate
- Hibernate概念深入和CURD(增删改查)
- hibernate基本概念和CURD(增删改查)详解
- Hibernate---curd(增删查改)操作
- Hibernate实现增删查改CURD例子
- CURD增删改查
- nodejs CURD(增删改查)get和post方法
- Hibernate概念深入和增删改查以及三种对象状态
- 2、Mybatis增删改查(CURD)
- YII2 CURD 增删改查
- Yii 增删改查(CURD)
- CURD-增删查改操作
- gxt CURD ,数据库增删改查简单例子(Spring + Hibernate)
- Hibernate CURD(增删改查)单例创建SessionFactory对象
- laravel (5.2) curd (增删改查)
- MyBatis实现单表增删改查(CURD)--新增
- MyBatis实现单表增删改查(CURD)--删除
- MyBatis实现单表增删改查(CURD)--修改
- ThinkPHP实例教程--CURD (增删改查)
- 14.2.5 并行化应用程序
- phplot doc 地址
- javascript 取得下拉列表的值
- 正则表达式获取url中的参数。
- lucas-kanade学习
- Hibernate概念深入和CURD(增删改查)
- 《华为研发》阅读 - 23 (市场,客户需求,客户价值)
- 责任模式
- C#,.net 正则表达式
- telnet配置
- IT是一个传奇的领域
- hive的Specified key was too long; max key length is 767 bytes问题解决
- 程序中GDI资源占用与泄漏的初步分析
- 打开网页时出现DA AddrBar icon的解决方法