关于java:SpringBoot整合MybatisPlus

41次阅读

共计 3517 个字符,预计需要花费 9 分钟才能阅读完成。

1. 创立我的项目导入依赖

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

2. 配置文件

application.properties 配置文件中连贯数据库

spring.datasource.url=jdbc:mysql://localhost:3306/tedu_ums?useUnicode=true&characterEncoding=utf-8&useSSL=true&serverTimezone=Asia/Shanghai
spring.datasource.username=root
spring.datasource.password=root

application.yml 配置文件中连贯数据库

spring:
 datasource:
 url: jdbc:mysql://localhost:3306/tedu_ums?useUnicode=true&characterEncoding=utf-8&useSSL=true&serverTimezone=Asia/Shanghai
 username: root
 password: root

3. 创立 UserMapper 接口

3.1 创立 UserMapper 接口

在 Mybatis02Application 启动类所在包下创立子包 mapper, 并在子包中创立咱们的 UserMapper 接口

3.2 增加 @Mapper 注解

在接口上增加 @Mapper 注解, 将其交给 Spring 去治理

3.3 继承 BaseMapper 接口

让 UserMapper 继承咱们 MybatisPlus 中的 BaseMapper 接口, 并标准好泛型(这里的泛型个别对应咱们的实体类的类型), 这样咱们一些简略的增删改查语句就不须要咱们本人去实现了, 间接能够调用咱们 BaseMapper 中曾经写好的办法

@Mapper
public interface UserMapper extends BaseMapper<User> {}

4. 测试

在 test 包下创立一个测试类, 并且在测试类上必须增加一个 @SpringBootTest 注解, 在测试类中写一个测试方法, 测试方法上增加一个 @Test 注解
注入咱们 UserMapper 对象, 并调用咱们继承自 MybatisPlus 中 BaseMapper 的 insert()

@SpringBootTest
public class UserMapperTests {
    @Autowired
    UserMapper userMapper;
    @Test
    void save(){User user = new User();
        user.setId(26);
        user.setUsername("张三");
        user.setPassword("123456");
        user.setAge(18);
        user.setPhone("13888880088");
        user.setEmail("zhangsan@163.com");
        userMapper.insert(user);
    }
}

5.BaseMapper

BaseMapper 中提供了很多咱们罕用简略的增删改查语句, 简化了咱们的开发, 源码如下:

public interface BaseMapper<T> extends Mapper<T> {int insert(T entity);
    int deleteById(Serializable id);
    int deleteByMap(@Param("cm") Map<String, Object> columnMap);
    int delete(@Param("ew") Wrapper<T> wrapper);
    int deleteBatchIds(@Param("coll") Collection<? extends Serializable> idList);
    int updateById(@Param("et") T entity);
    int update(@Param("et") T entity, @Param("ew") Wrapper<T> updateWrapper);
    T selectById(Serializable id);
    List<T> selectBatchIds(@Param("coll") Collection<? extends Serializable> idList);
    List<T> selectByMap(@Param("cm") Map<String, Object> columnMap);
    T selectOne(@Param("ew") Wrapper<T> queryWrapper);
    Integer selectCount(@Param("ew") Wrapper<T> queryWrapper);
    List<T> selectList(@Param("ew") Wrapper<T> queryWrapper);
    List<Map<String, Object>> selectMaps(@Param("ew") Wrapper<T> queryWrapper);
    List<Object> selectObjs(@Param("ew") Wrapper<T> queryWrapper);
    <E extends IPage<T>> E selectPage(E page, @Param("ew") Wrapper<T> queryWrapper);
    <E extends IPage<Map<String, Object>>> E selectMapsPage(E page, @Param("ew") Wrapper<T> queryWrapper);
}

6. 注意事项

6.1 实体类名与数据库表名不统一

6.1.1 通过配置类来解决

例如: 如果咱们实体类为 User, 而对应的咱们数据库中的表为 user, 这时咱们不须要做任何更改,MybatisPlus 会通过映射关系帮忙咱们主动定位到咱们的 user 表
而如果咱们实体类为 User, 而对应的咱们数据库中的表为 t_user, 须要咱们在配置文件中配置表前缀, 内容如下:

mybatis-plus.global-config.db-config.table-prefix=t_

当然这样可能不够灵便所以咱们还能够通过注解的形式来达到同样的目标

6.1.2 通过注解来解决

咱们能够通过 @TableName 注解将咱们的实体类与数据库中的表映射起来达到雷同的目标.
例如:

@Data
@TableName("t_user")
public class User {
    private Integer id;
    private String username;
    private String password;
    private String email;
    private Integer age;
    private String phone;
}

6.2 属性名与表中字段名不统一

6.2.1 通过配置类来解决

例如:

当属性与表字段的对应关系如图所示时, 咱们能够通过配置类解决这样的问题咱们称为驼峰映射

mybatis-plus.configuration.map-underscore-to-camel-case=true

当然开启驼峰映射解决的问题比拟局限, 所以咱们也能够通过注解的模式来解决这一类问题

6.2.2 通过注解来解决

咱们能够通过 @TableId/@TableField 等注解将咱们的实体类属性与数据库表字段映射起来达到雷同的目标.

@Data
@TableName("t_user")
public class User {@TableId(value = "id", type = IdType.AUTO)
    private Integer id;
    @TableField("username")
    private String username;
    @TableField("password")
    private String password;
    @TableField("email")
    private String email;
    @TableField("age")
    private Integer age;
    @TableField("phone")
    private String phone;
}

正文完
 0