SpringBoot整合MyBatis-Plus(附源码)

SpringBoot整合MyBatis-Plus

代码生成器

1.添加依赖

<dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid-spring-boot-starter</artifactId>
            <version>1.1.10</version>
        </dependency>
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.1.0</version>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <!-- mybatis plus 代码生成器依赖 -->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-generator</artifactId>
            <version>3.1.0</version>
        </dependency>
        <!-- 代码生成器模板 -->
        <dependency>
            <groupId>org.freemarker</groupId>
            <artifactId>freemarker</artifactId>
        </dependency>

2.配置

@Configuration
public class DataSourceConfig {

    @Bean(name = "dataSource")
    @ConfigurationProperties(prefix = "spring.datasource")
    public DataSource dataSource(){
        return  new DruidDataSource();
    }

    // 配置事物管理器
    @Bean(name="transactionManager")
    public DataSourceTransactionManager transactionManager(){
        return new DataSourceTransactionManager(dataSource());
    }
}
@Configuration
//扫描dao或者是Mapper接口
@MapperScan("com.springmybatis.spring.mybatis.mapper*")
public class MybatisPlusConfig {
    /**
     * mybatis-plus 分页插件
     */

    @Bean
    public PaginationInterceptor paginationInterceptor(){
        PaginationInterceptor page = new PaginationInterceptor();
        page.setDialectType("mysql");
        return page;
    }

}

3.编写代码生成方法

public class MpGenerator {
    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("root");
        gc.setOpen(true);
        // service 命名方式
        gc.setServiceName("%sService");
        // service impl 命名方式
        gc.setServiceImplName("%sServiceImpl");
        // 自定义文件命名,注意 %s 会自动填充表实体属性!
        gc.setMapperName("%sDao");
        gc.setXmlName("%sMapper");
        gc.setFileOverride(true);
        gc.setActiveRecord(true);
        // XML 二级缓存
        gc.setEnableCache(false);
        // XML ResultMap
        gc.setBaseResultMap(true);
        // XML columList
        gc.setBaseColumnList(false);
        mpg.setGlobalConfig(gc);


        DataSourceConfig dsc = new DataSourceConfig();
        dsc.setUrl("jdbc:mysql://localhost:3306/miaosha?useUnicode=true&useSSL=false&characterEncoding=utf8&serverTimezone=GMT%2B8");
        dsc.setDriverName("com.mysql.cj.jdbc.Driver");
        dsc.setUsername("root");
        dsc.setPassword("123456");
        mpg.setDataSource(dsc);


        PackageConfig pc = new PackageConfig();
        pc.setParent("com.springmybatis.spring.mybatis");//项目的包名
        pc.setEntity("entity");// 实体类
        pc.setService("service");//接口包
        pc.setMapper("mapper");//dao层
        pc.setServiceImpl("serviceImpl");//实现类
        mpg.setPackageInfo(pc);


        StrategyConfig strategy = new StrategyConfig();
        strategy.setNaming(NamingStrategy.underline_to_camel);
        strategy.setColumnNaming(NamingStrategy.underline_to_camel);
        strategy.setEntityLombokModel(true);


        // 设置逻辑删除键
        strategy.setLogicDeleteFieldName("deleted");
        // TODO 指定生成的bean的数据库表名
        strategy.setInclude("goods");
        //strategy.setSuperEntityColumns("id");
        // 驼峰转连字符
        strategy.setControllerMappingHyphenStyle(true);
        mpg.setStrategy(strategy);
        // 选择 freemarker 引擎需要指定如下加,注意 pom 依赖必须有!
        mpg.setTemplateEngine(new FreemarkerTemplateEngine());
        mpg.execute();

    }
}

执行main方法后即可看到生成的项目结构。需要注意的是,要把mapper下生成的.xml文件手动移动到resource下的mapper目录下。
在这里插入图片描述
项目源码地址:https://gitee.com/CodersCode/mybatis-plus-test

测试CRUD

表结构和表信息:
在这里插入图片描述
简单基本查询:

@RunWith(SpringRunner.class)
@SpringBootTest
public class SimpleTest {

    @Autowired
    private GoodsDao goodsDao;
    @Test
    public void select(){
        List<Goods> goods = goodsDao.selectList(null);
        goods.forEach(System.out::println);
    }
}

@Test
    public void insert(){
        Goods goods = new Goods();
        goods.setId(10l);
        goods.setGoodsTitle("test good title");
        goods.setGoodsStock(12);
        goods.setGoodsDetail("test good detail");
        goods.setGoodsImg("test good img");
        goods.setGoodsName("test good name");
        goods.setGoodsPrice(BigDecimal.valueOf(100));
        int insert = goodsDao.insert(goods);

        System.out.println("insert ok");
    }

启动查看输出:

2020-06-06 15:54:43.594  INFO 5280 --- [           main] com.alibaba.druid.pool.DruidDataSource   : {dataSource-1} inited
2020-06-06 15:54:44.562  INFO 5280 --- [           main] o.s.s.concurrent.ThreadPoolTaskExecutor  : Initializing ExecutorService 'applicationTaskExecutor'
2020-06-06 15:54:45.007  INFO 5280 --- [           main] c.s.spring.mybatis.SimpleTest            : Started SimpleTest in 3.383 seconds (JVM running for 4.617)

