hibernate 原生態 SQL 語句 及 快取
阿新 • • 發佈:2019-01-05
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();
// }
}