一、整合Hibernate
1.创建项目
2.添加相关的依赖
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-orm</artifactId>
<version>5.2.13.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.2.13.RELEASE</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.9.2</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.0.9</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.17</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>5.0.7.Final</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>5.2.13.RELEASE</version>
</dependency>
</dependencies>
3.添加相关的配置文件
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd">
<!-- 引入db.properties -->
<context:property-placeholder location="classpath:db.properties"/>
<!-- 创建druid 的数据源 -->
<bean class="com.alibaba.druid.pool.DruidDataSource" id="dataSource">
<property name="url" value="${jdbc.url}"/>
<property name="driverClassName" value="${jdbc.driver}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</bean>
<!-- 配置Hibernate的SessionFactory对象 -->
<bean class="org.springframework.orm.hibernate5.LocalSessionFactoryBean" id="sessionFactory">
<!--关联数据源-->
<property name="dataSource" ref="dataSource"/>
<!-- 配置Hibernate的属性信息 -->
<property name="hibernateProperties">
<props>
<prop key="show_sql">true</prop>
<prop key="hibernate.hbm2ddl.auto">update</prop>
</props>
</property>
<!--扫描路径-->
<property name="packagesToScan">
<list>
<value>com.biao.pojo</value>
</list>
</property>
</bean>
<!-- 配置HibernateTemplate对象 -->
<bean class="org.springframework.orm.hibernate5.HibernateTemplate" id="hibernateTemplate">
<property name="sessionFactory" ref="sessionFactory"/>
</bean>
<!-- 配置事务管理 -->
<bean class="org.springframework.orm.hibernate5.HibernateTransactionManager" id="transactionManager">
<property name="sessionFactory" ref="sessionFactory"/>
</bean>
<!-- 配置开启事务注解 -->
<tx:annotation-driven transaction-manager="transactionManager"/>
<!-- 配置扫描路径 -->
<context:component-scan base-package="com.biao"/>
</beans>
4.创建POJO
和表结构中的t_user表对应即可
4.1 接口
package com.biao.pojo;
import javax.persistence.*;
import java.io.Serializable;
@Entity
@Table(name = "t_user")
public class Users implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "user_id")
private Integer userId;
@Column(name = "user_name")
private String userName;
@Column(name = "real_name")
private String realName;
public Integer getUserId() {
return userId;
}
public void setUserId(Integer userId) {
this.userId = userId;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getRealName() {
return realName;
}
public void setRealName(String realName) {
this.realName = realName;
}
}
4.2 接口实现类
package com.biao.dao.impl;
import com.biao.dao.IUserDao;
import com.biao.pojo.Users;
import com.sun.tools.internal.xjc.reader.xmlschema.bindinfo.BIConversion;
import org.hibernate.Criteria;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.criterion.Restrictions;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.orm.hibernate5.HibernateTemplate;
import org.springframework.stereotype.Repository;
import java.util.List;
@Repository
public class UserDaoImpl implements IUserDao {
@Autowired
private HibernateTemplate template;
public void insertUsers(Users users) {
this.template.save(users);
}
public void updateUsers(Users users) {
this.template.update(users);
}
public void deleteUsers(Users users) {
this.template.delete(users);
}
public Users selectUsersById(Integer userId) {
return this.template.get(Users.class,userId);
}
public List<Users> selectUsersByName(String userName) {
// 我们要执行特殊的查询操作 我们需要获取对应的Session对象
Session session = this.template.getSessionFactory().getCurrentSession();
// 通过Session对象创建Query对象 HQL 语句
Query query = session.createQuery(" from Users where userName = :abc");
Query queryTemp = query.setString("abc", userName);
return queryTemp.list();
}
public List<Users> selectUsersByNameUseSQL(String userName) {
// 我们要执行特殊的查询操作 我们需要获取对应的Session对象
Session session = this.template.getSessionFactory().getCurrentSession();
// 通过Session对象创建Query对象 SQL 语句
Query query = session.createSQLQuery("select * from t_user where user_name = ?")
.addEntity(Users.class)
.setString(0, userName);
return query.list();
}
public List<Users> selectUsersByNameUseCriteria(String userName) {
Session session = this.template.getSessionFactory().getCurrentSession();
Criteria criteria = session.createCriteria(BIConversion.User.class);
criteria.add(Restrictions.eq("userName",userName));
return criteria.list();
}
}
5.测试
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:applicationContext.xml")
public class Test1 {
@Autowired
private IUserDao dao;
@Test
@Transactional
// 操作失败是否回滚
@Rollback(false)
public void testInsertUser(){
Users user = new Users();
user.setUserName("Tom");
user.setRealName("张三丰");
dao.insertUsers(user);
}
}
测试查询用户
@Test
@Transactional
public void testQuery1(){
Users users = this.dao.selectUsersById(22);
System.out.println(users);
}
测试查询用户名称
@Test
@Transactional
public void testQuery2(){
List<Users> list = this.dao.selectUsersByName("Tom");
for (Users u :
list) {
System.out.println(u);
}
}
二、Spring整合HibernateJPA
ORM(Object Relational Mapping)框架采用元数据来描述对象与关系映射的细节,元数据一般采用XML格式,并且存放在专门的对象一映射文件中。简单理解为一种框架的格式。
现如今的ORM框架还是有比较多的,比如:Hibernate,TopLink以及OpenJPA等等,为了简化ORM框架的使用,JPA随之产生。
JPA是Java Persistent API的简称,中文名Java持久层API,由Sun公司提供了一对对于持久层操作的标准(接口+文档),说白了就是在各种ORM框架上封装了一套API实现统一操作。同时又依赖各种ORM框架去实现。
1.创建项目
创建一个普通的Maven项目
2.添加相关的依赖
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-orm</artifactId>
<version>5.2.13.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.2.13.RELEASE</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.9.2</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.0.9</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.17</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-entitymanager</artifactId>
<version>5.0.7.Final</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>5.2.13.RELEASE</version>
</dependency>
</dependencies>
3.添加相关的配置文件
3.1db.properties
jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/logistics?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC
jdbc.username=root
jdbc.password=123456
3.2 Spring的配置文件applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd">
<!-- 引入db.properties -->
<context:property-placeholder location="classpath:db.properties"/>
<!-- 创建druid 的数据源 -->
<bean class="com.alibaba.druid.pool.DruidDataSource" id="dataSource">
<property name="url" value="${jdbc.url}"/>
<property name="driverClassName" value="${jdbc.driver}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</bean>
<!-- 配置Hibernate的SessionFactory对象 -->
<bean class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean" id="sessionFactory">
<!--关联数据源-->
<property name="dataSource" ref="dataSource"/>
<!-- 配置Hibernate的属性信息 -->
<property name="jpaVendorAdapter">
<bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
<property name="database" value="MYSQL"/>
<property name="generateDdl" value="true"/>
<property name="showSql" value="true"/>
</bean>
<!-- <props>-->
<!-- <prop key="show_sql">true</prop>-->
<!-- <prop key="hibernate.hbm2ddl.auto">update</prop>-->
<!-- </props>-->
</property>
<!--扫描路径-->
<property name="packagesToScan">
<list>
<value>com.biao.pojo</value>
</list>
</property>
</bean>
<!-- 配置事务管理 -->
<bean class="org.springframework.orm.jpa.JpaTransactionManager" id="transactionManager">
<property name="entityManagerFactory" ref="sessionFactory"/>
</bean>
<!-- 配置开启事务注解 -->
<tx:annotation-driven transaction-manager="transactionManager"/>
<!-- 配置扫描路径 -->
<context:component-scan base-package="com.biao"/>
</beans>
4.创建pojo
package com.biao.pojo;
import javax.persistence.*;
import java.io.Serializable;
@Entity
@Table(name = "t_user")
public class Users implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "user_id")
private Integer userId;
@Column(name = "user_name")
private String userName;
@Column(name = "real_name")
private String realName;
public Integer getUserId() {
return userId;
}
public void setUserId(Integer userId) {
this.userId = userId;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getRealName() {
return realName;
}
public void setRealName(String realName) {
this.realName = realName;
}
@Override
public String toString() {
return "Users{" +
"userId=" + userId +
", userName='" + userName + '\'' +
", realName='" + realName + '\'' +
'}';
}
}
5.创建持久层
5.1 接口
package com.biao.dao;
import com.biao.pojo.Users;
import java.util.List;
public interface IUserDao {
void insertUsers(Users users);
void updateUsers(Users users);
void deleteUsers(Users users);
Users selectUsersById(Integer userId);
List<Users> selectUsersByName(String userName);
List<Users> selectUsersByNameUseSQL(String userName);
List<Users> selectUsersByNameUseCriteria(String userName);
}
5.2 接口实现类
package com.biao.dao.impl;
import com.biao.dao.IUserDao;
import com.biao.pojo.Users;
import org.springframework.stereotype.Repository;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.TypedQuery;
import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Predicate;
import javax.persistence.criteria.Root;
import java.util.List;
@Repository
public class UserDaoImpl implements IUserDao {
@PersistenceContext(name = "entityManagerFactory")
private EntityManager manager;
public void insertUsers(Users users) {
manager.persist(users);
}
public void updateUsers(Users users) {
manager.merge(users);
}
public void deleteUsers(Users users) {
users = this.selectUsersById(users.getUserId());
manager.refresh(users);
}
public Users selectUsersById(Integer userId) {
return manager.find(Users.class,userId);
}
public List<Users> selectUsersByName(String userName) {
return manager.createQuery(" from Users where userName = :abc")
.setParameter("abc",userName)
.getResultList();
}
public List<Users> selectUsersByNameUseSQL(String userName) {
return manager.createQuery("select * from t_user where user_name = ?",Users.class)
.setParameter(1,userName)
.getResultList();
}
public List<Users> selectUsersByNameUseCriteria(String userName) {
CriteriaBuilder builder = manager.getCriteriaBuilder();
CriteriaQuery<Users> query = builder.createQuery(Users.class);
Root<Users> root = query.from(Users.class);
Predicate cate = builder.equal(root.get("userName"), userName);
query.where(cate);
TypedQuery<Users> typedQuery = manager.createQuery(query);
return typedQuery.getResultList();
}
}
6.测试
package com.biao.test;
import com.biao.dao.IUserDao;
import com.biao.pojo.Users;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.annotation.Rollback;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:applicationContext.xml")
public class Test1 {
@Autowired
private IUserDao dao;
@Test
@Transactional
// 操作失败是否回滚
@Rollback(false)
public void testInsertUser(){
Users user = new Users();
user.setUserName("Tom");
user.setRealName("张三丰");
dao.insertUsers(user);
}
@Test
@Transactional
public void testQuery1(){
Users users = this.dao.selectUsersById(22);
System.out.println(users);
}
@Test
@Transactional
public void testQuery2(){
List<Users> list = this.dao.selectUsersByName("Tom");
for (Users u :
list) {
System.out.println(u);
}
}
}