美文网首页
hibernate操作sql面试

hibernate操作sql面试

作者: 蘋果_283e | 来源:发表于2017-04-19 19:19 被阅读0次

hibernate操作sql面试

一、利用hql,但hql有局限

不支持insert;开发用createQuery

HQL中没有表和字段的概念,只有类和属性的概念,只是接近SQL对于复杂sql无能为力。

二、利用createSQLQuery操作复杂sql语句

public List<Part>listPart(int currentPage,int pageSize){

String sql="select * from part limit ?,?";

//hibernate解决复杂sql语句

SQLQuery query = session.createSQLQuery(sql);

query.setInteger(0, (currentPage-1)*pageSize);

query.setInteger(1, pageSize);

query.addEntity(Part.class);//添加实体类

List<Part>list=query.list();

return list;

}

即:hibernate 中createQuery与createSQLQuery两者区别是:

前者用的hql语句进行查询,后者可以用sql语句查询

前者以hibernate生成的Bean为对象装入list返回

后者则是以对象数组进行存储

利用createSQLQuery查询

public List<Part>listPart(int currentPage,int pageSize){

String sql="select * from part limit ?,?";

//hibernate解决复杂sql语句

SQLQuery query = session.createSQLQuery(sql);

query.setInteger(0, (currentPage-1)*pageSize);

query.setInteger(1, pageSize);

query.addEntity(Part.class);//添加实体类

List<Part>list=query.list();

return list;

}

利用createSQLQuery添加

public void insertPart2(Part part){//用原生的sql语句

Transaction beginTransaction = session.beginTransaction();

String sql="insert into Part values(null,?,?,?)";

Query query= session.createSQLQuery(sql);

query.setString(0, part.getName());

query.setString(1, part.getPwd());

query.setString(2, part.getRole());

query.executeUpdate();//执行修改或删除

beginTransaction.commit();//提交事务

session.close();

}

相关文章

网友评论

      本文标题:hibernate操作sql面试

      本文链接:https://www.haomeiwen.com/subject/aomhzttx.html