基本配置
导入依赖 < 使用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的基本使用步骤