(六)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()
                        + "\t 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();
        }

    }

}

 代码在下面章节

posted @ 2017-05-13 16:17  shyroke、  阅读(216)  评论(0编辑  收藏  举报
作者:shyroke 博客地址:http://www.cnblogs.com/shyroke/ 转载注明来源~