Mybatis-plus简单配置及应用

时间:2022-11-04 05:13:43

mybatis-plus是由中国大神写的mybatis增强版,可以自动生成代码。
配置过程比较简单。首先引入两个maven依赖

    <dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus</artifactId>
<version>2.0.6</version>
</dependency>
<dependency>
<groupId>org.apache.velocity</groupId>
<artifactId>velocity</artifactId>
<version>1.7</version>
</dependency>

一个是mybatis-plus,另一个是它自动成成代码所依赖的模板引擎velocity。
然后将mybatis的sqlSeassionFactoryBean替换成plus增强版的,插件可以选择性配置

    <bean id="sqlSessionFactory" class="com.baomidou.mybatisplus.spring.MybatisSqlSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property value="classpath:/mybatis-config.xml" name="configLocation" />
<!-- 自动扫描mapping.xml文件 -->
<property name="mapperLocations" value="classpath:mapper/*.xml"></property>

<!-- MP 全局配置注入 -->
<property name="globalConfig" ref="globalConfig" />

<!-- 插件配置 -->
<property name="plugins">
<array>
<bean class="com.baomidou.mybatisplus.plugins.OptimisticLockerInterceptor" />
</array>
</property>
</bean>

mybatis-plus全局配置,主要是配置id生成策略,依赖数据库类型,

<bean id="globalConfig" class="com.baomidou.mybatisplus.entity.GlobalConfiguration">
<!-- 主键策略配置 -->
<!-- 可选参数 AUTO->`0`("数据库ID自增") INPUT->`1`(用户输入ID") ID_WORKER->`2`("全局唯一ID")
UUID->`3`("全局唯一ID") -->

<property name="idType" value="2" />

<!-- 数据库类型配置 -->
<property name="dbType" value="mysql" />

<!-- 全局表为下划线命名设置 true -->
<property name="dbColumnUnderline" value="true" />
</bean>

生成代码

public class MpGenerator {

/**
* <p>
* MySQL 生成演示
* </p>
*/

public static void main(String[] args) {
AutoGenerator mpg = new AutoGenerator();

// 全局配置\\Begin\\src\\main\\java
GlobalConfig gc = new GlobalConfig();
gc.setOutputDir("G:\\workspace");
gc.setFileOverride(true);
gc.setActiveRecord(true);
gc.setEnableCache(false);// XML 二级缓存
gc.setBaseResultMap(true);// XML ResultMap
gc.setBaseColumnList(true);// XML columList

gc.setOpen(false);
gc.setAuthor("XuWei");

// 自定义文件命名,注意 %s 会自动填充表实体属性!
gc.setMapperName("%sDao");
gc.setXmlName("%sMapper");
gc.setServiceName("%sService");
gc.setServiceImplName("%sServiceImpl");
gc.setControllerName("%sController");
mpg.setGlobalConfig(gc);

// 数据源配置
DataSourceConfig dsc = new DataSourceConfig();
dsc.setDbType(DbType.MYSQL);
dsc.setDriverName("com.mysql.jdbc.Driver");
dsc.setUrl("jdbc:mysql://localhost:3306/begin?useUnicode=true&amp;characterEncoding=UTF-8&amp;generateSimpleParameterMetadata=true");
dsc.setUsername("root");
dsc.setPassword("123");
mpg.setDataSource(dsc);

// 策略配置
StrategyConfig strategy = new StrategyConfig();
// strategy.setCapitalMode(true);// 全局大写命名 ORACLE 注意
strategy.setTablePrefix(new String[] { "t_", "tsys_" });// 此处可以修改为您的表前缀
strategy.setNaming(NamingStrategy.underline_to_camel);// 表名生成策略
strategy.setInclude(new String[] { "dept" }); // 需要生成的表
// strategy.setExclude(new String[]{"test"}); // 排除生成的表
mpg.setStrategy(strategy);

//默认是service、serviceImpl、controller都生成。在这里关闭他们
TemplateConfig tc = new TemplateConfig();
tc.setController(null);
mpg.setTemplate(tc);

// 生成文件路径
// PackageConfig pc = new PackageConfig();
// pc.setParent("com.xu");
// pc.setEntity("entity.plus");
// pc.setMapper("dao.plus");
// pc.setXml("mapper.plus");
// pc.setService("service.plus");
// pc.setServiceImpl("service.plus.impl");
// mpg.setPackageInfo(pc);

// 执行生成
mpg.execute();
}

这样代码生成到G:\workspace目录下面
和mybayis generator相比plus生成的代码映射文件xml,和dao层更加干净,通用的CRUD都通过dao类继承的BaseMapper来实现。
但是缺点也很明显,条件构造器不能像generator那样直接将表中的字段名称和pojo映射,所以需要自己写查询条件对应的字段名称。
如果要拼接这样一个查询条件( user_name = ? and password = ? ) or( id = ? and state = ? )
mybatis-plus条件构造

        EntityWrapper<User> ew = new EntityWrapper<>();
ew.eq("user_name", "向问天").eq("password", "sde");
ew.orNew("id", 3).eq("state", 2);

mybatis generator条件构造

        UserExample userExample = new UserExample();

userExample.createCriteria()
.andUserNameEqualTo("向问天")
.andPasswordEqualTo("sde");

userExample.or()
.andIdEqualTo(3)
.andStateEqualTo(2);
userExample.isDistinct();