hibernate中的与数据库操作的那些事儿

来源:互联网 发布:汉王光学识别软件 编辑:程序博客网 时间:2024/09/21 09:29

一、基本的操作

数据库中有主键自增字段id,name和password

1、增加save

User user=new User();user.setName("zgf");user.setPassword("123");session.save(user);//向user表中插入一条记录,插入
2、删除delete
//得到被删除的对象:查询User user=(User)session.get(User.class,2);//2为id编号。Iteger,String 包装类都实现了Serializable接口session.delete(user);
3、修改update

User user=(User)session.get(User.class,2);user.setPassword("12345");session.update(user);
4、查询get load

  get方法:

User user=(User)session.get(User.class,2);

  load(懒加载,延时加载)

User user=(User)session.load(User.class,2);
区别:
  使用get()查询就直接发送sql语句到数据库,进行查询,并把查询结果封装成User对象返回。

  使用load()没有数据库去查询,生成了一个User的代理对象,该代理对象只有id属性有值,User_$$_javassist代理对象 是User的子类,基于子类的代理.当使用user对象时,才去数据库查询。代理对象中有一个initialized属性,当出现重复查询时,会根据该属性的值是否是true决定是否再去查询。当在使用user对象前关闭资源,user对象不能再获取

注:例如上例中涉及到多条sql语句查询时,要开启事务

Transaction tran=session.beginTransaction();。。。tran.commit();或者:session.beginTransaction();。。。session.getTransaction().commit();


二、HQL  hibernate query language :面向对象

1、查询所有记录

Query query=session.createQuery("from com.zgf.domain.User");//注意:不是表名,面向对象的类List<User> list=query.list();  //多个user对象
2、查询一条记录
Query query=session.createQuery("from com.zgf.domain.User where id=2");User user=(User) query.uniqueResult();
3、分页查询:limit (currentPage-1)*pageSize,pageSize

Query query=session.createQuery("from com.zgf.domain.User");query.setFirstResult(0);//从第几条记录开始查query.setMaxResults(2);//查几条List<User> list=query.list();
三、Criteria:面向对象的无语句的查询

1、查询所有记录

Criteria cri=session.createCriteria(User.class); List<User> list=cri.list();
2、查询一条记录
Criteria cri=session.createCriteria(User.class);cri.add(Restrictions.eq("id", 3));//where id=3User u=(User) cri.uniqueResult();
3、别的条件的查询
Criteria cri=session.createCriteria(User.class);cri.add(Restrictions.like("name", "%l%"));//模糊查询  //cri.add(Restrictions.gt("id", 2));//id >2  //cri.add(Restrictions.lt("id", 2));//id <2  //cri.add(Restrictions.ge("id", 2));//id >=2  //cri.add(Restrictions.le("id", 2));//id <=2List<User> list=cri.list();
四、原生的sql查询

1、查询出的每条记录被存储在一个数组中

  SQLQuery query=session.createSQLQuery("select * from user"); List<Object[]> list=query.list();  for(Object[] obj:list){System.out.println(Arrays.toString(obj));  }
2、查询出的每条记录被封装成User对象
  SQLQuery query=session.createSQLQuery("select * from user");  query.addEntity(User.class);  List<User> list=query.list();











0 0