(溫故知新) Hibernate 簡易練習(查找資料)
原始碼下載: https://goo.gl/xu4KXV https://goo.gl/1S0qJt
【開發環境】
Tomcat 7
MySQL
【開發工具】
Intellij IDEA 14
【使用FrameWork】
SpringMVC
jQuery
【主要畫面】
簡單的說就是與資料庫結合來查找資料,使用 BasicDataSource Hibernate4搭配 MySQL 使用。
【使用到的 MySQL 資料】
-- MySQL 語法
CREATE TABLE IF NOT EXISTS `USER_PROFILE` (
`ID` int(11) NOT NULL AUTO_INCREMENT,
`USER_ID` varchar(11) NOT NULL,
`USER_NAME` varchar(10) NOT NULL,
`USER_SEX` varchar(10) NOT NULL,
`USER_PHONE` varchar(10) NOT NULL,
`USER_ADDRESS` varchar(10) NOT NULL,
PRIMARY KEY (`ID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ;
--INSERT INTO `USER_PROFILE` (`USER_ID`, `USER_NAME`, `USER_SEX`,`USER_PHONE`,`USER_ADDRESS`) VALUES
('2013000001', '張三', 'M','0911120111','台北市士林區'),
('2013000002', '李四', 'M','0911120112','新北市土城區'),
('2013000003', '王五', 'M','0911120113','新北市三重區'),
('2013000004', '陳二', 'F','0911120114','台北市信義區'),
('2013000005', '孫九', 'F','0911120115','台北市中山區');
SELECT * FROM `user_profile`;
直接使用 Annotation 來設置
先使用 Intellij IDEA 建立一個 maven 的 webapp 專案。
Web.xml 不需要,因為全部使用 POJO 來設置。先配置好Maven使用的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>Hibernate_easy_1</groupId>
<artifactId>exam</artifactId>
<packaging>war</packaging>
<version>1.0-SNAPSHOT</version>
<name>exam Maven Webapp</name>
<url>http://maven.apache.org</url>
<properties>
<compiler.version>1.7</compiler.version>
<junit.version>3.8.1</junit.version>
<springframework.version>4.0.6.RELEASE</springframework.version>
<hibernate.version>4.3.6.Final</hibernate.version>
<mysql.version>5.1.31</mysql.version>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>${junit.version}</version>
<scope>test</scope>
</dependency>
<!-- Spring -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${springframework.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>${springframework.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${springframework.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>${springframework.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-orm</artifactId>
<version>${springframework.version}</version>
</dependency>
<!-- Hibernate -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>${hibernate.version}</version>
</dependency>
<!-- MySQL -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${mysql.version}</version>
</dependency>
<!-- Servlet+JSP+JSTL -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
</dependency>
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>javax.servlet.jsp-api</artifactId>
<version>2.3.1</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
</dependencies>
<build>
<finalName>SpringHibernateExample</finalName>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>${compiler.version}</source>
<target>${compiler.version}</target>
</configuration>
</plugin>
</plugins>
</build>
</project>
首先來完成 Model 用來對應資料庫的欄位
package test.model;
import javax.persistence.*;
/**
* Created by Hsu on 2015/5/9.
*/
@Entity
@Table(name="USER_PROFILE")
public class USER_PROFILE {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private int id;
@Column(name = "USER_ID", nullable = false)
private String userId;
@Column(name = "USER_NAME", nullable = false)
private String userName;
@Column(name = "USER_SEX", nullable = false)
private String userSex;
@Column(name = "USER_PHONE", nullable = false)
private String userPhone;
@Column(name = "USER_ADDRESS", nullable = false)
private String userAddress;
// 暫存變數
@Transient
private boolean male;
// 暫存變數
@Transient
private boolean female;
public boolean isMale() {
return male;
}
public void setMale(boolean male) {
if(male){
this.userSex = "M";
}
this.male = male;
}
public boolean isFemale() {
return female;
}
public void setFemale(boolean female) {
if(female){
this.userSex = "F";
}
this.female = female;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getUserId() {
return userId;
}
public void setUserId(String userId) {
this.userId = userId;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getUserSex() {
return userSex;
}
public void setUserSex(String userSex) {
this.userSex = userSex;
}
public String getUserPhone() {
return userPhone;
}
public void setUserPhone(String userPhone) {
this.userPhone = userPhone;
}
public String getUserAddress() {
return userAddress;
}
public void setUserAddress(String userAddress) {
this.userAddress = userAddress;
}
}
程式中設置了 @Transient 用來存放變數,表示其不需要對應到資料庫的 Column,而整個類別的開頭標示了
@Entity
@Table(name="USER_PROFILE")
註明其為Hibernate 用的實體,且對照到USER_PROFILE這張Table,其餘的 @Column 則是指定該變數對照到的欄位,並且說明儲存資料時其資料不得為 null。
接著新增 Hibernate 的配置文件(POJO)
package test.configuration;
import org.hibernate.SessionFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
import org.springframework.core.env.Environment;
import org.springframework.jdbc.datasource.DriverManagerDataSource;
import org.springframework.orm.hibernate4.HibernateTransactionManager;
import org.springframework.orm.hibernate4.LocalSessionFactoryBean;
import org.springframework.transaction.annotation.EnableTransactionManagement;
import javax.sql.DataSource;
import java.util.Properties;
/**
* Created by Hsu on 2015/5/9.
*/
@Configuration
@EnableTransactionManagement
@ComponentScan({"test.configuration"})
@PropertySource(value = {"classpath:application.properties"})
public class HibernateConfiguration {
@Autowired
private Environment environment;
@Bean
public DataSource dataSource(){
DriverManagerDataSource dataSource = new DriverManagerDataSource();
dataSource.setDriverClassName(environment.getRequiredProperty("jdbc.driverClassName"));
dataSource.setUrl(environment.getRequiredProperty("jdbc.url"));
dataSource.setUsername(environment.getRequiredProperty("jdbc.username"));
dataSource.setPassword(environment.getRequiredProperty("jdbc.password"));
return dataSource;
}
private Properties hibernateProperties() {
Properties properties = new Properties();
properties.put("hibernate.dialect", environment.getRequiredProperty("hibernate.dialect"));
properties.put("hibernate.show_sql", environment.getRequiredProperty("hibernate.show_sql"));
properties.put("hibernate.format_sql", environment.getRequiredProperty("hibernate.format_sql"));
return properties;
}
@Bean
public LocalSessionFactoryBean sessionFactory(){
LocalSessionFactoryBean sessionFactory = new LocalSessionFactoryBean();
sessionFactory.setDataSource(dataSource());
sessionFactory.setPackagesToScan(new String[]{"test.model"});
sessionFactory.setHibernateProperties(hibernateProperties());
return sessionFactory;
}
@Bean
@Autowired
public HibernateTransactionManager transactionManager(SessionFactory s) {
HibernateTransactionManager txManager = new HibernateTransactionManager();
txManager.setSessionFactory(s);
return txManager;
}
}
由於將使用 Implements WebApplicationInitializer 的方式載入配置檔,所以我們可以將一些Config獨立出來,如下AppConfig.java,開頭的 @Configuration 就宣告了他是一個配置檔
package test.configuration;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.ViewResolver;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.view.InternalResourceViewResolver;
/**
* Created by Hsu on 2015/5/9.
*/
@Configuration
@EnableWebMvc
@ComponentScan(basePackages = "test")
public class AppConfig {
// 設置 View 的解析器
@Bean
public ViewResolver getViewResolver(){
InternalResourceViewResolver resolver = new InternalResourceViewResolver();
resolver.setPrefix("/WEB-INF/views/");
resolver.setSuffix(".jsp");
return resolver;
}
}
上面這個配置檔,我們使用下面這個POJO AppInitializer 來載入。
package test.configuration;
import org.springframework.web.WebApplicationInitializer;
import org.springframework.web.context.support.AnnotationConfigWebApplicationContext;
import org.springframework.web.filter.CharacterEncodingFilter;
import org.springframework.web.servlet.DispatcherServlet;
import javax.servlet.FilterRegistration;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletRegistration;
/**
* Created by Hsu on 2015/5/9.
*/
public class AppInitializer implements WebApplicationInitializer {
@Override
public void onStartup(ServletContext servletContext) throws ServletException {
AnnotationConfigWebApplicationContext ctx = new AnnotationConfigWebApplicationContext();
ctx.register(AppConfig.class);
ctx.setServletContext(servletContext);
// 設定 UTF-8 強制轉碼
FilterRegistration.Dynamic encodingFilter = servletContext.addFilter("encoding-filter",new CharacterEncodingFilter());
encodingFilter.setInitParameter("encoding","UTF-8");
encodingFilter.setInitParameter("foreEncoding","true");
encodingFilter.addMappingForUrlPatterns(null, true, "/*");
// 設置 servlet
ServletRegistration.Dynamic servlet = servletContext.addServlet("dispatcher", new DispatcherServlet(ctx));
servlet.setLoadOnStartup(1);
servlet.addMapping("/");
}
}
以上的環境配置相等於
<!-- UTF 轉碼 -->
<filter>
<filter-name>charsetFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>charsetFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- 設定 Annotation class 資料 -->
<context-param>
<param-name>contextClass</param-name>
<param-value>org.springframework.web.context.support.AnnotationConfigWebApplicationContext</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<servlet>
<servlet-name>dispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextClass</param-name>
<param-value>org.springframework.web.context.support.AnnotationConfigWebApplicationContext</param-value>
</init-param>
<init-param>
<!-- 設定搜尋 package 路徑 -->
<param-name>contextConfigLocation</param-name>
<param-value>test</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>dispatcher</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
接下來是Dao 的部份,分三層來設計(abstract/interface/implements),AbstractDao 中的 sessionFactory 對照到HibernateConfiguration
package test.dao;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.springframework.beans.factory.annotation.Autowired;
/**
* Created by Hsu on 2015/5/9.
*/
public abstract class AbstractDao {
@Autowired
private SessionFactory sessionFactory;
protected Session getSession(){
return sessionFactory.getCurrentSession();
}
public void persist(Object entity){
getSession().persist(entity);
}
public void delete(Object entity){
getSession().delete(entity);
}
}
介面層
package test.dao;
import test.model.USER_PROFILE;
import java.util.List;
/**
* Created by Hsu on 2015/5/9.
*/
public interface UserProfileDao {
void saveUserProfile(USER_PROFILE user_profile);
List<USER_PROFILE> findUserProfile(USER_PROFILE user_profile);
void deleteUserProfileById(int id);
}
實現層
開頭使用@Repository 來指明他是一個 Repository
package test.dao;
import org.hibernate.Query;
import org.springframework.stereotype.Repository;
import test.model.USER_PROFILE;
import test.util.StringUtil;
import java.util.List;
/**
* Created by Hsu on 2015/5/9.
*/
@Repository("userProfileDao")
public class UserProfileDaoImpl extends AbstractDao implements UserProfileDao {
@Override
public void saveUserProfile(USER_PROFILE user_profile) {
persist(user_profile);
}
@SuppressWarnings("unchecked")
@Override
public List<USER_PROFILE> findUserProfile(USER_PROFILE user_profile) {
String hql = "from test.model.USER_PROFILE user where 1=1 ";
String queryStr = generateWhere(user_profile);
Query query = getSession().createQuery(hql + queryStr);
List<USER_PROFILE> returnValue = (List<USER_PROFILE>)query.list();
return returnValue;
}
@Override
public void deleteUserProfileById(int id) {
Query query = getSession().createSQLQuery("DELETE FROM user_profile WHERE ID=" + id);
query.executeUpdate();
}
private String generateWhere(USER_PROFILE user_profile){
StringBuffer sb = new StringBuffer();
// 姓名查詢
if(!"".equals(StringUtil.NulltoString(user_profile.getUserName()))){
sb.append(" and user.userName like '%" +user_profile.getUserName() +"%' " );
}
// 電話查詢
if(!"".equals(StringUtil.NulltoString(user_profile.getUserPhone()))){
sb.append(" and user.userPhone ='" + user_profile.getUserPhone() + "' " );
}
// 性別查詢
if(!"".equals(StringUtil.NulltoString(user_profile.getUserSex()))){
sb.append(" and user.userSex = '" + user_profile.getUserSex() + "' ");
}
return (sb.length()>0?sb.toString():"");
}
}
上面比較需要注意的是,我們使用了Session.createQuery(String str)的方式來建立查詢,這樣使用的是 HQL(The Hibernate Query Language) 的語法,詳細的使用介紹請參閱官網。
Ref: https://docs.jboss.org/hibernate/core/4.3/manual/en-US/html/ch16.html
再來是Service 層,使用(Interface/Implements)
package test.service;
import test.model.USER_PROFILE;
import java.util.List;
/**
* Created by Hsu on 2015/5/9.
*/
public interface UserProfileService {
void saveUserProfile(USER_PROFILE user_profile);
List<USER_PROFILE> findUserProfile(USER_PROFILE user_profile);
void deleteUserProfileById(int id);
}
由於我們的 Dao 都建立好了,所有的Service 只要去呼叫對應的 Dao 來做資料庫的存取,開頭使用@Service 來指明他是一個 Service
package test.service;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import test.dao.UserProfileDao;
import test.model.USER_PROFILE;
import java.util.List;
/**
* Created by Hsu on 2015/5/9.
*/
@Service("userProfileService")
@Transactional
public class UserProfileServiceImpl implements UserProfileService {
@Autowired
private UserProfileDao dao;
@Override
public void saveUserProfile(USER_PROFILE user_profile) {
dao.saveUserProfile(user_profile);
}
@Override
public List<USER_PROFILE> findUserProfile(USER_PROFILE user_profile) {
return dao.findUserProfile(user_profile);
}
@Override
public void deleteUserProfileById(int id) {
dao.deleteUserProfileById(id);
}
}
最後是Controller 的部份
裡面會使用 @Autowired 的方式將 Service 載入,開頭並使用 @Controller 來宣告他是一個 Controller
package test.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.ModelAndView;
import test.model.USER_PROFILE;
import test.service.UserProfileService;
import java.util.ArrayList;
import java.util.List;
/**
* Created by Hsu on 2015/5/7.
* Ref: Spring 4 MVC+Hibernate 4+MySQL+Maven integration example using annotations
* http://goo.gl/J8Nlws
*/
@Controller
public class HomeController {
@Autowired
private UserProfileService service;
@RequestMapping(value = "/home", method = RequestMethod.GET)
public ModelAndView init(ModelAndView model){
// 設定初始物件
USER_PROFILE user_profile = new USER_PROFILE();
List<USER_PROFILE> listUser = new ArrayList<>();
model.addObject("user_profile", user_profile);
model.addObject("listUser", listUser);
// 設定要回傳的 View 名稱
model.setViewName("home");
return model;
}
@RequestMapping(value = "/listAll")
public ModelAndView listUser(ModelAndView model){
// 取得全部資料
USER_PROFILE user_profile = new USER_PROFILE();
List<USER_PROFILE> listUser = service.findUserProfile(user_profile);
model.addObject("listUser", listUser);
model.setViewName("home");
return model;
}
@RequestMapping(value = "/get")
public ModelAndView get(@ModelAttribute("user_profile") USER_PROFILE user_profile){
// 依頁面所輸入及勾選條件取得資料
List<USER_PROFILE> listUser = service.findUserProfile(user_profile);
return new ModelAndView("home","listUser",listUser);
}
}
application.properties
jdbc.driverClassName = com.mysql.jdbc.Driver
jdbc.url = jdbc:mysql://localhost:3306/test
jdbc.username = test
jdbc.password = test
hibernate.dialect = org.hibernate.dialect.MySQLDialect
hibernate.show_sql = true
hibernate.format_sql = true
StringUtil.java
package test.util;
/**
* Created by Hsu on 2015/4/16.
*/
public class StringUtil {
public static String NulltoString(String strobj){
if(null == strobj){
return "";
}else{
return strobj;
}
}
}
index.jsp
<%response.sendRedirect("home");%>
home.jsp
<%--
Created by IntelliJ IDEA.
User: Hsu
Date: 2015/5/7
Time: 下午 06:30
To change this template use File | Settings | File Templates.
--%>
<%@ page language="java" contentType="text/html;charset=UTF-8" pageEncoding="UTF-8" %>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
<title>Spring_easy_1</title>
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/>
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min.js"></script>
<script>
$(function(){
$("#ck_male").click(function(){
$("#ck_female").prop("checked",false);
}) ;
$("#ck_female").click(function(){
$("#ck_male").prop("checked",false);
}) ;
});
</script>
<style>
table{
border: 1px solid black;
}
table td{
border: 1px solid black;
}
table th{
border: 1px solid black;
}
</style>
</head>
<body>
<div align="center">
<h2>Hibernate_easy_1</h2>
<form:form method="post" action="/get" modelAttribute="user_profile">
<table>
<tr>
<td>使用者姓名</td>
<td><form:input path="userName"/></td>
</tr>
<tr>
<td>使用者電話</td>
<td><form:input path="userPhone"/></td>
</tr>
<tr>
<td>使用者性別</td>
<td>
<form:checkbox id="ck_male" path="male" label="男"/><br>
<form:checkbox id="ck_female" path="female" label="女"/>
</td>
</tr>
<tr>
<td colspan="2" align="center">
<input type="submit" value="查詢"/> <a href="home">清除</a>
</td>
</tr>
</table>
</form:form>
<hr>
<c:if test="${not empty listUser}">
<table>
<tr>
<th>編號</th>
<th>姓名</th>
<th>性別</th>
<th>電話</th>
<th>地址</th>
</tr>
<c:forEach var="user" items="${listUser}">
<tr>
<td>${user.userId}<input type="hidden" value="${user.id}">
</td>
<td>${user.userName}</td>
<td>${user.userSex}</td>
<td>${user.userPhone}</td>
<td>${user.userAddress}</td>
</tr>
</c:forEach>
</table>
</c:if>
</div>
</body>
</html>
接著將其部屬在 Tomcat 就可以看到結果囉。
延伸問題,Dao 中若不使用 Session.createQuery 改使用 Criteria的方式來實現,下面為修改過的 UserProfileDaoImpl.java
package test.dao;
import org.hibernate.Criteria;
import org.hibernate.Query;
import org.hibernate.criterion.Criterion;
import org.hibernate.criterion.Junction;
import org.hibernate.criterion.LogicalExpression;
import org.hibernate.criterion.Restrictions;
import org.springframework.stereotype.Repository;
import test.model.USER_PROFILE;
import test.util.StringUtil;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
/**
* Created by Hsu on 2015/6/9.
*/
@Repository("userProfileDao")
public class UserProfileDaoImpl extends AbstractDao implements UserProfileDao {
@Override
public void saveUserProfile(USER_PROFILE user_profile) {
persist(user_profile);
}
@SuppressWarnings("unchecked")
@Override
public List<USER_PROFILE> findUserProfile(USER_PROFILE user_profile) {
// 使用 Criteria 來實現查詢
Criteria cr = getSession().createCriteria(USER_PROFILE.class);
// 將查詢條件逐一整理
generateWhere(user_profile, cr);
List<USER_PROFILE> returnValue = (List<USER_PROFILE>)cr.list();
return returnValue;
}
@Override
public void deleteUserProfileById(int id) {
Query query = getSession().createSQLQuery("DELETE FROM user_profile WHERE ID=" + id);
query.executeUpdate();
}
private void generateWhere(USER_PROFILE user_profile, Criteria criteria){
// 總查詢條件 使用 Junction 類別來組合
List<Criterion> conditionList = new ArrayList<Criterion>();
// 姓名查詢
Criterion name = null;
if(!"".equals(StringUtil.NulltoString(user_profile.getUserName()))){
name = Restrictions.like("userName","%" + user_profile.getUserName() + "%");
conditionList.add(name);
}
// 電話查詢
Criterion phone = null;
if(!"".equals(StringUtil.NulltoString(user_profile.getUserPhone()))){
phone = Restrictions.eq("userPhone", user_profile.getUserPhone());
conditionList.add(phone);
}
// 性別查詢
Criterion sex = null;
if(!"".equals(StringUtil.NulltoString(user_profile.getUserSex()))){
sex = Restrictions.eq("userSex", user_profile.getUserSex());
conditionList.add(sex);
}
// 將邏輯組合起來
// Conjunction => And / Junction => OR
Junction conditionGroup = Restrictions.conjunction();
if(conditionList.size()>0){
for(Iterator iterator = conditionList.iterator(); iterator.hasNext();){
Criterion criterion = (Criterion)iterator.next();
// 若有條件,則加入該集合
conditionGroup.add(criterion);
}
}
criteria.add(conditionGroup);
}
}
查詢條件 【姓名】 / 【電話】 / 【性別】是 AND(聯集) 的條件,在 Criteria 中要加上三個以上的查詢條件,可以使用 Juction 的實現類別 Conjuction 來完成,或是使用
criteria.add(Restrictions.and(Restrictions.and(condition1, condition2), condition3));
的方式來完成。
參考:
How to make a criteria query with 3 OR Criterions properly?
Hibernate - Criteria Queries
初学者的好消息。谢谢。
回覆刪除学习休眠