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

代码在下面章节

最新文章

  1. ABP入门系列(4)——领域层定义仓储并实现
  2. 深入理解PHP内核(六)哈希表以及PHP的哈希表实现
  3. Tomcat源码分析之—具体启动流程分析
  4. poj1008_Maya_Calendar
  5. 【LA 5713 】 Qin Shi Huang&#39;s National Road System (MST)
  6. Selenium IDE整理
  7. Java类和对象初始化
  8. 列表的实现-----数据结构与算法JavaScript描述 第三章
  9. 七牛 在线管理 v0.1
  10. 方法的形参、ref参数、out参数的区别
  11. Ubuntu 17.10.1安装, 定制
  12. Java:日期类Date与Calendar
  13. Day74
  14. 新近碰到的病毒(TR.Spy.Babonock.A)
  15. Treap仿set 模板
  16. ubuntu16下用QT5实现对话框应用
  17. Failed to load or instantiate TagLibraryValidator class: org.apache.taglibs.standard.tlv.JstlCoreTLV
  18. ios表单验证帮助类
  19. html中img图片居中
  20. bzoj千题计划197:bzoj4247: 挂饰

热门文章

  1. git clone 报“The project you were looking for could not be found.”
  2. arcgis python 一个mxd打包mpk
  3. VMware Workstation虚拟机打开系统时,提示“无法打开内核设备“\\.\Global\vmx86”: 系统找不到指定的文件。是否在安装 VMware Workstation 后重新引导?”
  4. IOS和Andriod手机浏览器内核
  5. OpenGL ES: (2) OpenGL ES 与 EGL、GLSL的关系
  6. c#添加资源
  7. Flutter布局基本情况总结:
  8. (一)java面试易忘题目精选(1)
  9. MediaElement 不能显示的问题
  10. linux查看物理cpu的核数,个数,逻辑cpu的个数