SpringBoot整合Mybatis(基于XML方式)

以往都是整合Spring+SpringMVC+Mybatis这个三个框架,今天用SpringBoot整合了Mybatis,发现这个比之前的SSM的整合方便的太多,省去大量的配置文件。因为Spring Boot中对此做了进一步的简化,使MyBatis基本上可以做到开箱即用,这也为什么SpringBoot这么火的原因,本文就来看看在Spring Boot中MyBatis要如何使用,话不多说,直接进入正题。


1、首先创建一个SpringBoot项目。

SpringBoot整合Mybatis(基于XML方式)

SpringBoot整合Mybatis(基于XML方式)

SpringBoot整合Mybatis(基于XML方式)


2、创建成功之后查看一下pom里面的配置信息。

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.4.2</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.thr</groupId>
    <artifactId>springboot-mybatis</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>springboot-mybatis</name>
    <description>Demo project for Spring Boot</description>
    <properties>
        <java.version>1.8</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>2.1.4</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>

3、修改SpringBoot的配置文件

注意:我们不使用默认生成的application.properties文件,而使用更加简洁的application.yml文件。将resource文件夹下原有的application.properties文件删除,创建application.yml配置文件(注:SpringBoot底层会把application.yml文件解析为application.properties),创建的application.yml配置如下所示。

#配置端口
server:
  port: 8080
#数据库连接信息
spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url:  jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8
    username: root
    password: 123456
#mybatis的相关凭配置
mybatis:
  #mapper的xml位置和别名
  mapper-locations: classpath:mapper/*.xml
  type-aliases-package: com.thr.entity
  #开启驼峰命名
  configuration:
    map-underscore-to-camel-case: true

4、创建数据库。

-- ----------------------------
-- Table structure for t_user
-- ----------------------------
DROP TABLE IF EXISTS `t_user`;
CREATE TABLE `t_user`  (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `username` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  `password` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  `age` int(11) NULL DEFAULT NULL,
  `address` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 6 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;

SET FOREIGN_KEY_CHECKS = 1;

SpringBoot整合Mybatis(基于XML方式)


5、然后在src/java/main下分别创建entity实体类、Dao接口、Service接口、ServiceImpl实现类和Controller控制类。在src/java/resources下创建mapper映射文件(mapper/UserMapper.xml)。

--User实体类:

public class User {
    private Long id;//编号
    private String username;//用户名
    private String password;//密码
    private Integer age;//年龄
    private String address;//地址
    //getter、setter省略
}

--UserMapper接口:

@Repository
public interface UserMapper {
    //查询所有用户信息
    List<User> findAll();
    //根据id查询用户信息
    User findUserById(Integer id);
    //添加用户信息
    void addUser(User user);
    //修改用户信息
    void updateUserById(User user);
    //删除用户信息
    void deleteUserById(Integer id);
}

--UserService接口:和上面UserMapper接口中的方法是一样的,所有就不贴了。

--UserServiceImpl实现类:

@Service("userService")
public class UserServiceImpl  implements UserService {

    @Autowired
    private UserMapper userMapper;

    @Override
    public List<User> findAll() {
        return userMapper.findAll();
    }
    @Override
    public User findUserById(Integer id) {
        return userMapper.findUserById(id);
    }
    @Override
    public void addUser(User user) {
        userMapper.addUser(user);
    }
    @Override
    public void updateUserById(User user) {
        userMapper.updateUserById(user);
    }
    @Override
    public void deleteUserById(Integer id) {
        userMapper.deleteUserById(id);
    }
}

--UserController控制类:

@RestController
@RequestMapping(value = "/user")
public class UserController {

    @Autowired
    private UserService userService;

    /**
     * 查询所有用户信息
     * @return
     */
    @GetMapping(value = "/findAll")
    public List<User> findAll(){
        List<User> userList = userService.findAll();
        return userList;
    }
    /**
     * 根据id查询用户信息
     * @param id
     * @return
     */
    @GetMapping(value = "/findUserById/{id}")
    public User findUserById(@PathVariable(value = "id") Integer id){
        return userService.findUserById(id);
    }
    /**
     * 添加用户信息
     * @param user
     */
    @PostMapping(value = "/addUser")
    public void addUser(User user){
        user.setUsername("John");
        user.setPassword("123456");
        user.setAge(22);
        user.setAddress("中国重庆");
        userService.addUser(user);
    }
    /**
     * 修改用户信息
     * @param user
     */
    @PutMapping(value = "/updateUserById")
    public void updateUserById(User user){
        user.setId(3L);
        user.setUsername("Marry");
        user.setPassword("123456");
        user.setAge(20);
        user.setAddress("中国湖南");
        userService.updateUserById(user);
    }
    /**
     * 删除用户信息
     * @param id
     */
    @DeleteMapping(value = "/deleteUserById/{id}")
    public void deleteUserById(@PathVariable(value = "id") Integer id){
        System.out.println("Delete请求...");
        userService.deleteUserById(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.thr.dao.UserMapper">
    <select >
        select * from t_user;
    </select>
    <select >
        select * from t_user where id = #{id};
    </select>
    <insert >
        insert into t_user (username,password,age,address) values (#{username},#{password},#{age},#{address});
    </insert>
    <update >
        update t_user set username=#{username},password=#{password},age=#{age},address=#{address} where id=#{id}
    </update>
    <delete >
        delete from t_user where id=#{id}
    </delete>
</mapper>

6、项目整体目录。

SpringBoot整合Mybatis(基于XML方式)

最后打开类SpringbootMybatisApplication类,这个是SpringBoot的启动类。我们需要在里面添加一个注解@MapperScan

注意:@MapperScan("com.thr.dao")这个注解非常的关键,这个对应了项目中mapper(dao)所对应的包路径,很多同学就是这里忘了加导致异常的。如果不在启动类这里加,也可以在Mapper类上面添加注解@Mapper,建议使用上面那种,不然每个Mapper加个注解也挺麻烦的。

@SpringBootApplication(scanBasePackages={"com.thr.*"})
@MapperScan("com.thr.dao")
public class SpringbootMybatisApplication {

    public static void main(String[] args) {
        SpringApplication.run(SpringbootMybatisApplication.class, args);
    }
}

7、运行启动类,我们使用POSTMAN进行测试。

(1)、查询所有用户信息:(GET请求)http://localhost:8080/user/findAll

SpringBoot整合Mybatis(基于XML方式)


(2)、根据id查询用户信息:(GET请求)http://localhost:8080/user/findUserById/1

SpringBoot整合Mybatis(基于XML方式)


(3)、添加用户信息:(POST请求)http://localhost:8080/user/addUser

SpringBoot整合Mybatis(基于XML方式)

SpringBoot整合Mybatis(基于XML方式)


(4)、根据id修改用户信息:(PUT请求)http://localhost:8080/user/updateUserById

SpringBoot整合Mybatis(基于XML方式)


(5)、根据id删除用户:(DELETE请求)http://localhost:8080/user/deleteUserById/4

SpringBoot整合Mybatis(基于XML方式)

SpringBoot整合Mybatis(基于XML方式)