Springboot集成Mybatis-plus

180人浏览

 MyBatis-Plus 官网:https://mp.baomidou.com 

与TkMybatis比较

都是对mybatis增强扩展,基本功能都是简化sql配置,集成代码生成器,支持乐观锁、分页、多数据源。

Mybatis-Plus(简称MP)是一个 Mybatis 的增强工具,在 Mybatis 的基础上只做增强不做改变,为简化开发、提高效率而生,这是官方给的定义。

MyBatis-Plus特性

  • 无侵入:基于mybatis只做增强不做改变,不会对现有工程产生影响。
  • 损耗小:自动注入基本CURD,性能基本无损耗。
  • CRUD:内置通用Mapper、Service,少量配置实现单表CRUD操作。
  • 支持 Lambda 形式调用:通过 Lambda 表达式编写各类查询条件。
  • 支持多种数据库:支持 MySQL、MariaDB、Oracle、DB2、H2、HSQL、SQLite、Postgre、SQLServer2005、SQLServer 等多种数据库。
  • 支持主键自动生成:支持多种主键策略。
  • 支持ActiveRecord模式:实体类只需继承Model类即可。
  • 支持关键词自动转义:支持数据库关键词(order、key......)自动转义。
  • 内置代码生成器:采用代码或者 Maven 插件可快速生成 Mapper 、 Model 、 Service 、 Controller 层代码,支持模板引擎。
  • 内置分页插件:基于MyBatis物理分页。
  • 内置性能分析插件:可输出 Sql 语句以及其执行时间,建议开发测试时启用该功能,能快速揪出慢查询。
  • 内置全局拦截插件:提供全表delete、 update操作智能分析阻断,也可自定义拦截规则。
  • 内置Sql注入剥离器:支持Sql注入剥离,预防Sql注入攻击。

引用mybatis-plus

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

配置注解

指定扫描Mapper存放位置,例如:

@MapperScan("oxingsoft.demo.mapper")

配置分页插件

@Configuration
public class MybatisPlusConfig {

	/**
	 * mybatis-plus分页插件
	 */
	@Bean
	public PaginationInterceptor paginationInterceptor() {
		PaginationInterceptor page = new PaginationInterceptor();
		page.setDialectType("mysql");
		return page;
	}

}

也可以同时使用pagehelper分页插件,分页查询代码写法不同。

Mapper写法

public interface UserDao extends BaseMapper<UserEntity>{

}

只须继承mybatis-plus提供的基类就自动实现了常用的CRUD方法。

Service写法

public interface UserService extends IService<UserEntity>{

}

Entity写法

@TableName(value = "user")
public class UserEntity {
	
	@TableId(value = "id", type = IdType.AUTO)
	private Long id;
	
	private String userName;
	
    //get/set 略... 

}

如果要实现ActiveRecord模式写法,实体类要稍做处理,继承一个Model类并重写pkVal()方法。

Controller写法

/**
 * 分页查询
 */
@RequestMapping(value="selectPage")
public Page<UserEntity> selectPage() {	
	Page<UserEntity> page=userDao.selectPage(new Page<>(1,10), new QueryWrapper<UserEntity>().eq("userName", "张三"));
	System.out.println("records:"+page.getRecords());
	return page;
}

/**
 * 新增用户
 */
@RequestMapping(value="insert")
public String insert() {
	UserEntity user=new UserEntity();
	user.setUserName("张三");
	userDao.insert(user); 
	return "insert success";
}

/**
 * 根据id修改用户
 */
@RequestMapping(value="updateById")
public String updateById(){
	UserEntity user=new UserEntity();
	user.setUserName("李四");
	user.setId(25L);
	userDao.updateById(user);
	return "update success";
}

/**
 * 根据id删除用户
 */
@RequestMapping(value="deleteById")
public String deleteById(Long id){
	userDao.deleteById(id);
	return "delete success";
}

//还有批量操作方法。。。

这里直接使用dao操作了,也可以通过service操作。

 

注意事项

  • mybatis-plus已经包含了mybatis,不要同时导入mybatis可能造成版本冲突。
  • mybatis的返回结果是数值,但是mybatis-plus返回是boolean类型,有点违反原则。
  • 实例类非字段属性要特殊处理(@TableField(exist = false)),否则报错。
  • 复杂的查询还是要尽量写SQL的,放在xml里配置,兼容mybatis的。