整合MyBatis和SpringData JPA
一、整合MyBatis步骤
1. 配置数据源相关属性
2. 数据库建表
department
表:id department_Name
employee
表:id lastName gender d_id
3. 创建JavaBean对象
Department
:加上get,set方法
public class Department {
private Integer id;
private String departmentName;
}
Employee
:加上get,set方法
public class Employee {
private Integer id;
private String lastName;
private Integer gender;
private String email;
private Integer dId;
}
4. 创建操作数据库的mapper
方法一:使用注解@Select
@Delete
@Insert
@Update
/mapper/DepartmentMapper
:
//@Mapper
public interface DepartmentMapper {
@Select("select * from department where id=#{id}")
public Department getDeptById(Integer id);
@Delete("delete from department where id=#{id}")
public int deleteDeptById(Integer id);
// @Options(useGeneratedKeys = true, keyProperty = "id"):使用递增主键,主键为id
@Options(useGeneratedKeys = true, keyProperty = "id")
@Insert(("insert into department(department_Name) values(#{departmentName})"))
public int insertDept(Department department);
@Update("update department set department_Name=#{departmentName} where id=#{id}")
public int updateDept(Department department);
}
(1)@Mapper
:指定这是一个操作数据库的mapper
(2)可以在主程序加上@MapperScan("com.lemon.springboot.mapper")
,指定扫描mapper包,那么这里就可以不加@Mapper
注解
(3)在每个操作数据库的注解中写sql语句,使用#{ }
表示占位符
方法二:使用xml配置文件
/mapper/EmployeeMapper
:
public interface EmployeeMapper {
public Employee getEmpById(Integer id);
public void insertEmp(Employee employee);
}
/resources/mybatis/mapper/EmployeeMapper.xml
:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.lemon.springboot.mapper.EmployeeMapper">
<!-- public Employee getEmpById(Integer id); -->
<select id="getEmpById" resultType="com.lemon.springboot.bean.Employee">
select * from mybatis.employee where id=#{id}
</select>
<!-- public void insertEmp(Employee employee);-->
<insert id="insertEmp">
insert into mybatis.employee(lastName, email, gender, d_id)
values (#{lastName}, #{email}, #{gender}, #{dId})
</insert>
</mapper>
5. 开启驼峰命名法
如果数据库中属性名为department_Name
,而JavaBean属性名为departmentName
,由于没有开启驼峰命名法,是查询不到的。
/resources/mybatis/mybatis-config.xml
:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<!-- MyBatis的全局配置文件 -->
<settings>
<setting name="mapUnderscoreToCamelCase" value="true"/>
</settings>
</configuration>
6. 在全局配置文件中配置MyBatis映射文件的位置
(1)mybatis.config-location
:MyBatis全局配置文件的位置
(2)mybatis.mapper-locations
:mapper映射文件的位置
mybatis:
config-location: classpath:mybatis/mybatis-config.xml
mapper-locations: classpath:mybatis/mapper/*.xml
7. 测试
/controller/DeptController
:
@RestController
public class DeptController {
@Autowired
DepartmentMapper departmentMapper;
@Autowired
EmployeeMapper employeeMapper;
// 注解
@GetMapping("/dept/{id}")
public Department getDep(@PathVariable("id") Integer id){
return departmentMapper.getDeptById(id);
}
@GetMapping("/dept")
public Department insertDept(Department department){
departmentMapper.insertDept(department);
return department;
}
// 配置文件
@GetMapping("/emp/{id}")
public Employee getEmp(@PathVariable("id") Integer id){
return employeeMapper.getEmpById(id);
}
}
二、整合SpringData JPA步骤
1. 编写一个实体类,和数据表进行映射,并且使用JPA注解配置映射关系
(1)@Entity
:告诉JPA这是一个实体类(和数据表映射的类)
(2)@Table(name = "tbl_user")
:指定和哪个数据表对应,如果省略,默认表明就是类名小写user
(3)@Id
:标注这是一个主键
(4)@GeneratedValue(strategy = GenerationType.IDENTITY)
:标注这是自增的,和@Id
配合使用标注一个自增主键
(5)@Column
:标注这是和数据表对应的一个列
/entity/User
:
@Entity // 告诉JPA这是一个实体类(和数据表映射的类)
@Table(name = "tbl_user") // 指定和哪个数据表对应,如果省略,默认表明就是类名小写user
public class User {
@Id // 标注这是一个主键
@GeneratedValue(strategy = GenerationType.IDENTITY) // 标注这是自增的,两个配合使用标注一个自增主键
private Integer id;
@Column(name = "last_name", length = 50) // 标注这是和数据表对应的一个列
private String lastName;
@Column // 省略的话,默认列名就是属性名
private String email;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
}
2. 编写一个Dao接口,来操作实体类对应的数据表
(1)只需要继承JpaRepository
,就能用其自带的方法来完成对数据库的操作
(2)JpaRepository<T, ID>
: T
:实体类,ID
:实体类中自增主键的类型
/respository/UserRepository
:
public interface UserRepository extends JpaRepository<User, Integer> {}
3. 在全局配置文件中配置Jpa属性
application.yml
:
spring:
jpa:
hibernate:
# 更新或者创建数据表
ddl-auto: update
# 在控制台显示sql语句
show-sql: true
4. 测试
/controller/UserController
:
@RestController
public class UserController {
@Autowired
UserRepository userRepository;
@GetMapping("/user/{id}")
public User getUser(@PathVariable("id") Integer id){
User user = userRepository.findById(id).orElse(null);
return user;
}
@GetMapping("/user")
public User insertUser(User user){
User save = userRepository.save(user);
return save;
}
}