Springoot 整合 MyBatisPlus

基本配置

导入依赖 < 使用lombok记得下载lombok插件 >

        <!-- MyBatisPlus启动器 -->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.5.2</version>
        </dependency>

        <!-- MySQL 驱动 -->
        <dependency>
            <groupId>com.mysql</groupId>
            <artifactId>mysql-connector-j</artifactId>
            <scope>runtime</scope>
        </dependency>

        <!--lombok用于简化实体类开发-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>

配置数据源

spring:
  datasource:
      driver-class-name: com.mysql.cj.jdbc.Driver
      url: jdbc:mysql://localhost:3306/databaseName?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=UTC&serverTimezone=GMT%2B8
      username: root
      password: root

创建实体类,其中的 @TableName(“tab_book”)中传入数据库表的表名,做实体类和表的映射

还用很多实体类注解,可以参考我的另外一篇博客,地址如下

MyBatisPlus - 实体类 的 常用注解

@TableName("tab_book")
@Data
public class Book {
    private Integer id;
    private String name;
    private String type;
    private String description;
}

创建Dao接口,区别于MyBatis – 在Dao内部不用写方法,直接继承BassMapper,泛型中传入Book实体类

@Mapper
public interface BookDao extends BaseMapper<Book> {
}

查看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> queryWrapper);

    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);
}

接下来就可以在SpringBoot的测试类中测试使用

@SpringBootTest
class SpringBootProjectApplicationTests {

    @Autowired
    private BookDao bookDao;
    @Test
    void testSave() {
        Book book = new Book();
        book.setId(1);
        book.setName("测试数据");
        book.setType("测试类型");
        book.setDescription("测试描述数据");
        bookDao.insert(book);
    }
    @Test
    void testGetById() {
        System.out.println(bookDao.selectById(1));
    }

}

先运行 testSave ,再运行 testGetById ,输出如下

Book(id=1, name=测试数据, type=测试类型, description=测试描述数据)

到这一步最简单的MyBatisPlus整合就完成了,接下来做更深入的学习

MyBatisPlus加入日志功能(控制台输出)

再配置文件中添加

#配置mybatisPlus日志
mybatis-plus:
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

再次执行 testGetById 输出的日志结果如下:

JDBC Connection [HikariProxyConnection@475157807 wrapping com.mysql.cj.jdbc.ConnectionImpl@5dc769f9] will not be managed by Spring
==>  Preparing: SELECT id,name,type,description FROM tab_book WHERE id=?
==> Parameters: 1(Integer)
<==    Columns: id, name, type, description
<==        Row: 1, 测试数据, 测试类型, 测试描述数据
<==      Total: 1
Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@49cb1baf]

通用Service接口

MyBatisPlus不仅为我们提供了通用的Dao接口(BaseMapper)

还提供了通用Service接口 – IService

创建Service接口,继承了IService接口,泛型传入实体类

public interface BookService extends IService<Book> {  
}

创建 ServiceImpl实现类,继承ServiceImpl父类 <其中传入的第一个泛型是Dao接口,第二个是实体类>,并实现 BookService

@Service
public class BookServiceImpl extends ServiceImpl<BookDao, Book> implements BookService {
}

以下是IService中的部分较为常用的方法,我们发现,方法名和sql的对应关系如下

  • delete - > remove
  • update- > update
  • select- > get
  • insert- > save
    default boolean removeById(Serializable id) {
        return SqlHelper.retBool(this.getBaseMapper().deleteById(id));
    }
	
    default boolean updateById(T entity) {
        return SqlHelper.retBool(this.getBaseMapper().updateById(entity));
    }
 
    default T getById(Serializable id) {
        return this.getBaseMapper().selectById(id);
    }  

    default boolean save(T entity) {
        return SqlHelper.retBool(this.getBaseMapper().insert(entity));
    }

改写Springboot测试类,如下

@SpringBootTest
class SpringBootProjectApplicationTests {

    @Autowired
    private BookService bookService;

    @Test
    void testGetById() {
        System.out.println(bookService.getById(1));
    }

}

结果同样能查询出 id 为 1 的书本数据

条件构造器

在实际开发场景中,经常会出现如下情况

select * from tab_book where name='书名1' or type='类型01';

我们再看

BaseMapper 中的查询方法 List<T> selectList(@Param("ew") Wrapper<T> queryWrapper);

IService 中的查询方法 T getOne(Wrapper<T> queryWrapper, boolean throwEx);

其中都有一个参数 Wrapper queryWrapper

我们可以联想到 ,我们需要将查询条件封装在 Wrapper 的对象中,才能进行条件查询,这个 Wrapper 对象就是 条件构造器

关于条件构造器可以参考我的另外一篇博客,地址如下:

MyBatisPlus 之 条件查询 <条件构造器>

以上就是SpringBoot 整合 MyBatisPlus 的基本步骤,以及MyBatisPlus的基本使用步骤

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值