# SpringBoot_MyBatis
**Repository Path**: CYSpringBoot/SpringBoot_MyBatis
## Basic Information
- **Project Name**: SpringBoot_MyBatis
- **Description**: 使用MyBatis框架访问数据库
- **Primary Language**: Unknown
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2019-07-05
- **Last Updated**: 2020-12-19
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# SpringBoot_MyBatis
#### 介绍
> [SpringBoot_Jpa](https://gitee.com/CYSpringBoot/springboot_jpa.git) 中已经介绍了通过Jpa访问数据库,
本篇将通过MyBatis来访问mysql数据,
```
两者之间的区别:
Jpa优势:
Hibernate的DAO层开发比MyBatis简单,Mybatis需要维护SQL和结果映射。
Hibernate对对象的维护和缓存要比MyBatis好,对增删改查的对象的维护要方便。
Hibernate数据库移植性很好,MyBatis的数据库移植性不好,不同的数据库需要写不同SQL。
Hibernate有更好的二级缓存机制,可以使用第三方缓存。MyBatis本身提供的缓存机制不佳。
MyBatis:
MyBatis可以进行更为细致的SQL优化,可以减少查询字段。
MyBatis容易掌握,而Hibernate门槛较高。
但是hibernate的sql很多都是自动生成的,无法直接维护sql,一些复杂的sql语句,
需要编写sql时的灵活度上hibernate不及mybatis
```
#### MyBatis配置
- 配置MyBatis依赖以及mysql依赖
```xml
org.springframework.boot
spring-boot-starter-jdbc
mysql
mysql-connector-java
org.mybatis.spring.boot
mybatis-spring-boot-starter
1.3.1
```
- 数据库配置 application.properties
```properties
# 服务器端口
server.port=8888
# 链接mysql jdbc驱动
spring.datasource.driver-class-name = com.mysql.jdbc.Driver
# mysql地址
spring.datasource.url = jdbc:mysql://127.0.0.1:3306/springboot?useUnicode=true\
&characterEncoding=utf-8&useSSL=false
# 数据库用户名
spring.datasource.username = root
# 数据库密码
spring.datasource.password = 123456
```
#### 编写代码使用MyBatis访问数据库
- 使用[SpringBoot_Jpa](https://gitee.com/CYSpringBoot/springboot_jpa.git)访问数据库中的实体类
```java
package com.lcy.springboot_mybatis.Entity;
public class User {
private Integer userId;
// 用户名
private String userName;
// 用户密码
private String userPassword;
// 用户年龄
private String userAge;
public Integer getUserId() {
return userId;
}
public void setUserId(Integer userId) {
this.userId = userId;
}
public String getUserAge() {
return userAge;
}
public void setUserAge(String userAge) {
this.userAge = userAge;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getUserPassword() {
return userPassword;
}
public void setUserPassword(String userPassword) {
this.userPassword = userPassword;
}
}
```
- 编写MyBatis需要的mapper文件
```java
package com.lcy.springboot_mybatis.mapper;
import com.lcy.springboot_mybatis.Entity.User;
import java.util.List;
@Mapper
public interface UserMapper {
// 增加用户
public void insertUser(User user);
// 查找所有用户
public List findAllUsers();
// 通过ID查询用户
public User findUserById(Integer id);
// 更新用户信息
public void updateUser(User user);
// 删除用户
public void deleteUser(Integer id);
}
```
- 增加mapper的XML文件
> [src] -> [main] -> [resources] 创建usermapper.xml文件
``` xml
insert into user (user_name, user_password, user_age)
values
(#{userName}, #{userPassword}, #{userAge})
update user
set user_name = #{userName},
user_password = #{userPassword},
user_age = #{userAge}
where user_id = #{userId}
delete from user
where user_id = #{userId}
```
- 配置xml扫描路径 application.properties
```properties
mybatis.type-aliases-package= com.lcy.springboot_mybatis.Entity
mybatis.mapper-locations= classpath:mapping/*.xml
```
#### 接口实现
- Service
```java
import com.lcy.springboot_mybatis.Entity.User;
import java.util.List;
public interface UserService {
// 增加用户
public void insertUser(User user);
// 查找所有用户
public List findAllUsers();
// 通过ID查询用户
public User findUserById(Integer id);
// 更新用户信息
public void updateUser(User user);
// 删除用户
public void deleteUser(Integer id);
}
```
````java
import com.lcy.springboot_mybatis.Entity.User;
import com.lcy.springboot_mybatis.mapper.UserMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.List;
@Service
public class UserServiceImpl implements UserService {
@Autowired
private UserMapper userMapper;
@Override
public void insertUser(User user) {
userMapper.insertUser(user);
}
@Override
public List findAllUsers() {
return userMapper.findAllUsers();
}
@Override
public User findUserById(Integer id) {
return userMapper.findUserById(id);
}
@Override
public void updateUser(User user) {
userMapper.updateUser(user);
}
@Override
public void deleteUser(Integer id) {
userMapper.deleteUser(id);
}
}
````
- Controller
```java
import com.lcy.springboot_mybatis.Entity.User;
import com.lcy.springboot_mybatis.Service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@RestController
public class UserController {
@Autowired
private UserService userService;
@PostMapping(value = "insertUser")
public String insertUser(@RequestBody User user) {
userService.insertUser(user);
return "插入成功";
}
@PostMapping(value = "updateUser")
public String updateUser(@RequestBody User user) {
userService.updateUser(user);
return "更新成功";
}
@GetMapping(value = "findAllUsers")
public List findAllUsers() {
return userService.findAllUsers();
}
@GetMapping(value = "findUserById")
public User findUserById(Integer userId) {
return userService.findUserById(userId);
}
@PostMapping(value = "deleteUserById")
public String deleteUserById(Integer userId) {
userService.deleteUser(userId);
return "删除成功";
}
}
```
> 测试接口和 [SpringBoot_Jpa](https://gitee.com/CYSpringBoot/springboot_jpa.git) 测试完全一致,不再赘述。
#### 完成
> 待续...