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

代码在下面章节

(六)Hibernate的增删改查操作(3)的更多相关文章

  1. (四)Hibernate的增删改查操作(1)

    Hiberntae的查找操作有多种: 1.  使用Criteria接口查询 Query_Criteria.java package action; import java.util.ArrayList ...

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

    接上一章节 HQL的预编译语句 HIbernate中的预编译与Spring的预编译的处理差不多.    1:使用标准的?  2:使用命名参数   2.1:使用名称逐个设置.   2.2:使用Map(k ...

  3. python 全栈开发,Day124(MongoDB初识,增删改查操作,数据类型,$关键字以及$修改器,"$"的奇妙用法,Array Object 的特殊操作,选取跳过排序,客户端操作)

    一.MongoDB初识 什么是MongoDB MongoDB 是一个基于分布式文件存储的数据库.由 C++ 语言编写.旨在为 WEB 应用提供可扩展的高性能数据存储解决方案. MongoDB 是一个介 ...

  4. Hibernate5笔记2--单表的增删改查操作

    单表的增删改查操作: (1)定义获取Session和SessionFactory的工具类: package com.tongji.utils; import org.hibernate.Session ...

  5. 如何搭建一个WEB服务器项目(二)—— 对数据库表进行基本的增删改查操作

    使用HibernateTemplate进行增删改查操作 观前提示:本系列文章有关服务器以及后端程序这些概念,我写的全是自己的理解,并不一定正确,希望不要误人子弟.欢迎各位大佬来评论区提出问题或者是指出 ...

  6. Go微服务框架go-kratos实战03:使用 gorm 实现增删改查操作

    一.简介 在上一篇文章 go-kratos实战02 中,详细介绍了用 kratos 编写项目代码的步骤.这篇就在上篇基础上,再结合 Go 数据库操作库 gorm 一步一步来实现一个简单的增删改查操作. ...

  7. mongoVUE的增删改查操作使用说明

    mongoVUE的增删改查操作使用说明 一. 查询 1. 精确查询 1)右键点击集合名,再左键点击Find 或者直接点击工具栏上的Find 2)查询界面,包括四个区域 {Find}区,查询条件格式{& ...

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

    原文:http://www.cnblogs.com/linjiqin/archive/2011/05/26/2059182.html SQLite数据库增删改查操作 一.使用嵌入式关系型SQLite数 ...

  9. 详谈easyui datagrid增删改查操作

    转自:http://blog.csdn.net/abauch_d/article/details/7734395 前几天我把easyui dadtagrid的增删改查的实现代码贴了出来,发现访问量达到 ...

随机推荐

  1. 为什么要装Tomcat?

    来说一说C/S架构和B/S架构   先来说说为什么C/S框架不用对tomcat之类的部署?   其中主要的原因在与这种结构本身就是有服务器来提供服务的,客户端来使用服务.   再者说为什么B/S架构要 ...

  2. Redis Desktop Manager的下载及安装

    一.下载Redis Desktop Manager 1. Redis Desktop Manager 的下载路径 (1)https://pan.baidu.com/s/1Jvr9MbgFn4UJh4M ...

  3. TynSerial结构体序列(还原)

    TynSerial结构体序列(还原) 1)定义一个结构体 type TRec = record id, name: string; end; 2)结构体序列(还原) procedure TForm1. ...

  4. OpenJudge计算概论-数组逆序重放

    /*=============================================================== 数组逆序重放 总时间限制: 1000ms 内存限制: 65536kB ...

  5. 利用pathMeasure实现路径动画

    package com.loaderman.customviewdemo; import android.animation.ValueAnimator; import android.content ...

  6. labelimg data

    <annotation> <folder>img_data_box_1500</folder> <filename>798.jpg</filena ...

  7. mysql 1577、1548错误 解决方案

    mysql 1577.1548错误 解决方案 1.mysql版本: 5.5.12 2.问题原因: 使用Navicat导出数据库的提示 :1577 – Cannot proceed because sy ...

  8. 通过本地Agent监控Azure sql database

    背景: 虽然Azure sql database有DMVs可以查看DTU等使用情况,但记录有时间限制,不会一直保留.为了更好监控Azure_sql_database上各个库的DTU使用情况.数据库磁盘 ...

  9. Kubernetes简介二

    Kubernetes是什么?Kubernetes是容器集群管理系统,是一个开源的平台,可以实现容器集群的自动化部署.自动扩缩容.维护等功能.通过Kubernetes你可以: 快速部署应用 快速扩展应用 ...

  10. jQuery BlockUI Plugin Demo 6(Options)

    Options BlockUI's default options look (exactly) like this: // override these in your code to change ...