前言
聽說你又有新需求了酣溃?
什么弥喉?又是對(duì)某些表的增刪改查蓖谢?
什么年缎?還要從數(shù)據(jù)庫一直寫到dao層翰意?還要配置mapper.xml文件堕汞?完事兒之后還要寫service層玛追、controller層披诗?
什么甲献?遇到條件查詢還要寫dao層和xml文件中的sql語句宰缤?
什么?有新需求了竟纳,要加分頁撵溃?使用pageHelper文件?
搬磚的活兒怎么配得上你一代碼神的氣質(zhì)锥累?
少年缘挑,看你筋骨奇特,配上mybatis plus必能擺脫搬磚的苦惱桶略。一掃以上所有問題语淘!
廢話不多說,項(xiàng)目git地址 https://github.com/KouLouYiMaSi/mybatis-plus.git
Mybatis Plus優(yōu)勢(shì)
- 可以提供代碼層面的條件查詢
- 可以快速生成代碼
- 集成了分頁插件
SpringBoot整合實(shí)戰(zhàn)
step1
配置maven依賴际歼,最重要的是上面的第一個(gè)和第二個(gè)惶翻,第二個(gè)負(fù)責(zé)生成代碼做模板
<dependencies>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>2.3</version>
</dependency>
<dependency>
<groupId>org.apache.velocity</groupId>
<artifactId>velocity-engine-core</artifactId>
<version>2.0</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.10</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.16</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
step2
配置application.xml文件,有了這個(gè)配置就不用寫druid的配置類了,這是新版Druid的糖
spring:
datasource:
type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://localhost:3306/dbname?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true
username: username
password: password
druid:
# 初始化大小鹅心,最小吕粗,最大
initial-size: 5
min-idle: 5
maxActive: 20
# 配置獲取連接等待超時(shí)的時(shí)間
maxWait: 60000
# 配置間隔多久才進(jìn)行一次檢測,檢測需要關(guān)閉的空閑連接旭愧,單位是毫秒
timeBetweenEvictionRunsMillis: 60000
# 配置一個(gè)連接在池中最小生存的時(shí)間颅筋,單位是毫秒
minEvictableIdleTimeMillis: 300000
validationQuery: SELECT 1 FROM DUAL
testWhileIdle: true
testOnBorrow: false
testOnReturn: false
# 打開PSCache宙暇,并且指定每個(gè)連接上PSCache的大小
poolPreparedStatements: true
maxPoolPreparedStatementPerConnectionSize: 20
# 配置監(jiān)控統(tǒng)計(jì)攔截的filters,去掉后監(jiān)控界面sql無法統(tǒng)計(jì)议泵,'wall'用于防火墻
filters: stat,wall
# 通過connectProperties屬性來打開mergeSql功能占贫;慢SQL記錄
connectionProperties: druid.stat.mergeSql\=true;druid.stat.slowSqlMillis\=5000
# 配置DruidStatFilter
web-stat-filter:
enabled: true
url-pattern: "/*"
exclusions: "*.js,*.gif,*.jpg,*.bmp,*.png,*.css,*.ico,/druid/*"
# 配置DruidStatViewServlet
stat-view-servlet:
url-pattern: "/druid/*"
# IP白名單(沒有配置或者為空,則允許所有訪問)
allow: 127.0.0.1,192.168.163.1
# IP黑名單 (存在共同時(shí)先口,deny優(yōu)先于allow)
deny: 192.168.1.73
# 禁用HTML頁面上的“Reset All”功能
reset-enable: false
# 登錄名
login-username: admin
# 登錄密碼
login-password: 123456
mybatis-plus:
mapper-locations: classpath:/com/example/demo/mapper/*/*.xml
typeAliasesPackage: com.example.demo.entity
global-config:
id-type: 2
field-strategy: 2
db-column-underline: true
refresh-mapper: true
configuration:
map-underscore-to-camel-case: true
cache-enabled: false
server:
port: 8082
step3
配置生成代碼的類和分頁插件配置類
package com.example.demo.config;
import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.config.DataSourceConfig;
import com.baomidou.mybatisplus.generator.config.GlobalConfig;
import com.baomidou.mybatisplus.generator.config.PackageConfig;
import com.baomidou.mybatisplus.generator.config.StrategyConfig;
import com.baomidou.mybatisplus.generator.config.rules.DbType;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
/**
* 小混蛋
*/
public class CodeGenerator {
public static final String DB_URL = "jdbc:mysql://localhost:3306/hawkeye?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true";
public static final String USER_NAME = "用戶名";
public static final String PASSWORD = "密碼";
public static final String DRIVER = "com.mysql.jdbc.Driver";
public static final String AUTHOR = "作者名稱";
//生成的文件輸出到哪個(gè)目錄
public static final String OUTPUT_FILE = "D:\\codeGen";
//包名型奥,會(huì)按照com/example/demo這種形式生成類
public static final String PACKAGE = "com.example.demo";
//TODO 更多配置請(qǐng)參考http://mp.baomidou.com/#/generate-code
public void generateByTables(boolean serviceNameStartWithI, String... tableNames) {
GlobalConfig config = new GlobalConfig();
DataSourceConfig dataSourceConfig = new DataSourceConfig();
dataSourceConfig.setDbType(DbType.MYSQL)
.setUrl(DB_URL)
.setUsername(USER_NAME)
.setPassword(PASSWORD)
.setDriverName(DRIVER);
StrategyConfig strategyConfig = new StrategyConfig();
strategyConfig
.setCapitalMode(true)
.setEntityLombokModel(false)
.setDbColumnUnderline(true)
.setNaming(NamingStrategy.underline_to_camel)
.setInclude(tableNames);//修改替換成你需要的表名,多個(gè)表名傳數(shù)組
config.setActiveRecord(false)
.setAuthor(AUTHOR)
.setOutputDir(OUTPUT_FILE)
.setFileOverride(true);
if (!serviceNameStartWithI) {
config.setServiceName("%sService");
}
new AutoGenerator().setGlobalConfig(config)
.setDataSource(dataSourceConfig)
.setStrategy(strategyConfig)
.setPackageInfo(
new PackageConfig()
.setParent(PACKAGE)
.setController("controller")
.setEntity("entity")
).execute();
}
}
package com.example.demo.config;
import com.baomidou.mybatisplus.plugins.PaginationInterceptor;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
@MapperScan("com.example.demo.mapper")
public class MybatisPlusConfig {
@Bean
public PaginationInterceptor paginationInterceptor() {
return new PaginationInterceptor();
}
}
step4
寫一個(gè)junit test類碉京,用于生成代碼
@RunWith(SpringRunner.class)
@SpringBootTest
public class DemoApplicationTests {
@Test
public void contextLoads() {
CodeGenerator gse = new CodeGenerator();
//要給那些表生成
gse.generateByTables(false,"tb_user", "tb_role","tb_permission","tb_user_role","tb_role_permission");
}
}
step5
執(zhí)行junit test類厢汹,生成代碼之后就可以用了
mybatis-plus用法
- mapper層和service層基本上啥也不用動(dòng),當(dāng)然收夸,如果你需要其他邏輯可以在service層添加方法
- controller直接注入service直接調(diào)用就ok 了
- 條件查詢用EntityWrapper坑匠,輸入點(diǎn)之后ide會(huì)給你你想要的提示
- 分頁查詢只需要selectPage方法即可,就是這么簡單
@Controller
@RequestMapping("/tbUser")
public class TbUserController {
@Autowired
private TbUserService tbUserService;
@RequestMapping("/all")
@ResponseBody
public List<TbUser> getAll(){
return tbUserService.selectList(new EntityWrapper<TbUser>());
}
@RequestMapping("/allbypage")
@ResponseBody
public Page<TbUser> getAllByPage(Integer pageNum,Integer pageSize){
return tbUserService.selectPage(new Page<TbUser>(pageNum,pageSize));
}
@RequestMapping("/insert")
@ResponseBody
public boolean insert(TbUser tbUser){
return tbUserService.insert(tbUser);
}
@RequestMapping("/insert")
@ResponseBody
public boolean delete(Integer id){
return tbUserService.deleteById(id);
}
@RequestMapping("/insert")
@ResponseBody
public List<TbUser> getUserById(Integer uid){
return tbUserService.selectList(
new EntityWrapper<TbUser>()
.eq("uid",uid)
);
}
}
總結(jié)
以后再做管理系統(tǒng)建完表就直接生成卧惜,反正一般都是給內(nèi)部人用厘灼,后期涉及到優(yōu)化也就是加索引什么的。