SpringBoot整合SpringData JPA

it2022-05-05  152

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)