springboot使用jpa

1 引入依赖

在这里插入图片描述

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

2 目录结构

3 代码实现

3.1 配置实体

User.java

@Entity
public class User {
    @Id
    @GeneratedValue
    private Long id;

    @Column
    private String username;

    @OneToMany(mappedBy = "user",cascade = CascadeType.ALL, fetch = FetchType.EAGER)
    private List<Role> roleList;
    //省略get,set,toString

Role.java

@Entity
public class Role {
    @Id
    @GeneratedValue
    private Long id;

    @Column
    private String roleName;

    @ManyToOne
    @JsonBackReference
    private User user;

注意在多的一方(@ManyToOne一方)需要加上@JsonBackReference,防止返回Json时出现嵌套打印导致栈溢出的问题.

3.2 业务层

UserServiceImpl.java

@Service
public class UserServiceImpl implements UserService {
    @Autowired
    private UserDao userDao;

    @Override
    public User savaUser(User user) {
        for (Role role : user.getRoleList()){
            role.setUser(user);
        }
        return userDao.save(user);
    }
}

注意:这里输入的user中包含有role集合,但每个role中不包含用户,需要我们手动set,不然添加完后,role表中的user_id属性是null.

3.3持久层

UserDao.java

public interface UserDao extends JpaRepository<User, Long> {
}

RoleDao.java

public interface RoleDao extends JpaRepository<Role, Long> {
}

其他地方就不展示了.

4 测试

通过postman进行测试
在这里插入图片描述
如果user的id存在就是更新,不存在就是添加.
再简单写个根据用户id获取user.
业务逻辑层只有一段.

    @Override
    public User findUserById(Long id) {
        return userDao.findById(id).orElse(null);
    }

jpa的findBy是返回一个Optional是用户防止NPE问题(空指针异常)的.这里若为null直接返回null了.
测试下查询.
在这里插入图片描述

有时一对多这种关系在对象创建时可能没有具体体现,而是创建后,就和这里用户和权限,在创建角色时,可能不为其添加角色,而是之后去分配角色.(待更新)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值