目录
1.由于我们开始创建爱你项目的时候也已经勾选了JPA、MySql、Web的启动器,所以项目pom.xml已经自动导入了需要的环境jar包
2.springboot项目的默认配置文件是.yml文件,而不是properties文件
3.写一个实体类,也可以用mybatis的idea自动生成插件(在最后部分会写如何使用),这样简便很多
单表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都生成了,根据需要自己修改删除部分内容。。。。。