Goods(id=1, goodsName=iphoneX, goodsTitle=Apple iPhone X (A1865) 64GB 银色 移动联通电信4G手机, goodsImg=/img/iphonex.png, goodsDetail=Apple iPhone X (A1865) 64GB 银色 移动联通电信4G手机, goodsPrice=8765.00, goodsStock=10000)
Goods(id=2, goodsName=华为Meta9, goodsTitle=华为 Mate 9 4GB+32GB版 月光银 移动联通电信4G手机 双卡双待, goodsImg=/img/meta10.png, goodsDetail=华为 Mate 9 4GB+32GB版 月光银 移动联通电信4G手机 双卡双待, goodsPrice=3212.00, goodsStock=-1)
Goods(id=3, goodsName=iphone8, goodsTitle=Apple iPhone 8 (A1865) 64GB 银色 移动联通电信4G手机, goodsImg=/img/iphone8.png, goodsDetail=Apple iPhone 8 (A1865) 64GB 银色 移动联通电信4G手机, goodsPrice=5589.00, goodsStock=10000)
Goods(id=4, goodsName=小米6, goodsTitle=小米6 4GB+32GB版 月光银 移动联通电信4G手机 双卡双待, goodsImg=/img/mi6.png, goodsDetail=小米6 4GB+32GB版 月光银 移动联通电信4G手机 双卡双待, goodsPrice=3212.00, goodsStock=10000)

在这里插入图片描述
更新和删除同样测试即可实现。
复杂条件查询:
使用QueryWrapper:
举例:
1)查询goods_name中包含iphone的所有商品

@Test
    public void selectByWrapepr(){
        QueryWrapper<Goods> queryWrapper = new QueryWrapper();
        // QueryWrapper<Object> query = Wrappers.query();  和上面一样
        queryWrapper.like("goods_name","iphone");

        List<Goods> goods = goodsDao.selectList(queryWrapper);
        goods.forEach(System.out::println);
    }

查询结果如下:

2020-06-07 09:20:16.112  INFO 3768 --- [           main] c.s.spring.mybatis.SimpleTest            : Started SimpleTest in 3.544 seconds (JVM running for 4.887)

Goods(id=1, goodsName=iphoneX, goodsTitle=Apple iPhone X (A1865) 64GB 银色 移动联通电信4G手机, goodsImg=/img/iphonex.png, goodsDetail=Apple iPhone X (A1865) 64GB 银色 移动联通电信4G手机, goodsPrice=8765.00, goodsStock=10000)
Goods(id=3, goodsName=iphone8, goodsTitle=Apple iPhone 8 (A1865) 64GB 银色 移动联通电信4G手机, goodsImg=/img/iphone8.png, goodsDetail=Apple iPhone 8 (A1865) 64GB 银色 移动联通电信4G手机, goodsPrice=5589.00, goodsStock=10000)


2020-06-07 09:20:16.485  INFO 3768 --- [extShutdownHook] o.s.s.concurrent.ThreadPoolTaskExecutor  : Shutting down ExecutorService 'applicationTaskExecutor'
2020-06-07 09:20:16.595  INFO 3768 --- [extShutdownHook] com.alibaba.druid.pool.DruidDataSource   : {dataSource-1} closed

其他条件查询均可根据QueryWrapper提供的方法实现。

Mybatis-Plus(简称MP)是一个 Mybatis 的增强工具,在 Mybatis 的基础上只做增强不做改变,为简化开发、提高效率而生。 特性 无侵入:Mybatis-PlusMybatis 的基础上进行扩展,只做增强不做改变,引入 Mybatis-Plus 不会对您现有的 Mybatis 构架产生任何影响,而且 MP 支持所有 Mybatis 原生的特性 依赖少:仅仅依赖 Mybatis 以及 Mybatis-Spring 损耗小:启动即会自动注入基本CURD,性能基本无损耗,直接面向对象操作 预防Sql注入:内置Sql注入剥离器,有效预防Sql注入攻击 通用CRUD操作:内置通用 Mapper、通用 Service,仅仅通过少量配置即可实现单表大部分 CRUD 操作,更有强大的条件构造器,满足各类使用需求 多种主键策略:支持多达4种主键策略(内含分布式唯一ID生成器),可自由配置,完美解决主键问题 支持ActiveRecord:支持 ActiveRecord 形式调用,实体类只需继承 Model 类即可实现基本 CRUD 操作 支持代码生成:采用代码或者 Maven 插件可快速生成 Mapper 、 Model 、 Service 、 Controller 层代码,支持模板引擎,更有超多自定义配置等您来使用(P.S. 比 Mybatis 官方的 Generator 更加强大!) 支持自定义全局通用操作:支持全局通用方法注入( Write once, use anywhere ) 支持关键词自动转义:支持数据库关键词(order、key……)自动转义,还可自定义关键词 内置分页插件:基于Mybatis物理分页,开发者无需关心具体操作,配置好插件之后,写分页等同于普通List查询 内置性能分析插件:可输出Sql语句以及其执行时间,建议开发测试时启用该功能,能有效解决慢查询 内置全局拦截插件:提供全表 delete 、 update 操作智能分析阻断,预防误操作
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值