hibernate增、删、改、查案例

来源:互联网 发布:windows系统是多用户 编辑:程序博客网 时间:2024/05/29 03:02

1、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;    }

当执行后,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=?

从上我们可以看出,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;    }

hibernate日志打印如下:

Hibernate: insert into xx_plat_admin (admin_usename, admin_pwd) values (?, ?)

从上面我们可以看出,由于我们配置了主键自增, 所以主键是不在插入的字段之内,我们实体对象的属性,都会默认插入到数据库,不存在的补空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;    }

hibernate日志如下:

Hibernate: delete from xx_plat_admin where admin_id=?

从日志我们可以看出,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;    }

日志打印如下:

Hibernate: update xx_plat_admin set admin_usename=?, admin_pwd=? where admin_id=?

从日志我们可以看出,hibernate的update发送的sql中对所有数据进行了从新修改,所以此处注意,我们尽量下查询数据,然后在修改查询对象的值,在调用update方法,不然很可能会导致数据库数据被脏改,

我们可以主要掉update方法,然后在测试,结果发现数据一样被修改,这里涉及到hibernate对数据的三种状态的管理和维护,因为hibernate在提交事务的时候会去对自己session管理的对象进行检查,如果发现缓存数据和数据库数据不一致,会发送SQL对数据库进行修改,

以上只是get、load、update、delete、save方法的使用,当然hibernate本身是支持SQL操作的,我们也可以通过其他方式达到目的,

原创粉丝点击