hibernate执行原生态的sql语句,对于增删改hibernate封装的很好,但是对于查询自身比较喜欢原生态的sql语句,但是如果用hql会很麻烦,可能涉及到一个表对应一个类,但是如果我查询的是一个统计集合
首先来看一下原生态hql:
Users.hbm.xml
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- Generated 2018-9-14 21:22:54 by Hibernate Tools 3.5.0.Final -->
<hibernate-mapping>
<class name="com.zking.pojo.Users" table="t_USERS">
<cache usage="read-write" />
<id name="uid" type="java.lang.String">
<column name="UID" />
<generator class="guid" />
</id>
<property name="uname" type="java.lang.String">
<column name="UNAME" />
</property>
<property name="upwd" type="java.lang.String">
<column name="UPWD" />
</property>
</class>
</hibernate-mapping>
hibernate.cfg.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.password">sasa</property>
<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/student?characterEncoding=utf-8</property>
<property name="hibernate.connection.username">root</property>
<property name="show_sql">true</property>
<property name="format_sql">true</property>
<mapping resource="com/zking/pojo/Users.hbm.xml" />
</session-factory>
</hibernate-configuration>
TempTest.java
package com.zking.test;
import java.util.List;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import com.alibaba.fastjson.JSON;
import com.zking.pojo.Users;
public class TempTest {
private Configuration configuration;
private SessionFactory sessionFactory;
private Session session;
private Transaction transaction;
// @Before
// public void before() {
// configuration = new Configuration().configure();
// sessionFactory = configuration.buildSessionFactory();
// session = sessionFactory.openSession();
// transaction = session.beginTransaction();
//
// }
//
// @After
// public void after() {
// transaction.commit();
// session.close();
// sessionFactory.close();
// }
//
// @Test
// public void Temp() {
// String sql = "SELECT * FROM t_users where uname='admin'";
// Users u = session.createNativeQuery(sql, Users.class).getSingleResult();
// System.out.println(JSON.toJSON(u));
// }
//
// @Test
// public void Temp1() {
// String sql = "SELECT * FROM t_users";
// List<Users> lu = session.createNativeQuery(sql, Users.class).getResultList();
// System.out.println(JSON.toJSON(lu));
// }
//
// @Test
// public void Temp2() {
// String sql = "SELECT * FROM t_users";
// List<Users> lu = session.createNativeQuery(sql,
// Users.class).setFetchSize(1).setMaxResults(5).getResultList();
// System.out.println(JSON.toJSON(lu));
// }
//
// @Test
// public void Temp3() {
// String sql = "SELECT * FROM t_users where uname=:uname";
// List<Users> lu = session.createNativeQuery(sql,
// Users.class).setParameter("uname", "sasa").getResultList();
// System.out.println(JSON.toJSON(lu));
// }
//
// @Test
// public void Temp4() {
// String sql = "UPDATE t_users SET upwd='sasa' WHERE uid =
// '817f8ba2-76b7-11e8-918a-54ee75bbb0cd'";
// int index = session.createNativeQuery(sql).executeUpdate();
// System.out.println(JSON.toJSON(index));
// }
//
// @Test
// public void Temp5() {
// String sql = "delete from t_users where
// uid='917f8ba2-76b7-11e8-918a-64ee75bbb0cd'";
// int index = session.createNativeQuery(sql, Users.class).executeUpdate();
// System.out.println(index);
// }
//
// @Test
// public void Temp6() {
// String sql = "INSERT INTO t_users (uid, uname, upwd) VALUES(UUID(), 'wwww',
// 'wwww') ";
// int index = session.createNativeQuery(sql).executeUpdate();
// System.out.println(index);
// }
}
pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.zking</groupId>
<artifactId>hql02</artifactId>
<packaging>war</packaging>
<version>0.0.1-SNAPSHOT</version>
<name>hql02 Maven Webapp</name>
<url>http://maven.apache.org</url>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/org.hibernate/hibernate-core -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>5.2.10.Final</version>
</dependency>
<!-- fastjsonjax -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.47</version>
</dependency>
<!-- 二级缓存jax -->
<dependency>
<groupId>net.sf.ehcache</groupId>
<artifactId>ehcache</artifactId>
<version>2.10.0</version>
</dependency>
<!-- 二级缓存jax -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-ehcache</artifactId>
<version>5.2.10.Final</version>
</dependency>
<!-- 添加mysql的依赖 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.44</version>
</dependency>
</dependencies>
<build>
<finalName>hql02</finalName>
</build>
</project>
一级缓存,二级缓存
package com.zking.test;
import java.util.List;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.junit.Test;
import com.alibaba.fastjson.JSON;
import com.zking.pojo.Users;
public class TempTest {
private Configuration configuration;
private SessionFactory sessionFactory;
private Session session;
private Transaction transaction;
// 一级缓存
// @Test
// public void Test7() {
// configuration = new Configuration().configure();
// sessionFactory = configuration.buildSessionFactory();
// session = sessionFactory.openSession();
//
// //每次都会生成SQL语句
// // List<Users> lu = session.createQuery(" from Users").list();
// // List<Users> lu1 = session.createQuery(" from Users").list();
// // System.out.println(lu);
// // System.out.println(lu1);
//
//
// // get 和 load 才会使用(一级缓存(session))
// Users u = session.load(Users.class, "817f8ba2-76b7-11e8-918a-54ee75bbb0cd");
// Users u1 = session.load(Users.class, "817f8ba2-76b7-11e8-918a-54ee75bbb0cd");
// System.out.println(u);
// System.out.println(u1);
// session.close();
// sessionFactory.close();
// }
// 二级缓存(SQL语句只会执行一次)
// @Test
// public void Temp8() {
// configuration = new Configuration().configure();
// SessionFactory sessionFactory1 = configuration.buildSessionFactory();
// Session session = sessionFactory1.openSession();
// Users u = session.load(Users.class, "817f8ba2-76b7-11e8-918a-54ee75bbb0cd");
// System.out.println(u);
// session.close();
// Session session1 = sessionFactory1.openSession();
// Users u1 = session1.load(Users.class,
// "817f8ba2-76b7-11e8-918a-54ee75bbb0cd");
// System.out.println(u1);
// session.close();
// }
}