hibernate增、删、改、查案例

本文详细介绍了Hibernate框架中get、load、update、delete及save方法的应用,包括如何通过主键查询、插入、更新和删除数据,并解释了这些方法的区别及注意事项。
、hibernate根据主键查询数据 get和load方法
搭建好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操作的,我们也可以通过其他方式达到目的,

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值