hibernate数据库操作基础

1.根据主键查询

2.getSession().createSQLQuery(sql)和session.createQuery(sql)

3.Seeion的其他方法 

4.Hibernate Criteria用法大全

1.根据主键查询

session.load(Role.class, "33")

session.get(Role.class, "33")

get 和 load 方法的区别:详见:https://www.cnblogs.com/lukelook/p/9684782.html

2.getSession().createSQLQuery(sql)和session.createQuery(sql)

前者用的是SQL语句,后者用的HQL语句。

1)getSession().createSQLQuery(sql)

 需要添加 

query.addEntity(Xxx.class);
否则会出现类型转换错误如:
java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to com.my.dm.entity.Device

标量查询

 

最基本的 SQL 查询是从一个或多个列表中获取一个标量(值)列表。以下是使用原生 SQL 进行获取标量的值的语法:

 

@Override
    public List<Role> getAllRoles() {
        // TODO Auto-generated method stub
        List<Role> roles = null;        
        String sql = "SELECT * FROM tbl_role where Role_Server = ? ";
        Query query = sessionFactory.getCurrentSession().createSQLQuery(sql);
        query.setString(0, "一梦十年");//参数从0开始
        roles = query.list();        
        return roles;
    }

 

实体查询

 

以上的查询都是关于返回标量值的查询,只是基础性地返回结果集中的“原始”值。以下是从原生 SQL 查询中通过 addEntity() 方法获取实体对象整体的语法:

String sql = "SELECT * FROM EMPLOYEE";
SQLQuery query = session.createSQLQuery(sql);
query.addEntity(Employee.class);
List results = query.list(); 

指定 SQL 查询

以下是从原生 SQL 查询中通过 addEntity() 方法和使用指定 SQL 查询来获取实体对象整体的语法:

String sql = "SELECT * FROM EMPLOYEE WHERE id = :employee_id";
SQLQuery query = session.createSQLQuery(sql);
query.addEntity(Employee.class);
query.setParameter("employee_id", 10);
List results = query.list();  

 

 

2)session.createQuery(sql)

HQL详见:https://www.cnblogs.com/lukelook/p/9686919.html

@Override
    public List<Role> getAllRoles() {
        // TODO Auto-generated method stub
        List<Role> roles = null;        
        String sql = "FROM Role r where r.roleServer = ?0 ";
        Query query = sessionFactory.getCurrentSession().createQuery(sql);
        query.setString("0", "一梦十年");
        roles = query.list();        
        return roles;
    }

 注意:在hibernate4.0之后对?占位符做了处理,可以用命名参数的方式=:catalog或者JPA占位符方式 =?1 

@Override
    public List<Role> getAllRoles() {
        // TODO Auto-generated method stub
        List<Role> roles = null;        
        String sql = "FROM Role r where r.roleServer = :roleServer ";
        Query query = sessionFactory.getCurrentSession().createQuery(sql);
        query.setString("roleServer", "一梦十年");
        roles = query.list();        
        return roles;
    } 

Hibernate 的 HQL 查询功能支持命名参数。这使得 HQL 查询功能既能接受来自用户的简单输入,又无需防御 SQL 注入攻击。

3.Seeion的其他方法 

     3.1 Session的load()与get()方法 

  3.2 Session的save()方法 

  3.3 Session的update()方法persist() 

  3.4 Session的update()方法 

  3.5 Session的saveOrUpdate()方法 

  3.6 Session的delete()方法 

  3.7 Session的merge()方法 

  3.8 Session的replicate()方法 

  3.9 Session的flush()方法 

  3.10 Session的refresh()方法

详见:Hibernate Session 用法详解https://www.cnblogs.com/lukelook/p/9692344.html

 4.Hibernate Criteria用法大全

https://www.cnblogs.com/lukelook/p/9692429.html

posted @ 2018-09-21 15:16  Rooker  阅读(228)  评论(0编辑  收藏  举报