zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    spring框架学习笔记(七)
    spring框架学习笔记(六)
    spring框架学习笔记(五)
    spring框架学习笔记(四)
    spring框架学习笔记(三)
    leetcode 147. Insertion Sort List ----- java
    leetcode 146. LRU Cache ----- java
    leetcode 145. Binary Tree Postorder Traversal ----- java
    leetcode 144. Binary Tree Preorder Traversal ----- java
    leetcode 143. Reorder List ----- java
  • 原文地址:https://www.cnblogs.com/lukelook/p/9686713.html
Copyright © 2011-2022 走看看