SpringBoot整合SpringData JPA

1.创建maven项目,编写pom.xml文件

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/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>1.5.2.RELEASE</version>

	</parent>
	<groupId>per.czt</groupId>
	<artifactId>22-spring-boot-jpa</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<packaging>jar</packaging>

	<name>22-spring-boot-jpa</name>
	<url>http://maven.apache.org</url>

	<properties>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
	</properties>

	<dependencies>


		<!-- web -->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>
		<!-- thymeleaf -->

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-thymeleaf</artifactId>
		</dependency>
		<!-- Spring Data JPA -->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-data-jpa</artifactId>
		</dependency>
		<!-- junit环境的jar包 -->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
		</dependency>

		<!-- mysql数据库驱动 -->
		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
			<version>8.0.13</version>
		</dependency>

		<!-- druid数据库连接池 -->
		<dependency>
			<groupId>com.alibaba</groupId>
			<artifactId>druid</artifactId>
			<version>1.1.17</version>
		</dependency>

		<!-- jaxb-api -->
		<dependency>
			<groupId>javax.xml.bind</groupId>
			<artifactId>jaxb-api</artifactId>
			<version>2.2.4</version>
		</dependency>
		<!-- jaxb-core -->
		<dependency>
			<groupId>org.glassfish.jaxb</groupId>
			<artifactId>jaxb-core</artifactId>
			<version>2.3.0</version>
		</dependency>
		<!-- jaxb-impl -->
		<dependency>
			<groupId>javax.xml</groupId>
			<artifactId>jaxb-impl</artifactId>
			<version>2.1</version>
		</dependency>
		<!-- javax.activation-api -->
		<dependency>
			<groupId>javax.activation</groupId>
			<artifactId>javax.activation-api</artifactId>
			<version>1.2.0</version>
		</dependency>





	</dependencies>
</project>

2.编写application.properties文件
application.properties

spring.datasource.driverName=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/springbootjpa?serverTimezone=UTC&charset=UTF-8&useSSL=false
spring.datasource.username=root
spring.datasource.password=200934652qwe
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
spring.jpa.hibernate.ddl-auto=update
spring.jpa.show-sql=true

3.测试
(1)五个接口
前四个接口就不测试了,这里只给出JpaRepository和JpaSepcificationExecutor接口的测试
编写个接口继承JpaRepository和JpaSepcificationExecutor接口
UserRepositorySpecificationExecutor.java

package per.czt.dao;

import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;

import per.czt.pojo.Users;

public interface UsersRepositoryJpaSpecificationExecutor extends JpaRepository<Users, Integer>,JpaSpecificationExecutor<Users>{

}

测试类
UsersRepositoryJpaSpecificationExecutorTest.java

package per.czt.test;

import java.util.List;

import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Predicate;
import javax.persistence.criteria.Root;

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.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;
import org.springframework.data.domain.Sort.Direction;
import org.springframework.data.domain.Sort.Order;
import org.springframework.data.jpa.domain.Specification;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

import per.czt.dao.UsersRepositoryJpaSpecificationExecutor;
import per.czt.pojo.Users;

@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest
public class UsersRepositoryJpaSpecificationExecutorTest {

	@Autowired
	private UsersRepositoryJpaSpecificationExecutor usersRepositoryJpaSpecificationExecutor;
	/*
	*多条件查询+分页+排序
	*/
	@Test
	public void test1() {
		Specification<Users> spec=new Specification<Users>() {

			@Override
			public Predicate toPredicate(Root<Users> root, CriteriaQuery<?> query, CriteriaBuilder cb) {
				// TODO Auto-generated method stub
				return cb.and(cb.notEqual(root.get("username"), "xiaoming"),cb.isNotNull(root.get("username")));
			}
			
		};
		Order order1=new Order(Direction.ASC,"username");
		Order order2=new Order(Direction.ASC,"userage");
		Sort sort =new Sort(order1,order2);
		int page=0;
		int pageSize=1;
		
		Pageable pageable=new PageRequest(page, pageSize, sort);
		Page<Users> pages=usersRepositoryJpaSpecificationExecutor.findAll(spec, pageable);
		for(Users users:pages.getContent()) {
			System.out.println(users);
		}
		
	}
}

(2)一对多关系
Users.java

package per.czt.pojo;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.Table;

