美文网首页
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