← 返回首页
MybatisPlus基础教程(二)
发表时间:2020-03-27 16:01:32
第一个MybatisPlus小例子

1.初始化工程

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

Group:com.simoniu Artifact:mpdemo 版本:2.2.1.RELEASE

2.添加依赖

1)添加依赖

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
            <optional>true</optional>
        </dependency>

       <!---junit dependency-->
       <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency> 

        <!---mysql driver-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>

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

        <!--mybatis-plus-->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.0.5</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
    </dependencies>

2)idea中安装lombok插件

3.application配置

application.properties

#mysql数据库连接
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/mybatis_plus?serverTimezone=GMT%2B8
spring.datasource.username=root
spring.datasource.password=root

#配置jpa
#帮我们自动生成表结构
spring.jpa.properties.hibernate.hbm2ddl.auto=update
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5InnoDBDialect
spring.jpa.show-sql=true
spring.jpa.properties.hibernate.enable_lazy_load_no_trans=true

#上下文配置
server.port=8080
server.servlet.context-path=/mpmdemo

application.yml


#数据源配置
spring:
  #配置数据源
  datasource:
    url: jdbc:mysql://localhost:3306/myweb?useSSL=false&useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true
    username: root
    password: root
    driver-class-name: com.mysql.cj.jdbc.Driver
    #Springboot2.0 的hikari配置
    hikari:
      minimum-idle: 5
      #空闲连接存活最大时间,默认600000(10分钟)
      idle-timeout: 180000
      #连接池最大连接数,默认是10
      maximum-pool-size: 10
      #此属性控制从池返回的连接的默认自动提交行为,默认值:true
      auto-commit: true
      #连接池名称
      pool-name: MyHikariCP
      #此属性控制池中连接的最长生命周期,值0表示无限生命周期,默认1800000即30分钟
      max-lifetime: 1800000
      #数据库连接超时时间,默认30秒,即30000
      connection-timeout: 30000
      connection-test-query: SELECT 1
  jpa:
    show-sql: true
    properties:
      hibernate:
        #dialect: org.hibernate.dialect.MySQL5Dialect ,注意这个是不支持事务的方言。
        dialect: org.hibernate.dialect.MySQL5InnoDBDialect
        format_sql: true
        #配置懒加载策略
        enable_lazy_load_no_trans: true
        hbm2ddl:
          auto: update

注意,pring boot 2.1 版本以上,url写法的变化:

1、这里的 url 使用了 ?serverTimezone=GMT%2B8 后缀,因为Spring Boot 2.1 集成了 8.0版本的jdbc驱动,这个版本的 jdbc 驱动需要添加这个后缀,否则运行测试用例报告如下错误:

java.sql.SQLException: The server time zone value 'Öйú±ê׼ʱ¼ä' is unrecognized or represents more

2、这里的 driver-class-name 使用了 com.mysql.cj.jdbc.Driver ,在 jdbc 8 中 建议使用这个驱动,之前的 com.mysql.jdbc.Driver 已经被废弃,否则运行测试用例的时候会有 WARN 信息

4.编写代码

1)在 Spring Boot 启动类中添加 @MapperScan 注解,扫描 Mapper 文件夹.

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

2)实体

创建包 entity 编写实体类 Users.java(此处使用了 Lombok 简化代码,使用了JPA自动生成表结构)

@Data
@Entity
public class Users {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY) //auto_increment类型
    private Long id;
    private String name;
    private Integer age;
    private String email;
}

3)编写Mapper

创建包 mapper 编写Mapper 接口: UsersMapper.java

public interface UsersMapper extends BaseMapper<Users> {

}

5.测试

插入以下测试数据:

INSERT INTO users (id, name, age, email) VALUES
(1, '张三', 18, 'test1@baomidou.com'),
(2, '李四', 20, 'test2@baomidou.com'),
(3, '王五', 28, 'test3@baomidou.com'),
(4, '赵六', 21, 'test4@baomidou.com'),
(5, '孙琦', 24, 'test5@baomidou.com');

创建UsersMapperTest.java测试类。

@RunWith(SpringRunner.class)
@SpringBootTest
public class UsersMapperTest {

    @Autowired
    private UsersMapper usersMapper;

    @Test

    public void testSelectList() {
        System.out.println(("----- selectAll method test ------"));
        //UserMapper 中的 selectList() 方法的参数为 MP 内置的条件封装器 Wrapper
        //所以不填写就是无任何条件
        List<Users> users = usersMapper.selectList(null);
        users.forEach(System.out::println);
    }
}

运行结果:
----- selectAll method test ------
Users(id=1, name=张三, age=18, email=test1@baomidou.com)
Users(id=2, name=李四, age=20, email=test2@baomidou.com)
Users(id=3, name=王五, age=28, email=test3@baomidou.com)
Users(id=4, name=赵六, age=21, email=test4@baomidou.com)
Users(id=5, name=孙琦, age=24, email=test5@baomidou.com)