@Entity
@Table(name="t_users")
public class Users {
	@Id
	@GeneratedValue(strategy=GenerationType.IDENTITY)
	@Column(name="user_id")
	private Integer userid;
	@Column(name="user_name")
	private String username;
	@Column(name="user_age")
	private Integer userage;
	@Column(name="user_address")
	private String useraddress;
	
	@ManyToOne(cascade=CascadeType.PERSIST,fetch=FetchType.EAGER)
	@JoinColumn(name="roles_id")
	private Roles roles;
	public Roles getRoles() {
		return roles;
	}

	public void setRoles(Roles roles) {
		this.roles = roles;
	}

	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 Integer getUserage() {
		return userage;
	}

	public void setUserage(Integer userage) {
		this.userage = userage;
	}

	public String getUseraddress() {
		return useraddress;
	}

	public void setUseraddress(String useraddress) {
		this.useraddress = useraddress;
	}

	public Users() {
		super();
		// TODO Auto-generated constructor stub
	}

	@Override
	public String toString() {
		return "Users [userid=" + userid + ", username=" + username + ", userage=" + userage + ", useraddress="
				+ useraddress + ", roles=" + roles + "]";
	}

	

	
	

}

Roles.java

package per.czt.pojo;

import java.io.Serializable;
import java.util.HashSet;
import java.util.Set;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinColumns;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.Table;
@Entity
@Table(name="t_roles")
public class Roles implements Serializable {
	@Id
	@GeneratedValue(strategy=GenerationType.IDENTITY)
	@Column(name="role_id")
	private Integer roleid;
	@Column(name="role_name")
	private String rolename;
	
	@OneToMany(mappedBy="roles",cascade=CascadeType.PERSIST,fetch=FetchType.EAGER)
	private Set<Users> usersSet=new HashSet<Users>();
	

	
	
	public Set<Users> getUsersSet() {
		return usersSet;
	}
	public void setUsersSet(Set<Users> usersSet) {
		this.usersSet = usersSet;
	}
	public Integer getRoleid() {
		return roleid;
	}
	public void setRoleid(Integer roleid) {
		this.roleid = roleid;
	}
	public String getRolename() {
		return rolename;
	}
	public void setRolename(String rolename) {
		this.rolename = rolename;
	}
	@Override
	public String toString() {
		return "Roles [roleid=" + roleid + ", rolename=" + rolename + "]";
	}
	public Roles() {
		super();
		// TODO Auto-generated constructor stub
	}
	
	

}

测试代码:
OneToManyTest.java

package per.czt.test;

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.SpringJUnit4ClassRunner;

import per.czt.App;
import per.czt.dao.UsersRepositoryJpaRepository;
import per.czt.pojo.Roles;
import per.czt.pojo.Users;

@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest(classes= {App.class})
public class OneToManyTest {
	
	@Autowired
	private UsersRepositoryJpaRepository usersRepositoryJpaRepository;
	/*
	 * 添加
	 */
	@Test
	public void test1() {
		
		Roles roles=new Roles();
		roles.setRolename("管理员");
		
		Users users=new Users();
		users.setUseraddress("山东省");
		users.setUserage(11);
		users.setUsername("李四");
		
		users.setRoles(roles);
		roles.getUsersSet().add(users);
		
		usersRepositoryJpaRepository.save(users);
	}
	/*
	 * 查询
	 */
	@Test
	public void test2() {
		List<Users> usersList=usersRepositoryJpaRepository.findAll();
		for(Users users:usersList) {
			System.out.println(users);
		}
	}
}

(3)多对多关系
假设roles和menus是多对多关系
Roles.java

package per.czt.pojo;

import java.io.Serializable;
import java.util.HashSet;
import java.util.Set;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinColumns;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.Table;
@Entity
@Table(name="t_roles")
public class Roles implements Serializable {
	@Id
	@GeneratedValue(strategy=GenerationType.IDENTITY)
	@Column(name="role_id")
	private Integer roleid;
	@Column(name="role_name")
	private String rolename;
	
	@OneToMany(mappedBy="roles",cascade=CascadeType.PERSIST,fetch=FetchType.EAGER)
	private Set<Users> usersSet=new HashSet<Users>();
	
