SpringBoot整合SpringDataJPA

SpringBoot整合SpringDataJPA

实现多对多关系的维护 user <1----n-> user_roles <-n-----1> roles

[前言]
  • 关于lombok

lombok可以使用但是在多对多,一对多,多对一关系中,一定要有一方去重写它的“toString()”方法,方法里面移出,否则springDataJP自己对应关系的A会一直递归调用,最终内存溢出

1、依赖
    <!--记得修改自己对应的版本-->
 	<!--        mysql驱动-->
     <dependency>
         <groupId>mysql</groupId>
         <artifactId>mysql-connector-java</artifactId>
     </dependency>
     <!--        连接池-->
     <dependency>
         <groupId>com.alibaba</groupId>
         <artifactId>druid</artifactId>
         <version>1.1.23</version>
     </dependency>
      <!--        springDataJPA支持-->
    <dependency>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-data-jpa</artifactId>
    </dependency>
     <!--lombok-->
     <dependency>
         <groupId>org.projectlombok</groupId>
         <artifactId>lombok</artifactId>
     </dependency>
2、application.yml配置
spring:
 datasource:
 	type: com.alibaba.druid.pool.DruidDataSource
 	driver-class-name: com.mysql.jdbc.Driver
 	url: jdbc:mysql://localhost:3306/erp?useUnicode=true&charecterEncoding=utf-8
 	username: root
	password: root
	
  jpa:
  	#是否显示sql
 	show-sql: true
 	properties:
   		hibernate:
   			#格式化sql
     		format_sql: true
 	database: mysql
 	# 数据库方言
 	database-platform: org.hibernate.dialect.MySQLInnoDBDialect
3、pojo实体类
  • User
    @Component
    @Entity
    @Table(name = "users")
    @Data
    @AllArgsConstructor
    @NoArgsConstructor
    public class User implements Serializable {
    
        @Id
        @GeneratedValue(strategy = GenerationType.IDENTITY)
        @Column(name = "uid")
        private Integer id;
    
        @Column(name = "uname")
        private String name;
    
        @Column(name = "upassword")
        private String password;
    
        @Column(name = "salt")
        private String salt;
    
        @Column(name = "state")
        private Integer state;
    
        @ManyToMany()
        @JoinTable(name = "users_roles",
        joinColumns = {
                @JoinColumn(name = "uid", referencedColumnName = "uid")
        },
        inverseJoinColumns = {
                @JoinColumn(name = "rid", referencedColumnName = "rid")
        })
        private List<Roles> roles;
    
  • Roles
    @Component
    @Entity
    @Table(name = "roles")
    @Data
    @AllArgsConstructor
    @NoArgsConstructor
    public class Roles {
    
        @Id
        @GeneratedValue(strategy = GenerationType.IDENTITY)
        @Column(name = "rid")
        private Integer id;
    
        @Column(name = "rname")
        private String name;
    
        @ManyToMany(mappedBy = "roles",fetch = FetchType.LAZY)
        private List<User> users;
    
    // 必须重写toString并且吧users的变量移出
        @Override
        public String toString() {
            return "Roles{" +
                    "id=" + id +
                    ", name='" + name + '\'' +
                    '}';
        }
    }
    
3、dao接口
  • UserDao
    //继承JpaRepository<实体类型,主键类型>
    // JpaSpecifiactionExecutor<实体类型>
    public interface UserDao extends JpaRepository<User,Integer>, JpaSpecificationExecutor<User> {
    }
    
  • RolesDao
     public interface RolesDao extends JpaRepository<Roles,Integer>, JpaSpecificationExecutor<Roles> {
    }
    
5、测试

@Transactional,在测试环境中必须加上事务

@Test
@Transactional
public void contextLoads() {
     List<User> all = userDao.findAll();
     System.out.println(all);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值