Hibernate: createQuery()与createSQLQuery()查询

一. 

1.createQuery()查询的是HQL语句,查询后返回的是一个实体类的数据

2.createSQLQuery()查询是原生SQL语句查询,查询后返回的是一个Object对象

createSQLQuery(sql).addEntity()查询单个表所有数据时等同于createQuery()

二、传递参数,防止sql注入

1.createQuery()

//第一种
String hql="from User where name=:name and id=:id";
String name="用户名";
String id="用户ID";
session.createQuery(hysqid).setParameter("name", name).setParameter("id", id);
session.createQuery(hysqid).setString("name", name).setString("id", id);

//第二种
String hql="from User where name=? and id=?";
String name="用户名";
String id="用户ID";
session.createQuery(hysqid).setParameter(0, name).setParameter(1, id);
session.createQuery(hysqid).setString(0, name).setString(1, id);

setString()与setParamenter()区别:

setString只能注入String类型,setParamenter注入的是Object类型,除setString方法还有setInteger()等,快过setParamenter;

2.createSQLQuery()传递参数同createQuery()

三、createSQLQuery()处理返回数据

1.返回实体

List cats= sess.createSQLQuery(" select * from cats " ).addEntity(Cat. class).list();

//或
List cats= sess.createSQLQuery(" select {cat.*} from cats cat " ).addEntity( " cat " , Cat. class).list();

2.返回map

Query query = session.createSQLQuery("select id,name from Tree t where pid in (select id from Tree) ").setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP); //返回一个map,KEY:为DB中名称一致(大小写一致)遍历list时就可以

Map map = (Map)list.get[i];

map.get("id");map.get("name");来取值。按你的SQL语句select后的字段名来作为map的Key,但这个key必须与数据库中的字段名一模一样。

3.处理函数


Query query = session.createSQLQuery("select sum(id) SUMID from Tree t where pid in (select id from Tree)
.addScalar("SUMID",Hibernate.INTEGER)  //转换类型,按DB中的type转
.setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP); //返回一个map,KEY:为DB中名称一致(大小写一致)

直接就map.get("SUMID")可以取值了 

参考资料:

1.https://blog.csdn.net/li951383937/article/details/51734932

2.https://www.cnblogs.com/toSeeMyDream/p/5817368.html

  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值