zoukankan      html  css  js  c++  java
  • (六)Hibernate的增删改查操作(3)

    一、在Hibernate中使用原生SQL语句

    • sql语句面向的是数据库,所以sql语句中对应的不再是bean了,比如sql="select * from user"   在hql中*是无效的,但是在sql中可以使用,且user指的是数据库中的user表。

    案例一:

    package action;
    
    import java.util.List;
    
    import org.hibernate.SQLQuery;
    import org.hibernate.Session;
    import org.hibernate.Transaction;
    import org.hibernate.transform.Transformers;
    
    import bean.User;
    import util.HibernateUtil;
    
    /**
     * hibernate支持原生SQL语句操作
     * 
     * @author 半颗柠檬、
     * 
     */
    public class Query_SQL {
    
        public static void main(String[] args) {
             Query_SQL.testQuery(); // hibernate支持原生SQL语句的查询操作
    //        Query_SQL.insert(); // insert语句
        }
    
        private static void testQuery() {
    
            Session session = null;
            Transaction tran = null;
            SQLQuery sqlQuery = null;
            String sql = "";
            try {
                session = HibernateUtil.getSession();
                tran = session.beginTransaction();
    
                // HQL语句不能使用* , 而原生sql语句可以,且user对应的是数据库中的表名而不是bean的类名
                sql = " select * from user where username like :username ";
                sqlQuery = session.createSQLQuery(sql);
                sqlQuery.setString("username", "%user%");
    
                sqlQuery.setFirstResult(0);
                sqlQuery.setMaxResults(2);
                // 查询结果默认返回数组
                List<Object[]> objList = sqlQuery.list();
    
                System.out.println(objList.size());
    
                /**
                 * 查询结果返回一个bean
                 */
                sql = " select * from user where username like :username ";
                sqlQuery = session.createSQLQuery(sql);
                sqlQuery.setString("username", "%user%");
    
                // addScalar(String)方法作用:
                // 指定查询结果包含哪些数据列---没有被addScalar选出的列将不会包含在查询结果中。
                sqlQuery.addScalar("username");
                sqlQuery.addScalar("userid");
                
                // 把结果转为bean,注意bean的字段名要和数据库的字段名一致,区分大小写
                //如果数据库的字段和bean中的属性名不一致,这里的数据库中的is_admin和bean中的isadmin不一致,可以通过在sql语句中添加别名sql="select is_admin as isadmin"来使得
                //两者一致
                sqlQuery.setResultTransformer(Transformers.aliasToBean(User.class));
    
                List<User> userList = sqlQuery.list();
    
                for (User user : userList) {
    
                    System.out.println("username=" + user.getUsername()
                            + "	 userid=" + user.getUserid());
    
                }
    
                tran.commit();
            } catch (Exception e) {
                e.printStackTrace();
                tran.rollback();
            } finally {
                HibernateUtil.closeSession();
            }
    
        }
    
        private static void insert() {
    
            Session session = null;
            SQLQuery sqlQuery = null;
            Transaction tran = null;
            String sql = "";
            try {
                session = HibernateUtil.getSession();
                tran = session.beginTransaction();
    
                sql = "insert into user(userid,username,password) values(?,?,?)";
    
                sqlQuery = session.createSQLQuery(sql);
                sqlQuery.setParameter(0, 8);
                sqlQuery.setParameter(1, "user6");
                sqlQuery.setParameter(2, "123");
    
                int count = sqlQuery.executeUpdate();
                System.out.println("插入了" + count + "条数据");
    
                tran.commit();
            } catch (Exception e) {
                e.printStackTrace();
                tran.rollback();
            } finally {
                HibernateUtil.closeSession();
            }
    
        }
    
    }

     代码在下面章节

  • 相关阅读:
    在VS2010下,用C语言编写pthread多线程程序的配置
    java帮助文档系列JDK1.5 JDK1.6 JDK1.7官方中英完整版下载
    瑜伽练习day02----适合练习瑜伽时听的歌曲
    瑜伽练习day01----瑜伽练习的好处,坏处
    抛出错误Debug Assertion Failed!
    stringstream的基本用法
    AWS中S3的Bucket桶访问策略
    AWS中SQS的几项使用注意
    AWS在.Net中连接数据库时发生认证错误的解决办法
    .Net捕捉配置或程序错误
  • 原文地址:https://www.cnblogs.com/shyroke/p/6849243.html
Copyright © 2011-2022 走看看