Mybatis助手之Mybatis-Plus——开始使用

转载自http://nihao-shijie.lofter.com/post/1cd58fc5_ceadf90

Mybatis-Plus 是 Mybatis 最得力的助手,只做增强不做改变,为简化开发、提高效率而生。

先介绍一下Mybatis-Plus

优点

  • 纯正血统:完全继承原生 Mybatis 的所有特性

  • 最少依赖:仅仅依赖Mybatis以及Mybatis-Spring

  • 性能损耗小:启动即会自动注入基本CURD ,性能无损耗,直接面向对象操作

  • 自动热加载:Mapper对应的xml可以热加载,大大减少重启Web服务器时间,提升开发效率

  • 自动生成代码:包含自动生成代码类以及Maven插件,通过少量配置,即可快速生成Mybatis对应的xml、mapper、entity、service、serviceimpl层代码,减少开发时间

  • 自定义操作:支持自定义Sql注入,实现个性化操作

  • 自定义转义规则:支持数据库关键词(例如:order、key等)自动转义,支持自定义关键词

  • 多种主键策略:支持多达4种主键策略,可自由配置,若无将会自动填充,更有充满黑科技的分布式全局唯一ID生成器

  • 无缝分页插件:基于Mybatis物理分页,无需关心具体操作,等同于编写基本selectList查询

  • 性能分析:自带Sql性能分析插件,开发测试时,能有效解决慢查询

  • 全局拦截:提供全表delete、update操作智能分析阻断

  • 避免Sql注入:内置Sql注入内容剥离器,预防Sql注入攻击

MP自带了代码生成器,包含代码生成类和Maven插件,你可以灵活的调整生成代码的方式。

进行开发你需要做什么呢?你仅仅需要配置好数据库和代码生成路径,然后生成代码就可以开撸Controller层代码了,MP已经把 Entity层、Mapper层、Service层的代码以及Mapper对应的XML文件生成好了!

我们来看看生成后的代码是什么样子:

示例中,我们假设有一张表叫foo,里面包含id和name两个字段,通过MP来生成代码

Foo.java

/**

 *

 * Foo表

 *

 */

@TableName("foo")

public class Foo implements Serializable {

    @TableField(exist = false)

    protected static final long serialVersionUID = 1L;

    /** ID */

    @TableId

    protected Long id;

    /** 名称 */

    protected String name;

    public Long getId() {

        return this.id;

    }

    public void setId(Long id) {

        this.id = id;

    }

    public String getName() {

        return this.name;

    }

    public void setName(String name) {

        this.name = name;

    }

}

FooMapper.java

/**

 *

 * Foo 表数据库控制层接口

 *

 */

public interface FooMapper extends AutoMapper<Foo> {

}

FooMapper.xml

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="com.xxx.mapper.FooMapper">

    <!-- 通用查询结果列-->

    <sql id="Base_Column_List">

         id, name

    </sql>

</mapper>

FooService.java

/**

 *

 * Foo 表数据服务层接口

 *

 */

public interface IFooService extends ISuperService<Foo> {

}

FooServiceImpl.java

/**

 *

 * Foo 表数据服务层接口实现类

 *

 */

@Service

public class FooServiceImpl extends SuperServiceImpl<FooMapper, Foo> implements IFooService {

}

纳尼?!!怎么可以这么简洁?!!xml怎么什么东西都没有?!!

对,你没有看错,这就是MP生成代码,非常的简洁而且还生成了对应的注释(备注:实体类字段的注释需要在数据库设计的时候就填写好备注),要是你喜欢,甚至可以配置为无xml(如果不进行扩展,只需要基本CRUD的话)。

AutoMapper<T>方法说明

你可以看到MP采用了继承的方式来提取CRUD方法,那么我们到底有哪些方法呢?

 

insert相关

boolean insert(T entity); //插入

boolean insertSelective(T entity); //选择性插入,null字段不插入

boolean insertBatch(List<T> entityList); //批量插入

delete相关

boolean deleteById(I id); //通过ID删除

boolean deleteByMap(Map<String, Object> columnMap); // 通过自定义MAP删除

boolean deleteSelective(T entity); //通过entity实体选择性删除,null字段不作为条件

boolean deleteBatchIds(List<I> idList); //批量删除

update相关

boolean updateById(T entity); //通过ID更新

boolean updateSelectiveById(T entity); //通过ID选择性更新,null字段不更新

boolean update(T entity, T whereEntity); //通过whereEntity实体构造where条件进行更新

boolean updateSelective(T entity, T whereEntity); //通过whereEntity实体构造where条件进行选择性更新

boolean updateBatchById(List<T> entityList); //批量更新

select相关

T selectById(I id); //通过ID查询

List<T> selectBatchIds(List<I> idList); //通过ID集合批量查询

List<T> selectByMap(Map<String, Object> columnMap); //通过自定义MAP查询

T selectOne(T entity); //通过实体entity查询

int selectCount(T entity); //统计查询

List<T> selectList(EntityWrapper<T> entityWrapper); //List查询,entityWrapper为查询条件构造器

Page<T> selectPage(Page<T> page, EntityWrapper<T> entityWrapper); //分页查询,page为分页实体,entityWrapper为查询条件构造器


只要生成了代码,就已经带有上述的所有方法,单表的CRUD已经完全能够满足了。

你也许会问,那多表或者复杂业务怎么办?之前说了,MP是一个增强辅助工具,不会改变Mybatis,如果有多表业务和复杂业务,就可以像正常Mybatis一样使用,没有任何冲突。


了解更多


猜你喜欢

转载自blog.csdn.net/u012240455/article/details/80868666