搭建好hibernate环境,测试通过后,直接编写dao、此处省略了service和controller,需要大家自己编写代码补上 spring+springmvc+hibernate环境搭建
@Override
public Admin selectById(Admin param) {
Session session = this.sessionFactory.openSession();
//get方法模式使用主键查询
Admin admin = (Admin) session.get(Admin.class, param.getId());
session.close();
return admin;
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
当执行后,hibernate打印sql如下:
Hibernate:
select admin0_.admin_id as admin_id1_0_0_, admin0_.admin_usename as admin_us2_0_0_, admin0_.admin_pwd as admin_pw3_0_0_ from xx_plat_admin admin0_ where admin0_.admin_id=?
- 1
- 2
从上我们可以看出,hibernate是get方法通过主键为条件去查询数据的,
同理load方法也是默认使用主键查询,但是区别在于load支持懒加载,而get不支持,在后面的get和load方法区别的时候详细讲解,也可自行查阅资料进行分析。
2、利用hibernate的save方式进行插入数据,代码如下:
@Override
public boolean add(Admin param) {
Session session = this.sessionFactory.openSession();
//开启事务
Transaction t = session.beginTransaction();
//完成增加操作
int result = (Integer) session.save(param);
//提交事务
t.commit();
//关闭回话
session.close();
return result > 0;
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
hibernate日志打印如下:
Hibernate: insert into xx_plat_admin (admin_usename, admin_pwd) values (?, ?)
- 1
从上面我们可以看出,由于我们配置了主键自增, 所以主键是不在插入的字段之内,我们实体对象的属性,都会默认插入到数据库,不存在的补空null,
在hibernate增、删、改的时候,如果没有把事务交给spring来管理,我们需要手动的获取事务,提交事务
3、hiberante利用delete方法进行删除数据,代码如下:
@Override
public boolean delete(Admin param) {
Session session = this.sessionFactory.openSession();
Transaction t = session.beginTransaction();
//先查询出该数据,如果存在,就删除,如果不存在就返回
Admin admin = (Admin) session.get(Admin.class, param.getId());
int result = 0;
if(admin == null) {
return false;
}else {
session.delete(admin);
}
t.commit();
session.close();
return result > 0;
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
hibernate日志如下:
Hibernate: delete from xx_plat_admin where admin_id=?
- 1
从日志我们可以看出,hibernate的delete方法删除数据也是以主键为基础完成的
4、利用update方法修改数据,代码如下:
@Override
public Admin update(Admin param) {
Session session = this.sessionFactory.openSession();
Transaction t = session.beginTransaction();
Admin admin = (Admin) session.get(Admin.class, param.getId());
if(admin != null) {
admin.setPwd(param.getPwd());
admin.setUserName(param.getUserName());
session.update(admin);
}
t.commit();
session.close();
return null;
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
日志打印如下:
Hibernate: update xx_plat_admin set admin_usename=?, admin_pwd=? where admin_id=?
- 1
从日志我们可以看出,hibernate的update发送的sql中对所有数据进行了从新修改,所以此处注意,我们尽量下查询数据,然后在修改查询对象的值,在调用update方法,不然很可能会导致数据库数据被脏改,
我们可以主要掉update方法,然后在测试,结果发现数据一样被修改,这里涉及到hibernate对数据的三种状态的管理和维护,因为hibernate在提交事务的时候会去对自己session管理的对象进行检查,如果发现缓存数据和数据库数据不一致,会发送SQL对数据库进行修改,
以上只是get、load、update、delete、save方法的使用,当然hibernate本身是支持SQL操作的,我们也可以通过其他方式达到目的,
本文详细介绍了Hibernate框架中get、load、update、delete及save方法的应用,包括如何通过主键查询、插入、更新和删除数据,并解释了这些方法的区别及注意事项。
3095

被折叠的 条评论
为什么被折叠?



