1 Spring 版本

1.1 建库建表

打开 Navicat 运行以下 SQL 脚本进行建库建表

CREATE DATABASE `mybatis_plus` /*!40100 DEFAULT CHARACTER SET utf8mb4 */;
use `mybatis_plus`;
CREATE TABLE `user` (
    `id` bigint(20) NOT NULL COMMENT '主键ID',
    `name` varchar(30) DEFAULT NULL COMMENT '姓名',
    `age` int(11) DEFAULT NULL COMMENT '年龄',
    `email` varchar(50) DEFAULT NULL COMMENT '邮箱',
    PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

插入几条测试数据

INSERT INTO user (id, name, age, email) VALUES
(1, 'Jone', 18, 'test1@baomidou.com'),
(2, 'Jack', 20, 'test2@baomidou.com'),
(3, 'Tom', 28, 'test3@baomidou.com'),
(4, 'Sandy', 21, 'test4@baomidou.com'),
(5, 'Billie', 24, 'test5@baomidou.com');

1.2 创建 Maven 工程

  1. 更改打包方式为 jar。
  2. 引入依赖。
<packaging>jar</packaging>
<properties>
	<spring.version>5.3.1</spring.version>
</properties>
<dependencies>
	<dependency>
		<groupId>org.springframework</groupId>
		<artifactId>spring-context</artifactId>
		<version>${spring.version}</version>
	</dependency>
	<dependency>
		<groupId>org.springframework</groupId>
		<artifactId>spring-jdbc</artifactId>
		<version>${spring.version}</version>
	</dependency>
	<dependency>
		<groupId>org.springframework</groupId>
		<artifactId>spring-test</artifactId>
		<version>${spring.version}</version>
	</dependency>
	<!-- 连接池 -->
	<dependency>
		<groupId>com.alibaba</groupId>
		<artifactId>druid</artifactId>
		<version>1.2.8</version>
	</dependency>
	<!-- junit测试 -->
	<dependency>
		<groupId>junit</groupId>
		<artifactId>junit</artifactId>
		<version>4.12</version>
		<scope>test</scope>
	</dependency>
	<!-- MySQL驱动 -->
	<dependency>
		<groupId>mysql</groupId>
		<artifactId>mysql-connector-java</artifactId>
		<version>8.0.27</version>
	</dependency>
	<!-- 日志 -->
	<dependency>
		<groupId>org.slf4j</groupId>
		<artifactId>slf4j-api</artifactId>
		<version>1.7.30</version>
	</dependency>
	<dependency>
		<groupId>ch.qos.logback</groupId>
		<artifactId>logback-classic</artifactId>
		<version>1.2.3</version>
	</dependency>
	<!-- lombok用来简化实体类 -->
	<dependency>
		<groupId>org.projectlombok</groupId>
		<artifactId>lombok</artifactId>
		<version>1.16.16</version>
	</dependency>
	<!--MyBatis-Plus的核心依赖-->
	<dependency>
		<groupId>com.baomidou</groupId>
		<artifactId>mybatis-plus</artifactId>
		<version>3.4.3.4</version>
	</dependency>
</dependencies>

MyBatis-Plus 包含了 MyBatis 和 MyBatis-Spring。

1.3 整合 MyBatis

300

1.3.1 创建 User 实体

package org.wsc.pojo;
 
@Data
@AllArgsConstructor
@NoArgsConstructor()
public class User {
    private Long id;
    private String name;
    private Integer age;
    private String email;
    }
}

1.3.2 创建 UserMapper 映射

package org.wsc.mapper;
public interface UserMapper {
    List<User> getAllUser();
}

1.3.3 创建 Spring 配置文件

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
            http://www.springframework.org/schema/beans/spring-beans.xsd
            http://www.springframework.org/schema/context
            https://www.springframework.org/schema/context/spring-context.xsd">
 
    <context:property-placeholder location="classpath:jdbc.properties"/>
 
    <!-- 配置Druid数据源 -->
    <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
        <property name="driverClassName" value="${jdbc.driver}"></property>
        <property name="url" value="${jdbc.url}"></property>
        <property name="username" value="${jdbc.username}"></property>
        <property name="password" value="${jdbc.password}"></property>
    </bean>
 
    <bean class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="configLocation" value="classpath:mybatis-config.xml"/>
        <property name="dataSource" ref="dataSource"/>
        <property name="typeAliasesPackage" value="org.wsc.pojo"/>
    </bean>
 
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <property name="basePackage" value="org.wsc.mapper"/>
    </bean>
 
</beans>

1.3.4 创建 JDBC 属性文件

resources 下创建 jdbc.properties

jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/mybatis_plus?useUnicode=true&characterEncoding=utf-8&useSSL=false
jdbc.username=root
jdbc.password=root

1.3.5 创建 MyBatis 配置文件

<?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>
 

1.3.6 创建 SQL 映射文件

在 resources 下创建文件 org/wsc/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="org.wsc.mapper.UserMapper">
    <sql id="BaseColumns">id,name,age,email</sql>
    <select id="getAllUser" resultType="User">
        select <include refid="BaseColumns"></include> from user
    </select>
</mapper>

1.3.7 创建日志配置文件

resources 下创建 logback.xml

