springboot整合MyBatis
1、MyBatis了解
官方文档:http://mybatis.org/spring-boot-starter/mybatis-spring-boot-autoconfigure/
Maven仓库地址:https://mvnrepository.com/artifact/org.mybatis.spring.boot/mybatis-spring-boot-starter/2.1.3
2、整合流程
数据库提供:
mysql> use springboot
Database changed
mysql> show tables;
+----------------------+
| Tables_in_springboot |
+----------------------+
| user |
+----------------------+
1 row in set (0.00 sec)
mysql> create table Department(
-> id int primary key,
-> departmentName varchar(20) not null
-> );
Query OK, 0 rows affected (0.10 sec)
mysql> show tables;
+----------------------+
| Tables_in_springboot |
+----------------------+
| department |
| user |
+----------------------+
2 rows in set (0.00 sec)
mysql> select * from department;
+----+----------------+
| id | departmentName |
+----+----------------+
| 1 | JJ |
+----+----------------+
1 row in set (0.00 sec)
mysql> create table employee(
-> id int primary key,
-> last_name varchar(30) not null,
-> email varchar(50) not null,
-> gender int not null,
-> department int not null,
-> birth Date not null
-> );
Query OK, 0 rows affected (0.02 sec)
mysql> show tables;
+----------------------+
| Tables_in_springboot |
+----------------------+
| department |
| employee |
| user |
+----------------------+
3 rows in set (0.00 sec)
2.1步骤
1.导入依赖坐标(使用Druid数据库连接池,添加依赖:(参考) springboot整合 JDBC、Druid
<!--springboot整合mybatis-->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.3</version>
</dependency>
2.在application.yml中配置数据库
上一篇已经配置数据源了,不再赘述了:
https://blog.csdn.net/qq_45824905/article/details/117327739?spm=1001.2014.3001.5501
https://blog.csdn.net/qq_45824905/article/details/117324141
---------------------------------------------------------------
mapper映射文件配置方式一:在resources目录下,也是开发最常用的。
#mybatis 配置
mybatis:
#mybatis映射文件存放路径
mapper-locations: classpath:/mapper/*.xml
type-aliases-package: com.austin.pojo
configuration:
#下划线驼峰式的配置
map-underscore-to-camel-case: true
#分页配置
pagehelper:
helper-dialect: mysql
#显示dao层 执行的SQL语句
logging:
level:
com:
austin:
mapper: debug
3.测试数据库切换是否成功
4.创建实体类(Lombok)
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Department {
private Integer id;
private String departmentName;
}
--------------------------------------------------------------------------------------
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Employee {
private Integer id;
private String lastName;
private String email;
private Integer departmentName;
private Integer gender;
private Date birth;
private Department eDepartment;
}
5.创建mapper接口和mapper的映射文件
mapper映射文件存放位置:
@Mapper
@Repository
public interface DepartmentMapper {
//获取部门全部信息
Department selectList();
//通过id获取全部部门
Department queryDepartmentById(Integer id);
}
---------------------------------------------------------------------------------------
@Mapper
public interface EmployeeMapper {
// 新增员工
int save(Employee employee);
//查询所有的员工
List<Employee> selectEmployee();
//通过id查询
Employee selectEmployeeById(Integer id);
//通过id删除
Integer deleteEmployeeById(Integer id);
}
<?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.austin.mapper.DepartmentMapper">
<!--通过用户id查询-->
<select id="queryDepartmentById" resultType="com.austin.pojo.Department">
select *
from department
where id = #{id}
</select>
<select id="selectList" resultType="com.austin.pojo.Department">
select *
from department
</select>
</mapper>
---------------------------------------------------------------------
<?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" >
<!--namespace='UserMapper文件全限定名称' -->
<mapper namespace="com.austin.mapper.EmployeeMapper">
<resultMap id="Employee" type="Employee">
<id property="id" column="eid"/>
<result property="lastName" column="last_name"/>
<result property="email" column="email"/>
<result property="gender" column="gender"/>
<result property="birth" column="birth"/>
<result property="departmentName" column="did"/>
<association property="eDepartment" javaType="Department">
<id property="id" column="did"/>
<result property="departmentName" column="dname"/>
</association>
</resultMap>
<!-- id 方法名称 resultType实体类-->
<select id="selectEmployee" resultMap="Employee">
select e.id as eid, last_name, email, gender, birth, d.id as did, d.department_name as dname
from department d,
employee e
where d.id = e.department
</select>
<!--insert into table values (#{id}, #{name}, #{email}, #{age})-->
<insert id="save" parameterType="Employee">
insert into employee (last_name, email, gender, dname, birth)
values (#{lastName}, #{email}, #{gender}, #{departmentName}, #{birth})
</insert>
<select id="selectEmployeeById" parameterType="java.lang.Integer" resultType="Employee">
select *
from employee
where id = #{id}
</select>
<delete id="deleteEmployeeById" parameterType="java.lang.Integer" >
delete
from employee
where id = #{id}
</delete>
</mapper>
6.maven配置资源过滤问题
<!--打包时打包mapper.xml文件-->
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*Mapper.xml</include>
<include>**/*.properties</include>
</includes>
</resource>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.*</include>
</includes>
</resource>
</resources>
7.编写service测试
@Service
public interface DepartmentService {
Department selectList();
Department queryDepartmentById(Integer id);
}
@Service
public class DepartmentServiceImpl implements DepartmentService {
@Autowired
private DepartmentMapper departmentMapper;
@Override
public Department selectList() {
return departmentMapper.selectList();
}
@Override
public Department queryDepartmentById(Integer id) {
return departmentMapper.queryDepartmentById(id);
}
}
-------------------------------------------------------------------------------------
@Service
public interface EmployeeSerive {
Integer save(Employee employee);
List<Employee> selectEmployee();
Employee selectEmployeeById(Integer id);
Integer deleteEmployeeById(Integer id);
}
@Service
public class EmployeeServiceImpl implements EmployeeSerive {
@Autowired
private EmployeeMapper employeeMapper;
@Override
public Integer save(Employee employee) {
return employeeMapper.save(employee);
}
@Override
public List<Employee> selectEmployee() {
return employeeMapper.selectEmployee();
}
@Override
public Employee selectEmployeeById(Integer id) {
return employeeMapper.selectEmployeeById(id);
}
@Override
public Integer deleteEmployeeById(Integer id) {
return employeeMapper.deleteEmployeeById(id);
}
}
8.编写controller层
@Controller
public class DepartmentController {
@Autowired
private DepartmentService departmentService;
@GetMapping("/list")
@ResponseBody
public Department getList() {
return departmentService.selectList();
}
@GetMapping("/list/{id}")
@ResponseBody
public Department queryDepartmentById(@PathVariable Integer id) {
return departmentService.queryDepartmentById(id);
}
}
---------------------------------------------------------------------------------
@Controller
public class EmployeeController {
@Autowired
private EmployeeSerive employeeSerive;
@GetMapping("/add")
@ResponseBody
public Integer save() {
Employee ep = new Employee();
ep.setLastName("lxx");
ep.setEmail("lxx@qq.com");
ep.setBirth(new Date());
ep.setDepartmentName(1);
ep.setGender(1);
Integer i = employeeSerive.save(ep);
return i;
}
@GetMapping("/ListDe")
@ResponseBody
public List<Employee> selectEmployeeList() {
List<Employee> employees = employeeSerive.selectEmployee();
for (Employee employee : employees) {
System.out.println(employee);
}
return employees;
}
@GetMapping("/listDe/{id}")
@ResponseBody
public Employee selectEmployeeById(@PathVariable("id") Integer id) {
return employeeSerive.selectEmployeeById(id);
}
@GetMapping("/deleteDe/{id}")
@ResponseBody
public Integer deleteEmployeeById(@PathVariable("id") Integer id) {
return employeeSerive.deleteEmployeeById(id);
}
}
9.启动项目,访问测试
测试完毕