	@ManyToMany(cascade=CascadeType.PERSIST,fetch=FetchType.EAGER)
	@JoinTable(name="t_roles_menus",joinColumns=@JoinColumn(name="roles_id"),inverseJoinColumns=@JoinColumn(name="menus_id"))
	private Set<Menus> menusSet=new HashSet<Menus>();
	
	
	public Set<Users> getUsersSet() {
		return usersSet;
	}
	public void setUsersSet(Set<Users> usersSet) {
		this.usersSet = usersSet;
	}
	public Integer getRoleid() {
		return roleid;
	}
	public void setRoleid(Integer roleid) {
		this.roleid = roleid;
	}
	public String getRolename() {
		return rolename;
	}
	public void setRolename(String rolename) {
		this.rolename = rolename;
	}
	@Override
	public String toString() {
		return "Roles [roleid=" + roleid + ", rolename=" + rolename + "]";
	}
	public Roles() {
		super();
		// TODO Auto-generated constructor stub
	}
	public Set<Menus> getMenusSet() {
		return menusSet;
	}
	public void setMenusSet(Set<Menus> menusSet) {
		this.menusSet = menusSet;
	}
	

}

Menus.java

package per.czt.pojo;

import java.util.HashSet;
import java.util.Set;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.ManyToMany;
import javax.persistence.Table;

@Entity
@Table(name="t_menus")
public class Menus {
	

	@Id
	@GeneratedValue(strategy=GenerationType.IDENTITY)
	@Column(name="menu_id")
	private Integer menuid;
	@Column(name="menu_name")
	private String menuname;
	@Column(name="menu_url")
	private String menuurl;
	@Column(name="father_id")
	private Integer fatherid;
	@ManyToMany(mappedBy="menusSet",cascade=CascadeType.PERSIST,fetch=FetchType.EAGER)
	private Set<Roles> rolesSet=new HashSet<Roles>();
	public Integer getMenuid() {
		return menuid;
	}
	public void setMenuid(Integer menuid) {
		this.menuid = menuid;
	}
	public String getMenuname() {
		return menuname;
	}
	public void setMenuname(String menuname) {
		this.menuname = menuname;
	}
	public String getMenuurl() {
		return menuurl;
	}
	public void setMenuurl(String menuurl) {
		this.menuurl = menuurl;
	}
	public Integer getFatherid() {
		return fatherid;
	}
	public void setFatherid(Integer fatherid) {
		this.fatherid = fatherid;
	}
	public Set<Roles> getRolesSet() {
		return rolesSet;
	}
	public void setRolesSet(Set<Roles> rolesSet) {
		this.rolesSet = rolesSet;
	}
	@Override
	public String toString() {
		return "Menus [menuid=" + menuid + ", menuname=" + menuname + ", menuurl=" + menuurl + ", fatherid=" + fatherid
				+ "]";
	}
	

}

RolesRepository.java

package per.czt.dao;

import org.springframework.data.jpa.repository.JpaRepository;

import per.czt.pojo.Roles;

public interface RolesRepository extends JpaRepository<Roles, Integer>{

}

多对多测试
ManyToManyTest,java

package per.czt.test;

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.SpringJUnit4ClassRunner;

import per.czt.App;
import per.czt.dao.RolesRepository;
import per.czt.dao.UsersRepositoryJpaRepository;
import per.czt.pojo.Menus;
import per.czt.pojo.Roles;

@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest(classes= {App.class})
public class ManyToManyTest {
	@Autowired
	private RolesRepository rolesRepository;
	/*
	 * 添加
	 */
	/*@Test
	public void test1() {
		
		Roles roles=new Roles();
		roles.setRolename("管理员");
		
		Menus menus=new Menus();
		menus.setFatherid(1);
		menus.setMenuname("xx管理");
		menus.setMenuurl(null);
		
		Menus menus1=new Menus();
		menus1.setFatherid(2);
		menus1.setMenuname("aa管理");
		menus1.setMenuurl(null);
		
		menus.getRolesSet().add(roles);
		
		menus1.getRolesSet().add(roles);
	
		roles.getMenusSet().add(menus1);
		roles.getMenusSet().add(menus);
		
		rolesRepository.save(roles);
		
	}*/
	/*
	 * 查询
	 */
	@Test
	public void test2() {
		List<Roles> rolesList=rolesRepository.findAll();
		for(Roles roles:rolesList) {
			System.out.println(roles);
			System.out.println(roles.getMenusSet());
		}
	}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值