1. 程式人生 > >Mybatis-plus簡單配置及應用

Mybatis-plus簡單配置及應用

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();