MyBatis 是一款优秀的持久层框架,被各大互联网公司使用,本文使用Spring Boot整合Mybatis,并完成CRUD操做。html
说的官方一点:java
MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎全部的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Ordinary Java Object,普通的 Java对象)映射成数据库中的记录。mysql
说的功利一点:git
听说目前各大互联网公司一般使用Mybatis,还不赶快学习一下吗?github
这才是本文的重点。spring
新建Spring Boot工程和导入Eclipse这些在这里就不啰嗦了,不会的能够查看只需两步!Eclipse+Maven快速构建第一个Spring Boot项目。sql
Spring Boot整合Mybatis须要引入 mybatis-spring-boot-starter;我使用的是MySQL数据库,须要引入ysql-connector-java。数据库
<!-- mysql驱动 --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency> <!-- spring-boot整合mybatis --> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>1.1.1</version> </dependency>
mybatis.config-location=classpath:mapper/mybatis_config.xml
mybatis.mapper-locations=classpath:mapper/*Mapper.xml
mybatis.type-aliases-package=com.shangguan.mybatis.entity
spring.datasource.driverClassName = com.mysql.cj.jdbc.Driver
spring.datasource.url = jdbc:mysql://localhost:3306/spring_boot?serverTimezone=GMT%2B8
spring.datasource.username = root
spring.datasource.password = 123456
例如个人mybatis_config.xml的路径为/mybatis/src/main/resources/mapper/mybatis_config.xml(下面是目录结构图),那么个人mybatis.config-location配置为classpath:mapper/mybatis_config.xml,请注意必定要根据本身项目的目录结构进行配置Mybatis。数据库也同样。跨域
mapper包里面是Mybatis的映射类。缓存
interceptor包是拦截器,若是还有疑问请参考以前的博文:Spring Boot配置拦截器及实现跨域访问
MyBatis 的配置文件包含了会深深影响 MyBatis 行为的设置(settings)和属性(properties)信息。关于配置文件的详解请看 xml映射配置文件。
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> </configuration>
User使用的和以前使用的同样,没有修改。
User:
public class User implements Serializable { private static final long serialVersionUID = 1L; private Long id; private String userName; private String passWord; public User() { super(); } public User(String userName, String passWord) { super(); this.userName = userName; this.passWord = passWord; } public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } public String getPassWord() { return passWord; } public void setPassWord(String passWord) { this.passWord = passWord; } @Override public String toString() { return "userName " + this.userName + ", pasword " + this.passWord; } }
增删改查的SQL语句在UserMapper.xml里面书写,具体的看代码,里面有注释。
有几点须要注意的地方:
①<select id="getAll" resultType="user">,这里的id的名字是本身取的,可是要和UserMapper.java里面的名字相同public List<User> getAll();
②当SQL语句中有多个参数的时候,须要在映射类方法里面加@Param的注解,否则会抛出异常说找不到参数。例如:
public void updateUser(@Param("id") Long id, @Param("userName") String userName, @Param("passWord") String passWord);
③主键自增,须要设置useGeneratedKeys="true" keyProperty="id"
UserMapper.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.shangguan.mybatis.mapper.UserMapper"> <resultMap id="BaseResultMap" type="com.shangguan.mybatis.mapper.UserMapper" > <id column="id" property="id" jdbcType="BIGINT" /> <result column="userName" property="userName" jdbcType="VARCHAR" /> <result column="passWord" property="passWord" jdbcType="VARCHAR" /> </resultMap> <!--查询全部--> <select id="getAll" resultType="user"> select * from user </select> <!--保存用户--> <insert id="saveUser" useGeneratedKeys="true" keyProperty="id"> insert into user(username,password) values(#{userName},#{passWord}) </insert> <!--经过Id删除用户--> <delete id="deleteUserById"> delete from user where id =#{id} </delete> <!--更新该用户信息--> <update id="updateUser"> update user set userName = #{userName},passWord = #{passWord} where id = #{id} </update> </mapper>
映射类UserMapper.java:
@Mapper public interface UserMapper { public List<User> getAll(); public void saveUser(User user); public void deleteUserById(Long id); public void updateUser(@Param("id") Long id, @Param("userName") String userName, @Param("passWord") String passWord); }
UserService里面有四个方法:增删改查。查询全部的用户,保存用户,经过id删除用户,更新用户信息。
UserService:
public interface UserService { public List<User> getAllUser(); public void saveUser(User user); public void deleteUserById(Long id); public void updateUser(Long id, String userName, String passWord); }
UserServiceImpl:
@Service public class UserServiceImpl implements UserService { @Autowired private UserMapper userMapper; @Override public List<User> getAllUser() { List<User> list = userMapper.getAll(); return list; } @Override public void saveUser(User user) { userMapper.saveUser(user); } @Override public void deleteUserById(Long id) { userMapper.deleteUserById(id); } @Override public void updateUser(Long id, String userName, String passWord) { userMapper.updateUser(id, userName, passWord); } }
UserController里面对接口进行封装:
@RestController @SpringBootApplication @RequestMapping("/mybatis") public class UserController { @Autowired private UserService userService; @RequestMapping("/getAllUser") public List<User> getAllUser() { List<User> list = userService.getAllUser(); return list; } @RequestMapping("/saveUser") public void saveUser(User user) { userService.saveUser(user); } @RequestMapping("/deleteUserById") public void deleteUserById(Long id) { userService.deleteUserById(id); } @RequestMapping("/updateUser") public void updateUser(Long id, String userName, String passWord) { userService.updateUser(id, userName, passWord); } }
启动Spring Boot项目,使用Postman进行测试:
① http://localhost:8080/mybatis/getAllUser 获取全部的用户信息
对比数据库无误:
② http://localhost:8080/mybatis/saveUser?userName=啊哈&passWord=123321 添加一个名字为啊哈,密码为123321的用户
添加成功:
③ http://localhost:8080/mybatis/deleteUserById?id=6 删除id为6的用户
删除成功:
④ http://localhost:8080/mybatis/updateUser?id=7&userName=三只松鼠&passWord=three 设置id为7的用户的用户名和密码
设置成功:
许多事情老是看起来简单作起来难,看着网上的Spring Boot整合教程以为太简单了,本身动手实践的过程当中依然会发现有一些须要注意的细节。
完整代码:GitHub地址