1. 程式人生 > >Mybatis-Plus來學習一下!程式碼生成、分頁外掛?

Mybatis-Plus來學習一下!程式碼生成、分頁外掛?

在這裡小小推薦下我的個人部落格

簡書:雷園的簡書

今天我們來說一下Mybatis-Plus!

個人認為呢,Mybatis-Plus是Mybatis的增強版,他只是在Mybatis的基礎上增加了功能,且並未對原有功能進行任何的改動。可謂是非常良心的一款開源產品,今天我就來給大家簡單的說一下以下幾個功能,以及程式碼實現。

開始前的準備

1.我們需要建立一個springboot專案,當然mybatis-plus並不僅限於springboot專案,其他專案也可以正常使用。新增如下依賴:

        <!-- velocity 模板引擎, 預設 -->
        <dependency
>
<groupId>org.apache.velocity</groupId> <artifactId>velocity-engine-core</artifactId> <version>2.0</version> </dependency> <!-- freemarker 模板引擎 --> <dependency> <groupId>
org.freemarker</groupId> <artifactId>freemarker</artifactId> <version>2.3.28</version> </dependency> <!-- lombok外掛 --> <dependency> <groupId>org.projectlombok</groupId> <artifactId
>
lombok</artifactId> <version>1.18.4</version> </dependency> <!-- mybatis-plus-boot-starter --> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.0.5</version> </dependency> <!-- druid 阿里巴巴資料來源 --> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.1.10</version> </dependency>

2.我們可以在IDEA中新增如下兩個外掛方便我們後續開發!lombok以及MybatisX。進入File -> Settings -> Plugins -> Browse Repositories,然後分別搜尋即可新增。

新增lombok外掛以及依賴後,我們的實體類可以這樣寫:

package com.leiyuan.entity;
import lombok.Data;
import lombok.experimental.Accessors;
/**
 * <p>
 * </p>
 * @author 來自底層程式設計師的仰望
 * @since 2018-11-14
 */
@Data 
public class User{
    private static final long serialVersionUID = 1L;
    private Integer id;
    private String name;
    private String email;
    private String phone;
    private String password;
    private Integer age;
    private String sex;
    private Integer state;
}

在新增**@Data**註解後呢我們可以省略所有封裝方法,這樣即使我們頻繁的改動屬性的型別或者名稱,都無需重新生成封裝方法。為我們節省了大量的時間。是不是很方便呢!

而MybatisX呢是用於Java 與 XML 調回跳轉、Mapper 方法自動生成 XML 。以前我們在寫mapper的時候呢,都是在mapper.java中定義好方法,然後手動跳轉到mapper.xml中去寫sql。那麼在使用了MybatisX之後呢,我們在編寫mapper.java的時候呢,在左側可以看到Mybatis的小鳥標誌。點選就可以進入到對應的方法中,也可以使用control+滑鼠左鍵進行跳轉了。並且它會像介面與實現類的關係,自動為你生成程式碼,非常方便。

螢幕快照 2018-11-14 下午2.31.00

螢幕快照 2018-11-14 下午2.31.20

程式碼生成

編寫如下測試類或者main方法,並執行就可以了:

	public static void main(String[] args) {
        // 程式碼生成器
        AutoGenerator mpg = new AutoGenerator();
        // 全域性配置
        GlobalConfig gc = new GlobalConfig();
        String projectPath = System.getProperty("user.dir");
        gc.setOutputDir(projectPath + "/src/main/java");
        gc.setAuthor("來自底層程式設計師的仰望");
        gc.setOpen(false);
        mpg.setGlobalConfig(gc);
        // 資料來源配置
        DataSourceConfig dsc = new DataSourceConfig();
        dsc.setUrl("jdbc:mysql://yourHost:3306/test?useUnicode=true&useSSL=false&characterEncoding=utf8");
        dsc.setSchemaName("public");
        dsc.setDriverName("com.mysql.jdbc.Driver");
        dsc.setUsername("yourUsername");
        dsc.setPassword("yourPassword");
        mpg.setDataSource(dsc);
        // 包配置
        PackageConfig pc = new PackageConfig();
        pc.setParent("yourPackageName");
        mpg.setPackageInfo(pc);
        // 自定義配置
        InjectionConfig cfg = new InjectionConfig() {
            @Override
            public void initMap() {
                // to do nothing
            }
        };
        List<FileOutConfig> focList = new ArrayList<>();
        focList.add(new FileOutConfig("/templates/mapper.xml.ftl") {
            @Override
            public String outputFile(TableInfo tableInfo) {
                // 自定義輸入檔名稱
                return projectPath + "/src/main/resources/mapper/" + tableInfo.getEntityName() + "Mapper" +
                        StringPool.DOT_XML;
            }
        });
        cfg.setFileOutConfigList(focList);
        mpg.setCfg(cfg);
        mpg.setTemplate(new TemplateConfig().setXml(null));
        // 策略配置
        StrategyConfig strategy = new StrategyConfig();
        strategy.setNaming(NamingStrategy.underline_to_camel);
        strategy.setColumnNaming(NamingStrategy.underline_to_camel);
        // 是否啟用lombok
        strategy.setEntityLombokModel(true);
        strategy.setRestControllerStyle(true);
        // 需要自動生成的表名
        strategy.setInclude("user","center");
        strategy.setControllerMappingHyphenStyle(true);
        strategy.setTablePrefix(pc.getModuleName() + "_");
        mpg.setStrategy(strategy);
        mpg.setTemplateEngine(new FreemarkerTemplateEngine());
        mpg.execute();
    }

原始碼在官網可以找到,直接複製貼上,改一下包名、表名就可以了,是不是非常簡單呢,專案結構如下圖螢幕快照 2018-11-14 下午2.48.50

自動分頁

1.首先配置分頁外掛,編寫配置類PageConfig.java

package com.config;
import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.transaction.annotation.EnableTransactionManagement;
//Spring boot方式
@EnableTransactionManagement
@Configuration
@MapperScan("com.leiyuan.mapper*")
public class PageConfig {
    /**
     * 分頁外掛
     */
    @Bean
    public PaginationInterceptor paginationInterceptor() {
        return new PaginationInterceptor();
    }
}

2.在mapper.java中編寫如下介面

// 導包如下:
// import com.baomidou.mybatisplus.core.metadata.IPage;
// import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
IPage<User> queryAll(Page page);

3.在mapper.xml中實現普通的查詢語句即可,這裡以全查為例

<select id="queryAll" resultType="com.entity.User">
    select * from user
</select>

4.編寫test類進行測試,在這裡我們就省略service層的程式碼了。

@RunWith(SpringRunner.class)
@SpringBootTest
public class TestMybatisPlusApplicationTests {
    @Autowired
    private UserMapper userMapper;
    @Test
    public void contextLoads() {
        Page<User> userPage = new Page<>();
        // 當前頁
        userPage.setCurrent(2);
        // 每頁數量
        userPage.setSize(2);
        System.out.println(userMapper.queryAll(userPage).getRecords().toString());
    }
}

5.如上便是分頁的程式碼啦,與前臺的互動,相信大家沒有問題的,這裡就不再贅述了。

結束語

非常感謝大家的關注,文章有任何問題,大家都可以私信或者評論告訴我,小弟不才只能淺顯的說一些應用的方式方法,底層的東西還要大家自己深入的研究!技術永無止境,各位努力!!!