hibernate本地sql语句和hsql语句和Criteria查询
来源:互联网 发布:共青团网络志愿者 编辑:程序博客网 时间:2024/06/01 09:55
本地sql语句
本地化sql语句就是你所用的数据库的sql语句
调用的时候调用SQLQuery q=createSQLQuery(sql)
方法就好了sql即为sql语句
,q即为查出来的数据,调用list,封装到对象中List<User> list = q.list();
即:
//调用查询语句,查询,封装到q中SQLQuery q = session.createSQLQuery(sql);//声明查询出来的类型,封装到哪个对象里面q.addEntity(User.class);//调用list方法,封装到对象里面List<User> list = q.list();
sql语句
基本结构为 from 表对应的实体bean的名字
(即select *
省去了)如果要带条件,直接在后面加where 条件 即可
//查询以张开头的String sql="from t_user where userName like 'zhang%'"//查询用户编号处于1到4之间的用户信息String sql="select * from t_user where userId>=1 and userId<=4"
查询的时候调用下面这这个方法即可查询
Query query = createQuery(hql);//调用list方法,封装到集合里面,遍历集合,就是所有查询出来的数据List<Userinfo> list = query.list();
HQL: 参数设置
hql 支持传 参数
1.下标传参数
String hql="from Userinfo where userId=?";//Query类似与jdbc中的PreparedStatementQuery query = session.createQuery(hql);query.setInteger(0, 2);//占位符下标从0开始List<Userinfo> list = query.list();
2.命名设置参数、
String hql="from Userinfo where uname=:uname";// (:userId)即为声明的//Query类似与jdbc中的PreparedStatementQuery query = session.createQuery(hql);query.setString("uname","%张%");//这个即为传参数List<Userinfo> list = query.list();
3.表达式参数绑定:为参数绑定一个List
String hql="from Userinfo where userId in(:ids)";//(:ids)即为声明的集合List<Integer> ids = new ArrayList<Integer> ();ids.add(1);ids.add(2);Query query = session.createQuery(hql);query.setParameterList("ids",ids);//这个就是往里面绑定一个集合List<Userinfo> list = query.list();
4.如果查询部分属性的话,要返回的是object的数组
String hql="select userName,userPass from Userinfo";Query query = session.createQuery(hql);List<Object[]> list = query.list();
5.分页查询
String sql="from Buser"; Query q = session.createQuery(sql); q.setFirstResult(5);//从哪一条开始查,不包含当前条 q.setMaxResults(3);//查询几条 List<Buser> ls = q.list();
6.唯一查询:当明确知道查询结果只有一条记录符合要求,可以使用唯一查询
query.uniqueResult();方法
String hql="from Userinfo where userId=2";Query query = session.createQuery(hql);Userinfo user = (Userinfo)query.uniqueResult();
7.连接查询
//注意查询出来的对象是两个表的,不是一个表的//就是用户信息中的权限的id等于权限表中的id String hql="select u from Roleinfo r left join Userinfo u on(r.roleId=u.role.roleId)";
8.子查询:将一个查询语句的结果作为另外一个查询语句的条件
String hql="select u from Userinfo u where u.role.roleId=(select r.roleId from Roleinfo r where r.roleName='普通员工')";
9.HQL: 命名查询:将HQL语句定义在映射文件中
<hibernate-mapping package="cn.zzsxt.entity"><class name="Userinfo" table="t_user"><id name="userId"><generator class="native"></generator></id><property name="userName"></property><property name="userPass"></property><property name="userType"></property><!-- 多对一 --><many-to-one name="role" class="Roleinfo" column="roleId" lazy="false"></many-to-one></class><!-- 命名查询 --><query name="getAllUsers"><!-- HQL语句 --><![CDATA[from Userinfo]]></query></hibernate-mapping>//上面为xml配置,下面为测试public static void testNamedQuery(){ Session session = HibernateUtil.getSession(); Query query = session.getNamedQuery("getAllUsers"); List<Userinfo> list = query.list(); for (Userinfo userinfo : list) { System.out.println(userinfo); } session.close();}public static void main(String[] args) { testNamedQuery();}
Criteria查询
Criteria是Hibernate提供的一组纯面向对象的查询API. 其功能类似Query, 但完全以面向对象的形式管理查询逻辑. 更符合ORM的设计思想.
//查询所有信息
Criteria c = session.createCriteria(Userinfo.class);//Userinfo.class 类的class地址List<Userinfo> list = c.list();
//条件查找
Criteria c = session.createCriteria(Userinfo.class);// c.add(Restrictions.between("userId", 1, 3));//userId between 1 and 3// c.add(Restrictions.ilike("userName","san", MatchMode.ANYWHERE));//like '%san%'// List<Integer> ids = new ArrayList<Integer>();// ids.add(1);// ids.add(2);// c.add(Restrictions.in("userId",ids));// userId in(1,2)// c.add(Restrictions.idEq(1));//userId=1(可能是主键id equals 1)不太确定 // c.add(Restrictions.eq("userName","zhangsan"));//userName='zhangsan'// c.add(Restrictions.isNull("role"));(可能是role字段不是空的)// c.add(Restrictions.ge("userId", 2));//userId>=2// c.add(Restrictions.le("userId", 4));//userId<=4c.add(Restrictions.gt("userId",2));//userId>2c.add(Restrictions.lt("userId", 5));//userId<5c.addOrder(Order.desc("userId"));//排序:asc升序,desc:降序List<Userinfo> list = c.list();
//分页写法
/*** 分页* setFirstResult(int start):起始位置* setMaxResult(int pageSize):分页单位*/public static void testCriteria4(){Session session = HibernateUtil.getSession();Criteria c = session.createCriteria(Userinfo.class);c.setFirstResult(3);c.setMaxResults(3);List<Userinfo> list = c.list();
阅读全文