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();
阅读全文
'); })();
0 0
原创粉丝点击
热门IT博客
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 垓下歌全文 垓下歌古诗 垓下之围读音 楚霸王困垓下歇后语 楚霸王困在垓下歇后语 垓读音 九垓龙吟 垓下读音 垓下曲 垓下歌古诗带拼音 兆京垓 埃塞俄比亚 埃其亚基 埃瓦尔巴塞罗那 埃尔法商务车 1埃多少纳米 1埃多少米 1埃等于多少米 埃隆马斯克 埃隆马斯 埃索美拉唑镁肠溶片 埃文彼得斯 采埃孚 佐埃人 埃尔法价格 加布里埃香奈儿 埃德尔停赛影响苏宁 埃尔文约翰逊 皮埃尔居里 埃德斯坦福德 埃尔法为什么那么贵 埃塞克斯 埃文塔多 扎克埃夫隆 埃拉西亚隐藏冈布奥 皮埃蒙特 埃迪雷德梅尼 耐信埃索美拉唑镁肠溶片 埃拉西亚速刷dp阵容搭配推荐 200师