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提供的方法实现。