栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java > SpringBoot

SpringBoot | 第九章:Mybatis-plus的集成和使用

SpringBoot 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

SpringBoot | 第九章:Mybatis-plus的集成和使用

前言

本章节开始介绍数据访问方面的相关知识点。对于后端开发者而言,和数据库打交道是每天都在进行的,所以一个好用的ORM框架是很有必要的。目前,绝大部分公司都选择MyBatis框架作为底层数据库持久化框架。

多说几句

看着现在Mybatis框架的大行其道,让我不禁想起,大学时期,当时还是hibernate的时代,现在基本已经忘记了。而当时,Mybatis的前身iBatis还在书中的某个章节出现过。当时大学老师的意思是:目前国内基本没有使用iBatis的公司,所以这一章节略过,略,过。。。现在对这个还记忆犹新,看着现在Mybatis大行其道,不禁令人唏嘘呀。

Mybatis-Plus

Mybatis-Plus(简称MP)是一个 Mybatis 的增强工具,在 Mybatis 的基础上只做增强不做改变,为简化开发、提高效率而生。

官方网站:http://mp.baomidou.com

简单来说,Mybatis-Plus是Mybatis的增强工具包,其简化了CRUD操作,提供了代码生成器,强大的条件构造器(这是我最喜欢的一个),同时内置了多个实用插件:标配的分页插件、性能分析插件、全局拦截插件等。使得开发过程中,基本的范式代码都一句话解决了,省去了很多重复的操作(程序猿存在的意义呢,说好的让我们搬砖呢!)。

SpringBoot集成

这里选用的mybatis-plus版本为:2.1.9,
mybatisplus-spring-boot-starter版本为:1.0.5。
对应Mybatis版本为:3.4.5

0. 这里以user表为例子,数据库为mysql

DROP TABLE IF EXISTS `user`;CREATE TABLE `user` (  `id` bigint(20) DEFAULT NULL COMMENT '唯一标示',  `code` varchar(20) DEFAULT NULL COMMENT '编码',  `name` varchar(64) DEFAULT NULL COMMENT '名称',  `status` char(1) DEFAULT '1' COMMENT '状态 1启用 0 停用',  `gmt_create` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',  `gmt_modified` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间') ENGINE=InnoDB DEFAULT CHARSET=utf8;

1. pom依赖:

  
    
        com.baomidou
        mybatisplus-spring-boot-starter
        1.0.5
    
    
        com.baomidou
        mybatis-plus
        2.1.9
    

2. 配置文件(当然也可以直接使用@Bean的方式进行或者通过application配置文件进行,详见官网)
**spring-mybatis.xml **



    
    
        
        
        
        
        
        
        
        
        
        
        
        
        
        

        
        
        
        

        
        
        
        

        
        
        
        
        
        

        
        
    

    
    
        
    

    
    

    
    
        
        
        
        
        
        
        
        
        
    
    
        
        
    
    
    
        
    

3. 编写启动类,应用启动时自动加载配置xml文件

@Configuration@importResource(locations = {"classpath:/mybatis/spring-mybatis.xml"})//@MapperScan("cn.lqdev.learning.springboot.chapter9.biz.dao")//@EnableTransactionManagementpublic class MybatisPlusConfig {

}

至此,mybatis-plus就配置完成了,接下来,利用代码生成器一次性创建所需的dao、mapper、通用CRUDservice类。
**4. 编写代码生成器类 **
由于生成器依赖velocity模版引擎,故需要加入依赖:

    
        org.apache.velocity
        velocity-engine-core
        2.0
        test
    

MysqlGenerator,此类较长,相关配置可根据实际情况信息修改替换。

