SpringBoot 整合 MyBatis 完整详细版
执行以下脚本在数据库中创建 tb_user 表。
CREATE TABLE tb_user
(
id
int(11) NOT NULL AUTO_INCREMENT,
name
varchar(255) DEFAULT NULL,
username
varchar(255) DEFAULT NULL,
password
varchar(255) DEFAULT NULL,
PRIMARY KEY (id
)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
编写代码
在项目中新建 4 个包,分别为 entity(放置持久化类)、controller(控制器)、mapper(定义数据访问接口的包)、service(业务逻辑处理类)。在 resources 目录下创建 mapper 文件夹。代码中有详细的注释,下面直接贴代码。
1、编写实体类
实体类 User.java,其代码如下(和数据库字段需要对应,继承分页公共类 MyEverpage)。
public class User extends MyEverpage {
private Integer id;
private String name;
private String username;
private String password;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
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;
}
}
分页查询参数公共类 MyEverpage.java,代码如下。
/**
分页类
@author Administrator
*/
public class My 《一线大厂 Java 面试题解析+后端开发学习笔记+最新架构讲解视频+实战项目源码讲义》无偿开源 威信搜索公众号【编程进阶路】 Everpage {
private int limit;
private int offset;
public int getLimit() {
return limit;
}
public void setLimit(int limit) {
this.limit = limit;
}
public int getOffset() {
return offset;
}
public void setOffset(int offset) {
this.offset = offset;
}
}
2、编写 xml 文件,SQL 查询
在 resources/mapper 文件夹下新建一个 UserMapper.xml 文件,编写查询语句,代码如下(这里的 xml 路径一定要和 application.properties 配置文件中的路径一致)。
<?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 命名空间,作用就是对 sql 进行分类化管理,理解 sql 隔离
注意:使用 mapper 代理方法开发,namespace 有特殊重要的作用,namespace 等于 mapper 接口地址
-->
<mapper namespace="com.mcy.springbootmybatis.mapper.UserMapper">
<select id="findAll" resultType="User">
select * from tb_user
</select>
<select id="findByName" parameterType="User" resultType="User">
select * from tb_user where name=#{name}
</select>
<select id="findByUsernameLike" parameterType="User" resultType="User">
select * from tb_user where username like "%"#{username}"%"
</select>
<select id="findById" parameterType="User" resultType="User">
select * from tb_user where id = #{id}
</select>
<select id="find" parameterType="User" resultType="User">
select * from tb_user where 1=1
<if test="name != '' and name != null">
and name =#{name}
</if>
<if test="username != '' and username != null">
and username =#{username}
</if>
</select>
<select id="findByPageAll" parameterType="User" resultType="User">
select * from tb_user limit #{offset},#{limit}
</select>
<insert id="addSave" parameterType="User">
insert into tb_user values(null, #{name}, #{username}, #{password})
</insert>
<update id="update" parameterType="User">
update tb_user set name=#{name}, username=#{username}, password=#{password}
where id=#{id}
</update>
</mapper>
3、编写 Mapper 接口
UserMapper.java 接口,代码如下(需要添加 @Mapper 注解,方法名需要额 xml 中的 id 值对应)。
import com.mcy.springbootmybatis.entity.User;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;
@Mapper
public interface UserMapper {
//查询所有,方法名需要和 UserMapper.xml 中的 id 对应
public List<User> findAll();
//根据姓名查询
public List<User> findByName(String name);
//根据用户名模糊查询
public List<User> findByUsernameLike(String username);
//根据 id 查询
public User findById(Integer id);
//多条件动态查询
public List<User> find(User user);
//分页查询
public List<User> findByPageAll(User user);
//新增
public void addSave(User user);
//修改
public void update(User user);
}
3、编写业务层类
UserService.java 业务层类。
import com.mcy.springbootmybatis.entity.User;
import com.mcy.springbootmybatis.mapper.UserMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class UserService {
@Autowired
private UserMapper userMapper;
//查询所有,方法名需要和 UserMapper.xml 中的 id 对应
public List<User> findAll(){
return userMapper.findAll();
};
//根据姓名查询
public List<User> findByName(String name){
return userMapper.findByName(name);
};
//根据用户名模糊查询
public List<User> findByUsernameLike(String username){
return userMapper.findByUsernameLike(username);
};
//根据 id 查询
public User findById(Integer id){
return userMapper.findById(id);
};
//多条件动态查询
public List<User> find(User user){
return userMapper.find(user);
};
//分页查询
public List<User> findByPageAll(User user){
return userMapper.findByPageAll(user);
};
//新增
public void addSave(User user){
userMapper.addSave(user);
};
//修改
public void update(User user){
userMapper.update(user);
};
}
测试应用
1、编写测试 Controller
访问控制器 UserController.java 类,代码如下。
import com.mcy.springbootmybatis.entity.User;
import com.mcy.springbootmybatis.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
@RestController
@RequestMapping("/user")
public class UserController {
@Autowired
private UserService userService;
//查询所有,方法名需要和 UserMapper.xml 中的 id 对应
@RequestMapping("/findAll")
public List<User> findAll(){
return userService.findAll();
};
//根据姓名查询
@RequestMapping("/findByName")
public List<User> findByName(String name){
return userService.findByName(name);
};
//根据用户名模糊查询
@RequestMapping("/findByUsernameLike")
public List<User> findByUsernameLike(String username){
return userService.findByUsernameLike(username);
};
//根据 id 查询用户对象
@RequestMapping("/findById")
public User findById(Integer id){
return userService.findById(id);
}
//多条件动态查询
@RequestMapping("/find")
public List<User> find(User user){
return userService.find(user);
};
//分页查询
@RequestMapping("/findByPageAll")
public List<User> findByPageAll(User user){
return userService.findByPageAll(user);
};
//新增
@RequestMapping("/addSave")
public String addSave(){
User user = new User();
user.setName("张三");
user.setUsername("admin");
user.setPassword("admin");
userService.addSave(user);
user.setName("李四");
user.setUsername("123456");
user.setPassword("123456");
userService.addSave(user);
user.setName("王五");
user.setUsername("user");
user.setPassword("123456");
评论