(六)Hibernate的增删改查操作(2)

一、在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();
        }

    }

}

代码在下面章节

时间: 2024-11-06 08:23:21

(六)Hibernate的增删改查操作(2)的相关文章

Hibernate 基本增删改查操作

本文将要介绍Hibernate基本的增删改查的操作的实现,首先我们创建一个对象实例.一般情况下会创建User,本例也不例外需要创建这样的对象. [转载使用,请注明出处:http://blog.csdn.net/mahoking] User对象 public class User { private Integer id; private String userName; private String password; /*以下省略getter与setter*/ } 配置User.hbm.xml

Hibernate 批量增删改查操作

上文介绍Hibernate基本的增删改查,本例将介绍更实用的批量增删改查的操作的实现.本文中增删改查的操作,仅供参考.如果读者需要应用到实际的应用场景需要的话,需要在此基础上扩展与丰富. [转载使用,请注明出处:http://blog.csdn.net/mahoking] 在学习本例时,需要扩展一下Hibernate中Session的知识.Hibernate中的Session是一级缓存,可以理解为进程级的缓存.在进程运行期间一直存在.Session可以理解为一个可以操作数据库的对象 具体如何操作

(五)Hibernate的增删改查操作(2)

接上一章节 HQL的预编译语句 HIbernate中的预编译与Spring的预编译的处理差不多.    1:使用标准的?  2:使用命名参数   2.1:使用名称逐个设置.   2.2:使用Map(key的值等于参数的名称)    2.3:使用Bean(属性的名称等于参数的名称) 案例一:Query_HQL_Prepared.java package action; import java.util.HashMap; import java.util.List; import java.util

Java+MyEclipse+Tomcat (六)详解Servlet和DAO数据库增删改查操作

此篇文章主要讲述DAO.Java Bean和Servlet实现操作数据库,把链接数据库.数据库操作.前端界面显示分模块化实现.其中包括数据的CRUD增删改查操作,并通过一个常用的JSP网站前端模板界面进行描述.参考前文: Java+MyEclipse+Tomcat (一)配置过程及jsp网站开发入门 Java+MyEclipse+Tomcat (二)配置Servlet及简单实现表单提交 Java+MyEclipse+Tomcat (三)配置MySQL及查询数据显示在JSP网页中 Java+MyE

(转)SQLite数据库增删改查操作

原文:http://www.cnblogs.com/linjiqin/archive/2011/05/26/2059182.html SQLite数据库增删改查操作 一.使用嵌入式关系型SQLite数据库存储数据 在Android平台上,集成了一个嵌入式关系型数据库--SQLite,SQLite3支持NULL.INTEGER.REAL(浮点数字).TEXT(字符串文本)和BLOB(二进制对象)数据类型,虽然它支持的类型只有五种,但实际上sqlite3也接受varchar(n).char(n).d

Scala对MongoDB的增删改查操作

=========================================== 原文链接: Scala对MongoDB的增删改查操作 转载请注明出处! =========================================== 依赖环境:jdk1.8.Scala 2.12.idea mongodb Driver:3.1.1.注意,mongo for scala的驱动涉及多个jar(如下图),依赖于mongo-java-driver.jar 这里使用的sbt管理依赖,直接在bu

作业员工信息表实现增删改查操作

有以下员工信息表 当然此表你在文件存储时可以这样表示 1 1,Alex Li,22,13651054608,IT,2013-04-01 现需要对这个员工信息文件,实现增删改查操作 可进行模糊查询,语法至少支持下面3种: select name,age from staff_table where age > 22 select  * from staff_table where dept = "IT" select  * from staff_table where enroll

【greenDAO3】 项目搭建与增删改查操作

最近需要开始一个新的项目了,考虑到既然是新项目了,那么一些常用的框架肯定也要用当下最火的!这次的新项目中涉及到了本地数据存储,很早前有个项目的本地数据库框架用的是ActiveAndroid,github找了下这个框架,发现已经两年多已经没有更新了.然后就想到了一直没有时间去涉及到的greenDAO,github一搜索,哦呦?star有5000+,并且依然保持着很高的更新频率,并且性能远远的高于activeAndroid(见下图),果断选用. 刚开始想偷偷懒,大致浏览了下greenDAO官网后就开

基于Java的XML文件模拟数据库进行增删改查操作

我们知道XML文件既可以用来进行数据的传输,也可以配合DTD约束文件用来作为配置文件,当然其本质就是一个加了标签以及众多空格保持格式的字符串,那么就可以用Java进行操作. 本例是使用MyEclipse带入DOM4j解析时要用的jar包的基础上做的:当然DOM4j相对于DOM SAX 等解析方式的方便程度是不言而喻的. 下面是本次用例XML文件 <?xml version="1.0" encoding="UTF-8"?> <persons>