SpringBoot学习——springboot 整合hibernate框架实现增删改查及事务处理

版权声明:转载请注明来源 https://blog.csdn.net/qq_24598601/article/details/89218642

一、POM 文件引入 JAR

  在 pom.xml 中引入 spring jpa 以及测试包

<!-- spring jpa 依赖 -->
<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>

<!-- mysql 依赖 -->
<dependency>
	<groupId>mysql</groupId>
	<artifactId>mysql-connector-java</artifactId>
</dependency>

<!-- 测试 -->
<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-test</artifactId>
	<scope>test</scope>
	<exclusions>
		<exclusion>
			<groupId>org.springframework</groupId>
			<artifactId>spring-test</artifactId>
		</exclusion>
	</exclusions>
</dependency>

<!-- SpringBoot 2.0 的 spring-boot-starter-test 中的spring-test 是5.0.4 版本的,
		而,5.0.4 版没有 SpringJUnit4ClassRunner 和 SpringRunner 所以去除,另加入5.0.5 及以上版本的spring-test-->
<dependency>
	<groupId>org.springframework</groupId>
	<artifactId>spring-test</artifactId>
	<version>5.0.5.RELEASE</version>
	<scope>test</scope>
</dependency>

二、application.properties 新增配置

  在 application.properties 中添加数据源和 hibernate 的配置

spring.datasource.url=jdbc:mysql://localhost:3306/mysql
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.driver-class-name=com.mysql.jdbc.Driver

spring.jpa.database = MYSQL
spring.jpa.show-sql = true
spring.jpa.hibernate.ddl-auto = update
spring.jpa.hibernate.naming-strategy = org.hibernate.cfg.ImprovedNamingStrategy
spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.MySQL5Dialect
spring.jpa.hibernate.naming.physical-strategy = org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl

使用 application.yml 的配置为

### datasource Configuration
spring:      
  datasource:
    url: jdbc:mysql://localhost:3306/mysql
    driver-class-name: com.mysql.jdbc.Driver
    username: root
    password: 123456
### hibernate Configuration
  jpa:
    database: mysql
    show-sql: true
    hibernate:
      ddl-auto: update
      naming:
        implicit-strategy: org.springframework.boot.orm.jpa.hibernate.SpringImplicitNamingStrategy
        physical-strategy: org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
  

三、编写 Dao

  bean 文件增加注释使之与数据库表结构对应

package com.bean;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;

import lombok.Getter;
import lombok.Setter;
import lombok.ToString;

/**
* @Description 类描述
* @author 欧阳
* @since 2019年4月7日 下午12:29:13
* @version V1.0
*/

@Getter
@Setter
@ToString
@Entity
@Table(name="t_user")
public class Users2 {
	@Id
	private String id;
	
	@Column(name="name")
	private String name;

}


  添加文件 src/main/java/com/dao/UsersDao2.java

package com.dao;

import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;

import com.bean.Users2;

/**
* @Description 整合Hibernate Dao
* @author 欧阳
* @since 2019年4月11日 下午6:14:26
* @version V1.0
*/

public interface UsersDao2 extends JpaRepository<Users2, String> {
	
	@Query(value = "FROM Users2 WHERE name = :name")
    public Users2 findName1(@Param("name") String name);
	
	@Query(value = "SELECT * FROM t_user WHERE name=?1", nativeQuery = true)
	public Users2 findName2(String name);
	
}


四、添加 Service

  增加 Service 接口 src/main/java/com/service/HibernateService.java 并实现 src/main/java/com/service/impl/HibernateServiceImpl.java
HibernateService 接口代码

package com.service;

import java.util.List;

import com.bean.Users2;

/**
* @Description 整合Hibernate Service
* @author 欧阳
* @since 2019年4月11日 下午2:17:37
* @version V1.0
*/

public interface HibernateService {
	
	/**
	 * 添加用户
	 * @param user
	 */
	public void insertUser(Users2 user);
	
	/**
	 * 更新用户
	 * @param user
	 */
	public void updateUser(Users2 user);
	
	/**
	 * 查询用户
	 * @param user
	 * @return
	 */
	public List<Users2> selectUser();
	
	/**
	 * 删除用户
	 * @param id
	 */
	public void deleteUser(String id);
}


HibernateServiceImpl 类

package com.service.impl;

import java.util.List;

import javax.persistence.EntityManagerFactory;

import org.hibernate.SessionFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import com.bean.Users2;
import com.dao.UsersDao2;
import com.service.HibernateService;

/**
* @Description 整合Hibernate Service
* @author 欧阳
* @since 2019年4月11日 下午6:16:09
* @version V1.0
*/
@Service
public class HibernateServiceImpl implements HibernateService {

	@Autowired
	private UsersDao2 userDao2;
	
	@Autowired
	private EntityManagerFactory entityManagerFactory;
	
	public SessionFactory getSessionFactory() {
		return entityManagerFactory.unwrap(SessionFactory.class);
	}
	
	@Override
	@Transactional
	public void insertUser(Users2 user) {
		userDao2.save(user);
		
//		int num = 1/0;  //放开测试事务。预期结果为添加失败,库中无数据。测试结果与预期一致
	}

	@Override
	@Transactional
	public void updateUser(Users2 user) {
		userDao2.save(user);
	}

	@Override
	public List<Users2> selectUser() {
		String sql = "SELECT u FROM Users2 u ";
		@SuppressWarnings("unchecked")
		List<Users2> resultList = getSessionFactory().openSession()
				.createQuery(sql)
				.getResultList();
		
		userDao2.findName1("张三");
		userDao2.findName2("张三");
		return resultList;
	}

	@Override
	@Transactional
	public void deleteUser(String id) {
		userDao2.deleteById(id);
	}

}


  注意:通过使用 @Transactional 注解添加事务,在 insertUser 方法中的插入数据代码后增加异常代码 int num = 1/0; 测试事务是否起作用,实际测试结果表明测试结果与预期一致。

五、测试类

  添加测试类测试 HibernateServiceImpl

package com.service.impl;

import java.util.List;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

import com.App;
import com.bean.Users2;
import com.service.HibernateService;

/**
* @Description 整合Hibernate 测试增删改查 
* @author 欧阳
* @since 2019年4月11日 下午6:59:23
* @version V1.0
*/
@RunWith(SpringRunner.class)
@SpringBootTest(classes={App.class})
public class HibernateServiceImplTest {

	@Autowired
	private HibernateService hibernateService;
	
	@Test
	public void testInsertUser() {
		hibernateService.insertUser(new Users2("12", "lisi"));
		System.out.println("Yes");
	}

	@Test
	public void testUpdateUser() {
		hibernateService.updateUser(new Users2("12", "李四"));
		System.out.println("Yes");
	}

	@Test
	public void testSelectUser() {
		List<Users2> users = hibernateService.selectUser();
		for(Users2 user2 : users) {
			System.out.println(user2);
		}
		System.out.println("Yes");
	}

	@Test
	public void testDeleteUser() {
		hibernateService.deleteUser("12");
		System.out.println("Yes");
	}

}

六、测试结果

  测试结果全部通过,增删改查功能正常,springboot 整合 Hibernate 完成。
测试结果全部通过

猜你喜欢

转载自blog.csdn.net/qq_24598601/article/details/89218642