SpringBoot整合JPA(多对一,一对多)(MyBatis自动生成)

目录

单表JPA查询

一,搭建SpringBoot环境

二,开始JPA应用导入

1.由于我们开始创建爱你项目的时候也已经勾选了JPA、MySql、Web的启动器,所以项目pom.xml已经自动导入了需要的环境jar包

2.springboot项目的默认配置文件是.yml文件,而不是properties文件

3.写一个实体类,也可以用mybatis的idea自动生成插件(在最后部分会写如何使用),这样简便很多

4.实体类编写完成,接下来就是dao层

5.在测试类中直接测试JPA是否导入并且能使用了

多表联查JPA

项目截图

实体类:

dao层

配置文件application.yml

测试方法入口

重点讲解:

1.注解

2.属性

使用MyBatis+idea自动生成实体类和dao

第一:导入自动生成组件

第二:设置数据库链接


单表JPA查询

一,搭建SpringBoot环境

工具IDEA

---

---

---

---

---springboot项目搭建完成,项目结构如下图

二,开始JPA应用导入

1.由于我们开始创建爱你项目的时候也已经勾选了JPA、MySql、Web的启动器,所以项目pom.xml已经自动导入了需要的环境jar包

2.springboot项目的默认配置文件是.yml文件,而不是properties文件

这种文件的语法,可以详细去看看

配置   application.yml (注意语法)

spring:
  datasource:
    url: jdbc:mysql://127.0.0.1:3306/goods?useUnicode=true&characterEncoding=utf-8&serverTimezone=UTC
    username: root
    password: 1234
    driver-class-name: com.mysql.jdbc.Driver

3.写一个实体类,也可以用mybatis的idea自动生成插件(在最后部分会写如何使用),这样简便很多

4.实体类编写完成,接下来就是dao层

详解JpaRepository类作用

5.在测试类中直接测试JPA是否导入并且能使用了

启动测试

多表联查JPA

条件:一对多,多对一

角色对应多个用户,每个用户只能有一个角色

id都为主键

项目截图

实体类:

package com.szy.boot.pojo;

import javax.persistence.*;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

/**
 * role
 * @author 
 */

/**
 * JPA使用的实体类必须加@Entity标记注解
 */
@Entity
@Table(name = "Role")
public class Role implements Serializable {
    /**
     * 角色主键
     * 用@Id标记主键
     */
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer id;

    /**
     * 角色名称
     */
    private String name;

    //一对多
    //防止懒加载无效fetch = FetchType.EAGER
    @OneToMany(mappedBy = "role",fetch = FetchType.EAGER)

    private List<User> users = new ArrayList<>();

    public List<User> getUsers() {
        return users;
    }

    public void setUsers(List<User> users) {
        this.users = users;
    }

    public static long getSerialVersionUID() {
        return serialVersionUID;
    }

    private static final long serialVersionUID = 1L;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    @Override
    public String toString() {
        return "Role{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", users=" + users.size() +
                '}';
    }

    public void setName(String name) {
        this.name = name;
    }
}
package com.szy.boot.pojo;

import javax.persistence.*;
import java.io.Serializable;

/**
 * user
 * @author 
 */
@Entity
@Table(name = "User")
public class User implements Serializable {
    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", username='" + username + '\'' +
                ", role=" + role.getName() +
                '}';
    }

    /**
     * 用户主键
     */
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer id;

    /**
     * 用户名
     */
    private String username;

    /**
     * 角色 多对一
     */
    @ManyToOne
    @JoinColumn(name = "role_id")
    private Role role;

    private static final long serialVersionUID = 1L;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public Role getRole() {
        return role;
    }

    public void setRole(Role role) {
        this.role = role;
    }

    public static long getSerialVersionUID() {
        return serialVersionUID;
    }
}

dao层

package com.szy.boot.dao;

import com.szy.boot.pojo.Role;
import org.springframework.data.jpa.repository.JpaRepository;

/**
 * 角色DAO
 */
public interface RoleDao extends JpaRepository<Role,Integer> {

}
package com.szy.boot.dao;

import com.szy.boot.pojo.User;
import org.springframework.data.jpa.repository.JpaRepository;

/**
 * 用户dao
 */
public interface UserDao extends JpaRepository<User,Integer> {

}

配置文件application.yml

spring:
  datasource:
    url: jdbc:mysql://127.0.0.1:3306/20190111?useUnicode=true&characterEncoding=utf-8&serverTimezone=UTC
    username: root
    password: 1234
    driver-class-name: com.mysql.jdbc.Driver

测试方法入口

package com.szy.boot;

import com.szy.boot.dao.RoleDao;
import com.szy.boot.dao.UserDao;
import com.szy.boot.pojo.Role;
import com.szy.boot.pojo.User;
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 java.util.List;

@RunWith(SpringRunner.class)
@SpringBootTest
public class SpringbootJpaOneToMany20190111ApplicationTests {
    @Autowired
    private RoleDao roleDao;
    @Autowired
    private UserDao userDao;


    @Test
    public void contextLoads() {
        for (Role r:roleDao.findAll()){
            System.out.println(r.toString());
        }
    }

    public void addRole(){
        Role role = new Role();
        role.setName("经理");
        roleDao.save(role);
        System.out.println("添加成功");
    }
    public void addUser(){
        User user = new User();
        user.setUsername("金前旺2");
        user.setRole(roleDao.getOne(2));
        userDao.save(user);
    }

    public List<Role> getRole(){
        return roleDao.findAll();
    }

}

重点讲解:

1.注解

实体类需要加

//使用jap必须用这个注解标注实体类
@Entity
//标记这个实体类对应的表格名
@Table(name = "User")

主键

    //标注该字段是主键
    @Id
    //该主键是自增长类型,不加在save对象是会因为主键不是自增长类型,要你手动给值
    @GeneratedValue(strategy = GenerationType.IDENTITY)


    //IDENTITY:主键由数据库自动生成(主要是自动增长型) 

一对多多对一

多方(user)

//标注这是多对一的多方的属性字段,一般为一个类型对象    
@ManyToOne

//数据库表对应关联外键的字段
@JoinColumn(name = "role_id")

一方(role)

    //一对多
    //在通过角色查询用户时,一个角色对应多个用户,防止懒加载无效必须加 fetch = FetchType.EAGER
    //@OneToMany标记中的mappedBy属性的值为AddressEO实体中所引用的CustomerEO实体的属性名。
    @OneToMany(mappedBy = "role",fetch = FetchType.EAGER)

2.属性

在role中设置属性

    //一对多
    //防止懒加载无效fetch = FetchType.EAGER
    @OneToMany(mappedBy = "role",fetch = FetchType.EAGER)
    private List<User> users = new ArrayList<>();

在role中设置属性

    /**
     * 角色 多对一
     */
    @ManyToOne
    @JoinColumn(name = "role_id")
    private Role role;

 

使用MyBatis+idea自动生成实体类和dao

第一:导入自动生成组件

然后搜索 better-mybatis-generator 插件,下载安装,会提示重启IDEA,重启一遍

 

第二:设置数据库链接

打开了数据库链接界面,填写数据库名,用户名和密码

如果能连接上就会出现数据库链接选项

选择一张表格,右键点击,最下面会出现我们刚刚下载的自动生成插件

点击打开自动生成界面

它会提示输入用户名和密码

然后点击ok就开始生成

生成完毕后,pojo,dao,xml都生成了,根据需要自己修改删除部分内容。。。。。

 

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值