SpringBoot集成mybatis笔记

  • 1、总体过程描述
  • 2、搭建流程
  • 2.1 建库表
  • 2.2 新建boot项目
  • 2.3 配置文件内容
  • 2.4 编码
  • 3、总结


1、总体过程描述

boot集成mybatis,实现简单crud

1、设计库 表 字段
2、新建boot项目,导入依赖(mysql驱动、mybatis、lombok等)
3、配置文件
	数据库链接
	mapper文件路径、实体类路径

4、新建entity、mapper、service(Impl)、controller 等包
	mapper里面需要加上注解 @Mapper @Repository 
	serviceImpl里面加上 @Service
	controller 里面加上Controller(RestController) RequestMapping等注解
	启动类里配置 @MapperScan("") //需要扫描的mapper

ps:注意点
  1、虽然过程很简单,不要直接去controller测试,如果出现bug 在浏览器会返回404,问题较难排查。
	建议先经过boot自带的test测试,通过测试再去controller进行,由下及上比较稳,问题也容易排查。
	自己做测试的时候直接以为很简单,一路顺畅 但是结果很打脸,找bug也比较难找,排查问题的能力还是不够。最后结果发现是配置文件mapper路径错了....

2、搭建流程

2.1 建库表

springboot mybatis sql语句输出_mybatis

2.2 新建boot项目

springboot mybatis sql语句输出_spring_02

  • 新建项目,导入依赖(spring web、mysql驱动、mybatis、lombok等依赖)
  • springboot mybatis sql语句输出_配置文件_03

  • pom文件
<dependencies>
        <!--starter  test-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

        <!--mybatis mysql驱动-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>1.3.2</version>
        </dependency>

        <!--lombok-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
    </dependencies>
</project>

2.3 配置文件内容

在springboot中,可以使用不同的配置文件,比如开发、生产环境等,然后在
application.properties中指定使用哪个文件

spring.profiles.active=dev

springboot mybatis sql语句输出_spring_04


这里就是一个小demo,不做过多的指定,采用默认的配置文件

  • application.properties
# 数据库连接
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/mybatis?useUnicode=true&characterEncoding=utf-8&useSSL=false
spring.datasource.username=root
spring.datasource.password=root

#mapper.xml文件路径
mybatis.mapper-locations=classpath:mapper/*.xml
# pojo实体路径
mybatis.type-aliases-package=com.example.lc.entity
#“logging.level.”为前缀,“com.example.lc.mapper”为Mapper接口所在的包路径。对应的value值为日志的级别。
logging.level.com.example.lc.mapper=debug

2.4 编码

在启动类的同级目录下 新建entity、mapper、service(Impl)、controller等包名

springboot mybatis sql语句输出_spring_05


启动类上标记扫描的mapper路径

@MapperScan("com.example.lc.mapper") //扫描的mapper
@SpringBootApplication
public class Lc3Application {
    public static void main(String[] args) {
        SpringApplication.run(Lc3Application.class, args);
    }
}

一、新建实体 User

@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {
    private Integer id;
    private String name;
    private String password;
    private String perms;
}

二、新建mapper接口 UserMapper

@Mapper
@Repository
public interface UserMapper {
    int insert(User user);
    int delete(Integer id);
    int update(User user);
    User queryForOne(@Param("id") Integer id);
    List<User> queryForList();
}

在Rescources目录下新建 mapper/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.example.lc.mapper.UserMapper">
    <resultMap id="BaseResultMap" type="com.test.lc4.entity.User">
        <result column="id" jdbcType="INTEGER" property="id" />
        <result column="name" jdbcType="VARCHAR" property="name" />
        <result column="password" jdbcType="VARCHAR" property="password" />
        <result column="perms" jdbcType="VARCHAR" property="perms" />
    </resultMap>

    <insert id="insert" parameterType="com.example.lc3.entity.User">
        insert into `user`(id, name, password) VALUE (#{id},#{name},#{password})
    </insert>

    <update id="update" parameterType="com.example.lc3.entity.User">
        update  `user` set name = #{name} ,password = #{password} where id = #{id}
    </update>

    <delete id="delete" parameterType="int">
        delete from `user` where id = #{id}
    </delete>

    <select id="queryForOne" resultType="com.example.lc3.entity.User">
        select id,`name`,password from `user` where id = #{id}
    </select>

    <select id="queryForList" resultType="com.example.lc3.entity.User">
        select id,`name`,password from `user`
    </select>
</mapper>

实体和mapper配置好之后,可以先对本案例做一个测试,看能否对数据进行增改

@SpringBootTest
class LcApplicationTests {

    @Autowired
    private UserMapper userMapper;

    @Test
    void testQueryList() {
        List<User> users = userMapper.queryForList();
        for(User user : users){
            System.out.println(user);
        }
    }

    @Test
    void contextLoads() {
        int i = userMapper.insert(new User(2, "root", "root"));
        System.out.println("=======" + i);
    }

}

测试显示能对数据库进行操作,继续后续操作

springboot mybatis sql语句输出_User_06

三、新建service层

  • 接口
public interface UserService {
    int insert(User user);
    int delete(Integer id);
    int update(User user);
    User queryForOne(Integer id);
    List<User> queryForList();
}
  • 实现类 (加service注解)
@Service
public class UserServiceImpl implements UserService {

    @Autowired
    private UserMapper userMapper;

    @Override
    public int insert(User user) {
        return userMapper.insert(user);
    }

    @Override
    public int delete(Integer id) {
        return userMapper.delete(id);
    }

    @Override
    public int update(User user) {
        return userMapper.update(user);
    }

    @Override
    public User queryForOne(Integer id) {
        return userMapper.queryForOne(id);
    }

    @Override
    public List<User> queryForList() {
        return userMapper.queryForList();
    }
}

四、新建controller层

@RestController
public class UserController {

    @Autowired
    private UserService userService;

    @GetMapping("/index")
    public String hello(){
        return "hello world";
    }

    @RequestMapping("/add")
    public int save(User user){
        return userService.insert(user);
    }

	// 给出部分方法
	
    @RequestMapping("/query/{id}")
    public User queryForOne(@PathVariable int id){
        User user = userService.queryForOne(id);
        return user;
    }
    
    @RequestMapping("/queryList")
    public List<User> query(){
        List<User> users = userService.queryForList();
        for (User user : users){
            System.out.println(user);
        }
        return users;
    }

}

测试结果add

springboot mybatis sql语句输出_配置文件_07


测试结果查询所有

springboot mybatis sql语句输出_spring boot_08

3、总结

大功告成了,对于SpringBoot集成Mybatis其实是比较容易的,自己之前感觉也是比较ok的,但是在这次实操的时候遇到了各种各样的bug,一路过来也发现了自己很多的不足。既有对知识点的不了解,也有对技能的不熟练,还有自己的小马虎…
.
在学习的时候很多时候都是直接跟着老师的视频一片带过了,可能会遇到的问题老师都给解决了,而自己就是跟着无脑操作,没有自己的吸收。这次真正的实操也才发现自己有很多的不足。
.
对于技术的学习,一方面需要学习新的知识点,另外一方面也需要时间和动手来沉淀。一味的进行新的内容学习却不动手操作无异于空中阁楼。将理论和实践合二为一才是王道。通过学习新的知识点,然后进行实操 将一个个的知识点内容进行融合,逐渐构建自己的知识体系。由点及线再到面 乃至体。