# 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) 测试完全一致,不再赘述。 #### 完成 > 待续...