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();
}