<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="false">
    <!--定义日志文件的存储地址 logs为当前项目的logs目录 还可以设置为../logs -->
    <property name="LOG_HOME" value="logs" />
    <!--控制台日志, 控制台输出 -->
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符
            宽度,%msg:日志消息,%n是换行符-->
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50}
                - %msg%n</pattern>
        </encoder>
    </appender>
    <!--myibatis log configure-->
    <logger name="com.apache.ibatis" level="TRACE"/>
    <logger name="java.sql.Connection" level="DEBUG"/>
    <logger name="java.sql.Statement" level="DEBUG"/>
    <logger name="java.sql.PreparedStatement" level="DEBUG"/>
    <!-- 日志输出级别 -->
    <root level="DEBUG">
        <appender-ref ref="STDOUT" />
    </root>
</configuration>

1.3.8 测试 - IOC 容器方法

@Test
public void testMyBatis(){
	ApplicationContext ac = new
			ClassPathXmlApplicationContext("spring.xml");
	UserMapper mapper = ac.getBean(UserMapper.class);
	mapper.getAllUser().forEach(user -> System.out.println(user));
}

1.3.9 测试 - Spring Junit

@SpringJUnitConfig(locations = "classpath:spring.xml")
//在Spring的环境中进行测试
@RunWith(SpringJUnit4ClassRunner.class)
//指定Spring的配置文件
//@ContextConfiguration("classpath:spring.xml")
public class MyBatisPlusSpringTest {
    @Autowired
    private UserMapper mapper;
    @Test
    public void test(){
        mapper.getAllUser().forEach(System.out::println);
    }
}

1.4 加入 MyBatis-Plus

1.4.1 修改 Spring 配置文件

org.mybatis.spring.SqlSessionFactoryBean 修改为 com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean

MyBatis-Plus 在 SqlSessionFactoryBean 上进行了增强。

<!-- Before -->
<bean class="org.mybatis.spring.SqlSessionFactoryBean">
	<property name="configLocation" value="classpath:mybatis-config.xml"/>
	<property name="dataSource" ref="dataSource"/>
	<property name="typeAliasesPackage" value="org.wsc.pojo"/>
</bean>
 
<!-- After-->
<bean class="com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean">
	<property name="configLocation" value="classpath:mybatis-config.xml"/>
	<property name="dataSource" ref="dataSource"/>
	<property name="typeAliasesPackage" value="org.wsc.pojo"/>
</bean>

1.4.2 修改 Mapper 接口

// Before
public interface UserMapper {
    List<User> getAllUser();
}
// After
public interface UserMapper extends BaseMapper<User> {
    List<User> getAllUser();
}

1.4.3 测试

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:spring.xml")
public class MyBatisPlusTest {
    @Autowired
    private UserMapper userMapper;
    @Test
    public void testMyBatisPlus(){
        System.out.println(userMapper.selectById(1));
		userMapper.getAllUser().forEach(System.out::println);
    }
}

1.5 总结

在 Spring 整合 MyBatis 中加入了 MyBatis-Plus 后,我们就可以使用 MyBatis-Plus 所提供的 BaseMapper。

实现 CRUD,并不需要编写映射文件以及 SQL 语句。但是若要自定义 SQL 语句,仍然可以编写映射文件而不造成任何影响。因为 MyBatis-Plus 只做增强,而不做改变。

2 SpringBoot 版本

2.1 建库建表

同上,略。

2.2 创建 SpringBoot 工程

使用 Spring Initializr 快速初始化一个 Spring Boot 工程。

创建时,引入一些基础依赖:

  • Spring Boot DevTools
  • Lombok
  • Spring Configuration Processor

2.2.1 引入 Maven 依赖

增加数据库相关依赖

<dependency>
	<groupId>mysql</groupId>
	<artifactId>mysql-connector-java</artifactId>
	<scope>runtime</scope>
</dependency>
<dependency>
	<groupId>com.baomidou</groupId>
	<artifactId>mybatis-plus-boot-starter</artifactId>
	<version>3.5.1</version>
</dependency>

2.2.2 配置 application.yml

spring:
  datasource:
    type: com.zaxxer.hikari.HikariDataSource
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/mybatis_plus?characterEncoding=utf8&useSSL=false
    username: root
    password: root

2.2.3 创建 User 实体

@Data
@AllArgsConstructor
@NoArgsConstructor()
public class User {
    private Long id;
    private String name;
    private Integer age;
    private String email;
}

2.2.4 创建 Mapper 对象

public interface UserMapper extends BaseMapper<User> {
 
}

2.2.5 配置 mapper 扫描

@MapperScan("com.wsc.ssm.mapper")
@SpringBootApplication
public class SsmApplication {
    public static void main(String[] args) {
        SpringApplication.run(SsmApplication.class, args);
    }
}

2.2.6 测试

userMapper 会红色波浪线,属于正常。

@SpringBootTest
public class SSMTest {
    @Autowired
    private UserMapper userMapper;
    @Test
    public void testSelectList(){
        userMapper.selectList(null).forEach(System.out::println);
    }
}

2.2.7 添加日志

mybatis-plus:
	configuration:
		log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

3 MyBatis 常用配置属性

#MyBatis -Plus 相关配置
mybatis-plus:
  #指定mapper文件所在的地址
  mapper-locations: classpath:mapper/*.xml
  configuration:
    #配置日志
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
  global-config:
    banner: off
    db-config:
      #配置mp的主键策略为自增
      id-type: auto
      # 设置实体类所对应的表的统一前缀
      table-prefix: t_
  #配置类型别名所对应的包
  type-aliases-package: com.atguigu.mybatisplus.pojo
  # 扫描通用枚举的包
  type-enums-package: com.atguigu.mybatisplus.enums