public class Test { //基本的crud public static void main(String[] args) { Session session=HibernateUtil.getCurrentSession();//获得和当前线程绑定的session对象 无需关闭 线程结束 自动关闭 Transaction tx=session.beginTransaction();//通过session对象得到事务对象 //查询 Customer c1=session.get(Customer.class,1l);//第一个参数 实体类的class对象,第二个主键值 //将对象保存到数据库// Customer c2=new Customer();// c2.setCust_name("甘创");// long id=(long)session.save(c2);//会返回一个 Serializable接口,其实就是插入记录后的主键值 //修改的对象 必须有和表对应的主键 不然hibernate无法找到对应记录 会报错// Customer c3=new Customer();// c3.setCust_id(2l);// c3.setCust_name("甘创");// session.update(c3); //删除的对象 必须有和表对应的主键 不然hibernate无法找到对应记录 会报错// Customer c4=new Customer();// c4.setCust_id(3l);// session.delete(c4); tx.commit();//提交事物 }}
Hibernate中hql查询方式
/** * hql的查询方式 * */public class Test3 { public static void main(String[] args) { Session session=HibernateUtil.getCurrentSession(); Transaction tx=session.beginTransaction(); //hql简单查询 注意 hql中不支持 直接使用*号 但在聚合函数中 比如 count(*) 可以 /** Listlist = session.createQuery("from Customer").list(); */ //hql别名查询 可以给表取别名 和sql语句语法相同 /** List list = session.createQuery("select c from Customer c").list(); */ //排序查询 注意hql语法中 表名和列名都是类名和属性名 /** List list = session.createQuery("from Customer order by cust_id desc").list(); */ //条件查询 第一种 根据位置设置值 索引从0开始 /** Query query = session.createQuery("from Customer where cust_name=? and cust_id=?"); query.setParameter(0, "龙岩江"); query.setParameter(1, 1l); List list = query.list(); */ //条件查询 第二种 按名称绑定 :名字可以随便起 但中间不能有空格 /** Query query = session.createQuery("from Customer where cust_name= :name and cust_id= :id "); query.setParameter("name", "龙岩江"); query.setParameter("id",1l); List list = query.list(); */ //hql的投影查询 :查询对象的某个或某些属性 /** //查询单个属性 会返回一个object集合 List
Hibernate中Criteria查询方式
public class Test4 { /** * Criteria 查询方式 * * */ public static void main(String[] args) { Session session=HibernateUtil.getCurrentSession(); Transaction tx=session.beginTransaction(); //简单查询 /** Criteria criteria = session.createCriteria(Customer.class); Listlist = criteria.list(); for (Customer customer : list) { System.out.println(customer); } */ //排序查询 //criteria的addOrder()方法 传入Order类的静态方法 asc(属性名)升序 ,desc(属性名)降序 /** Criteria criteria = session.createCriteria(Customer.class); criteria.addOrder(Order.desc("cust_id")); List list = criteria.list(); for (Customer customer : list) { System.out.println(customer); } */ //分页查询 /** Criteria criteria = session.createCriteria(Customer.class); criteria.setFirstResult(0); //指定从第几条记录开始查询 criteria.setMaxResults(2); //指定查询几条记录 List list = criteria.list(); for (Customer customer : list) { System.out.println(customer); } */ //条件查询// Criteria criteria = session.createCriteria(Customer.class);// /**// * 设置条件// * sql运算符 Restrictions类静态方法名// * = eq(String propertyName,Object value);参1 属性名 参2 值// * > gt(String propertyName,Object value);参1 属性名 参2 值// * >= ge(String propertyName,Object value);参1 属性名 参2 值// * < lt(String propertyName,Object value);参1 属性名 参2 值// * <= le(String propertyName,Object value);参1 属性名 参2 值// * <> ne(String propertyName,Object value);参1 属性名 参2 值// * is null isNull(String propertyName) 属性名// * like like(String propertyName,Object value);参1 属性名 参2 值// * in in (String propertyName,Collection values);参1 属性名 参2 可以是collection集合接口的实现类 或者object数组// * and and 可变个数Restrictions.xx() 方法// * or or 可变个数Restrictions.xx() 方法// * */// //多个条件之间 关系默认是and // criteria.add(Restrictions.eq("cust_name", "龙岩江"));// criteria.add(Restrictions.gt("cust_id",0l));// //criteria.add(Restrictions.or(Restrictions.gt("cust_id",4l),Restrictions.eq("cust_name", "龙岩江")));// //or的写法 and的写法和这个一样 // List list = criteria.list();// for (Customer customer : list) {// System.out.println(customer);// } //分组查询 // Criteria criteria = session.createCriteria(Customer.class);// /**// *Criteria的 add() :普通条件 where 后面的条件// *Criteria的addOrder() :排序// *Criteria的setProjections() :聚合函数 和group by 和分组以后条件 having // * */// //分组之后 默认返回都是一个object对象集合// criteria.setProjection(Projections.groupProperty("cust_name")); //根据名字分组// List list = criteria.list();// for (Object object : list) {// System.out.println(object);// } //离线条件查询 // 在没有session对象时,可以 创建一个离线条件对象DetachedCriteria //使用DetachedCriteria对象 设置完对应的条件 ,可以通过getExecutableCriteria()方法 传入session对象 //创建出criteria 对象 调用其list()方法 可以实现查询 //主要用于在web层创建DetachedCriteria对象 设置完条件 传入dao层 根据session对象可以实现创建出criteria对象 实现查询 //解决了 多个参数传递问题 , DetachedCriteria对象设置条件方式和Criteria对象一样 DetachedCriteria dc=DetachedCriteria.forClass(Customer.class); dc.add(Restrictions.eq("cust_name", "龙岩江")); Criteria criteria = dc.getExecutableCriteria(session); List list = criteria.list(); for (Customer customer : list) { System.out.println(customer); } tx.commit(); }}
Hibernate中还支持sql语法的查询对象 不过不常用
//SQLQuery对象默认查询是返回一个object[]数组 存放着值 可以设置让hibernate自动封装成指定类的对象 //分页也和别的对象一样 设置setFirstResult()方法和setMaxResults()方法 /** SQLQuery sqlQuery=session.createSQLQuery("select * from cst_Customer"); sqlQuery.addEntity(Customer.class);//添加实体配置 hibernate将自动将查询返回的object[]数组封装成对应的对象 参1为持久化类的class对象 List list= sqlQuery.list(); //查询返回一个list类型集合 for (Object obj : list) { Customer c=(Customer)obj; System.out.println(c); } */