public class MysqlGenerator {    private static final String PACKAGE_NAME = "cn.lqdev.learning.springboot.chapter9";    private static final String MODULE_NAME = "biz";    private static final String OUT_PATH = "D:\develop\code";    private static final String AUTHOR = "oKong";    private static final String DRIVER = "com.mysql.jdbc.Driver";    private static final String URL = "jdbc:mysql://127.0.0.1:3306/learning?useUnicode=true&characterEncoding=UTF-8";    private static final String USER_NAME = "root";    private static final String PASSWORD = "123456";    
    public static void main(String[] args) {        // 自定义需要填充的字段
        List tableFillList = new ArrayList();        // 代码生成器
        AutoGenerator mpg = new AutoGenerator().setGlobalConfig(                // 全局配置
                new GlobalConfig().setOutputDir(OUT_PATH)// 输出目录
                        .setFileOverride(true)// 是否覆盖文件
                        .setActiveRecord(true)// 开启 activeRecord 模式
                        .setEnableCache(false)// XML 二级缓存
                        .setbaseResultMap(false)// XML ResultMap
                        .setbaseColumnList(true)// XML columList
                        .setAuthor(AUTHOR)                        // 自定义文件命名,注意 %s 会自动填充表实体属性!
                        .setXmlName("%sMapper").setMapperName("%sDao")        // .setServiceName("MP%sService")
        // .setServiceImplName("%sServiceDiy")
        // .setControllerName("%sAction")
        ).setDataSource(                // 数据源配置
                new DataSourceConfig().setDbType(DbType.MYSQL)// 数据库类型
                        .setTypeConvert(new MySqlTypeConvert() {                            // 自定义数据库表字段类型转换【可选】
                            @Override
                            public DbColumnType processTypeConvert(String fieldType) {
                                System.out.println("转换类型:" + fieldType);                                // if ( fieldType.toLowerCase().contains( "tinyint" ) ) {
                                // return DbColumnType.BOOLEAN;
                                // }
                                return super.processTypeConvert(fieldType);
                            }
                        }).setDriverName(DRIVER).setUsername(USER_NAME).setPassword(PASSWORD).setUrl(URL))
                .setStrategy(                        // 策略配置
                        new StrategyConfig()                                // .setCapitalMode(true)// 全局大写命名
                                .setDbColumnUnderline(true)// 全局下划线命名
                                // .setTablePrefix(new String[]{"unionpay_"})// 此处可以修改为您的表前缀
                                .setNaming(NamingStrategy.underline_to_camel)// 表名生成策略
                                // .setInclude(new String[] {"citycode_org"}) // 需要生成的表
                                // .setExclude(new String[]{"test"}) // 排除生成的表
                                // 自定义实体,公共字段
                                // .setSuperEntityColumns(new String[]{"test_id"})
                                .setTableFillList(tableFillList)                                // 自定义实体父类
                                // .setSuperEntityClass("com.baomidou.demo.common.base.BsbaseEntity")
                                // // 自定义 mapper 父类
                                // .setSuperMapperClass("com.baomidou.demo.common.base.BsbaseMapper")
                                // // 自定义 service 父类
                                // .setSuperServiceClass("com.baomidou.demo.common.base.BsbaseService")
                                // // 自定义 service 实现类父类
                                // .setSuperServiceImplClass("com.baomidou.demo.common.base.BsbaseServiceImpl")
                                // 自定义 controller 父类
                                // .setSuperControllerClass("com.baomidou.demo.TestController")
                                // 【实体】是否生成字段常量(默认 false)
                                // public static final String ID = "test_id";
                                .setEntityColumnConstant(true)                                // 【实体】是否为构建者模型(默认 false)
                                // public User setName(String name) {this.name = name; return this;}
                                .setEntityBuilderModel(true)                                // 【实体】是否为lombok模型(默认 false)document
                                .setEntityLombokModel(true)                // Boolean类型字段是否移除is前缀处理
                // .setEntityBooleanColumnRemoveIsPrefix(true)
                // .setRestControllerStyle(true)
                // .setControllerMappingHyphenStyle(true)
                ).setPackageInfo(                        // 包配置
                        new PackageConfig().setModuleName(MODULE_NAME).setParent(PACKAGE_NAME)// 自定义包路径
                                .setController("controller")// 这里是控制器包名,默认 web
                                .setXml("mapper").setMapper("dao")

                ).setCfg(                        // 注入自定义配置,可以在 VM 中使用 cfg.abc 设置的值
                        new InjectionConfig() {                            @Override
                            public void initMap() {
                                Map map = new HashMap();
                                map.put("abc", this.getConfig().getGlobalConfig().getAuthor() + "-mp");                                this.setMap(map);
                            }
                        }.setFileOutConfigList(
                                Collections.singletonList(new FileOutConfig("/templates/mapper.xml.vm") {                                    // 自定义输出文件目录
                                    @Override
                                    public String outputFile(TableInfo tableInfo) {                                        return OUT_PATH + "/xml/" + tableInfo.getEntityName() + "Mapper.xml";
                                    }
                                })))
                .setTemplate(                        // 关闭默认 xml 生成,调整生成 至 根目录
                        new TemplateConfig().setXml(null)        // 自定义模板配置,模板可以参考源码 /mybatis-plus/src/main/resources/template 使用 copy
        // 至您项目 src/main/resources/template 目录下,模板名称也可自定义如下配置:
        // .setController("...");
        // .setEntity("...");
        // .setMapper("...");
        // .setXml("...");
        // .setService("...");
        // .setServiceImpl("...");
        );        // 执行生成
        mpg.execute();
    }

}

运行后即可,省了多少事!

image



作者:oKong
链接:https://www.jianshu.com/p/37116a6f110f


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/235455.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号