Springboot集成Mybatis-plus

 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的。

 

Springboot集成Shiro实现身份认证和权限控制 Java链式调用定义与用法
微信公众号