1.SpringBoot整合Druid
1)引入jar包
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.2.3</version>
</dependency>
2)在application.yml中
# 數(shù)據(jù)源
spring:
datasource:
username: root
password: 123456
url: jdbc:mysql://localhost:3306/springboot_mybatis?characterEncoding=utf8&useSSL=false&serverTimezone=UTC&
driver-class-name: com.mysql.cj.jdbc.Driver
type: com.alibaba.druid.pool.DruidDataSource
# 數(shù)據(jù)源其他配置
initialSize: 5
minIdle: 5
maxActive: 20
maxWait: 60000
timeBetweenEvictionRunsMillis: 60000
minEvictableIdleTimeMillis: 300000
validationQuery: SELECT 1 FROM DUAL
testWhileIdle: true
testOnBorrow: false
testOnReturn: false
poolPreparedStatements: true
# 配置監(jiān)控統(tǒng)計(jì)攔截的filters,去掉后監(jiān)控界面sql無(wú)法統(tǒng)計(jì),'wall'用于防火墻
filters: stat,wall
maxPoolPreparedStatementPerConnectionSize: 20
useGlobalDataSourceStat: true
connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=500
#初始化時(shí)運(yùn)行sql腳本
schema: classpath:sql/schema.sql
initialization-mode: always
druid:
#開(kāi)啟druid 監(jiān)控臺(tái)servlet
stat-view-servlet:
enabled: true
login-username: admin
loginPassword: 123456
#開(kāi)啟druid 監(jiān)控filter
web-stat-filter:
enabled: true
注意:?initialization-mode: always 第一次用過(guò)之后注釋掉,或者將其改成never
3).啟動(dòng)項(xiàng)目,訪問(wèn):http://127.0.0.1:8080/druid/? ??
? ? ?用戶(hù)名:admin/密碼:123456(在配置文件中有)
2.SpringBoot整合Mybatis
ps:還記得mybatis中的sqlSessionFactory要傳入一個(gè)dataSource嗎?所以我們先學(xué)習(xí)了druid。
1)關(guān)于逆向工程:我們更多的使用插件plugin的方式
(注意:mybatis的逆向工程生成的是mapper接口和mapper.xml文件
AutoGenerator 是 MyBatis-Plus 的代碼生成器,通過(guò) AutoGenerator 可以快速生成 Entity、Mapper、Mapper XML、Service、Controller 等各個(gè)模塊的代碼,極大的提升了開(kāi)發(fā)效率。)
Mybatis逆向工程_飛鳥(niǎo)的心情的博客-CSDN博客
2)集成mybatis
? ?第一步:jar包引入:??
<!--mybatis -->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.4</version>
</dependency>
? ?第二步:
? ?在application.yml中:
#設(shè)置mybatis
mybatis:
mapper-locations: classpath:com/tulingxueyuan/mapper/*Mapper.xml
typeAliasesPackage: com.tulingxueyuan.pojo
configuration:
mapUnderscoreToCamelCase: true
- typeAliasesPackage 的作用就是指定一個(gè)包名,在該包中的所有類(lèi)都會(huì)被自動(dòng)注冊(cè)為 MyBatis 的別名,無(wú)需顯式在 XML 配置文件中指定別名。這可以減少在 XML 配置文件中的重復(fù)工作,同時(shí)使得配置更加簡(jiǎn)潔。
- mapUnderscoreToCamelCase: true的作用是:(參考如下代碼)其中的查詢(xún)結(jié)果就算沒(méi)有resultMap映射,那么也可以將dept_name字段映射成deptName
<select id="selectByPrimaryKey" parameterType="java.lang.Integer" resultMap="BaseResultMap">
select id, dept_name
from dept
where id = #{id,jdbcType=INTEGER}
</select>
? 第三步:
在啟動(dòng)類(lèi)中加入:@MapperScan("com.tulingxueyuan.mapper")或者在mapper接口上加上@Mapper注解
@SpringBootApplication
@MapperScan("com.tulingxueyuan.mapper")
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
? ok,集成好了。
3.SpringBoot整合MybatisPlus
Idea先安裝插件MybatisX
官網(wǎng):MyBatis-Plus
1.引入jar包:
這里使用的是3.4.2的版本,還有其他版本在mvn repository中查找
<!-- mybatis-plus 不需要再額外引入mybatis了-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>${mybatisplus.version}</version>
</dependency>
2.集成配置:
application.yml中:
# 數(shù)據(jù)源
spring:
datasource:
username: root
password: root
url: jdbc:mysql://localhost:3306/mybatisplus?characterEncoding=utf8&useSSL=false&serverTimezone=UTC&
driver-class-name: com.mysql.cj.jdbc.Driver
type: com.alibaba.druid.pool.DruidDataSource
#初始化時(shí)運(yùn)行sql腳本
schema: classpath:sql/schema.sql
initialization-mode : never
logging:
level:
root: info
com.tulingxueyuan: debug #設(shè)置日志級(jí)別 mp的mapper日志級(jí)別
mybatis-plus:
configuration:
map-underscore-to-camel-case: false #下劃線命名轉(zhuǎn)化為駝峰命名
sql文件的內(nèi)容:
-- 創(chuàng)建表
CREATE TABLE tbl_employee(
id INT(11) PRIMARY KEY AUTO_INCREMENT,
last_name VARCHAR(50),
email VARCHAR(50),
gender CHAR(1),
age INT
);
INSERT INTO tbl_employee(last_name,email,gender,age) VALUES('Tom','tom@atguigu.com',1,22);
INSERT INTO tbl_employee(last_name,email,gender,age) VALUES('Jerry','jerry@atguigu.com',0,25);
INSERT INTO tbl_employee(last_name,email,gender,age) VALUES('Black','black@atguigu.com',1,30);
INSERT INTO tbl_employee(last_name,email,gender,age) VALUES('White','white@atguigu.com',0,35);
啟動(dòng)類(lèi)中:
@SpringBootApplication
@MapperScan("com.tulingxueyuan.mbp.mapper")
public class QuickStartApplication {
public static void main(String[] args) {
SpringApplication.run(QuickStartApplication.class, args);
}
}
3.編寫(xiě)mapper接口和servcie接口
? ?看下圖的重點(diǎn):編寫(xiě)的接口都要繼承通用的Mapper和Servcie接口:BaseMapper和IService
mapper中:
package com.tulingxueyuan.mbp.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.tulingxueyuan.mbp.pojo.Employee;
public interface EmployeeMapper extends BaseMapper<Employee> {
}
service中:
package com.tulingxueyuan.mbp.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.tulingxueyuan.mbp.pojo.Employee;
public interface EmployeeService extends IService<Employee> {
}
???serviceImpl中:
package com.tulingxueyuan.mbp.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.tulingxueyuan.mbp.mapper.EmployeeMapper;
import com.tulingxueyuan.mbp.pojo.Employee;
import com.tulingxueyuan.mbp.service.EmployeeService;
import org.springframework.stereotype.Service;
/***
*
* service實(shí)現(xiàn)類(lèi) 繼承mp提供通用的service基類(lèi)
* ServiceImpl<EmployeeMapper, Employee>
* 2個(gè)泛型 1.EmployeeMapper Mapper接口
* 2.Employee 對(duì)應(yīng)Pojo
*/
@Service
public class EmployeeImplService extends
ServiceImpl<EmployeeMapper, Employee> implements EmployeeService {
}
? 4.創(chuàng)建實(shí)體類(lèi)pojo
package com.tulingxueyuan.mbp.pojo;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
// mp 會(huì)默認(rèn)將pojo類(lèi)名當(dāng)表名,如果類(lèi)名和表名不一致可以使用注解
@TableName("tbl_employee")
public class Employee {
// mp 會(huì)自動(dòng)識(shí)別pojo類(lèi)中名為id的屬性,如果名字叫id就會(huì)當(dāng)做是主鍵
// 如果你的注解沒(méi)有賦值那它會(huì)幫你使用ID_WORKER的生成策略, 主要是為了防止你忘記給主鍵賦值
// 如果字段是自動(dòng)增長(zhǎng)需要手動(dòng)改一下生成策略
@TableId(value = "id", type = IdType.AUTO)
private Integer id;
@TableField("last_name")
private String lastName;
private String email;
private Integer gender;
private Integer age;
@TableField(exist = false)
private String genderName; // 這個(gè)字段在表中是沒(méi)有的
public String getGenderName() {
if(gender==0){
return "女";
}
else
{
return "男";
}
}
public Employee() {
super();
// TODO Auto-generated constructor stub
}
public Employee(Integer id, String lastName, String email, Integer gender, Integer age) {
super();
this.id = id;
this.lastName = lastName;
this.email = email;
this.gender = gender;
this.age = age;
}
//getter和setter省略...
@Override
public String toString() {
return "Employee [id=" + id + ", lastName=" + lastName + ", email=" + email + ", gender=" + gender + getGenderName()+", age="
+ age + "]";
}
}
ok,以上就是springboot集成MybatisPlus的過(guò)程。
ps:有沒(méi)有發(fā)現(xiàn)MP當(dāng)中,不用像mybatis那樣指定mapper-locations了(在mybatis中mapper-locations: classpath:com/tulingxueyuan/mapper/*Mapper.xml),那是因?yàn)樵趍ybatisPlus自動(dòng)配置類(lèi)中:已經(jīng)指定了
4.MybatisPlus代碼生成器(舊版)
官方文檔:
代碼生成器(新) | MyBatis-Plus
1.jar包引入
默認(rèn)使用的是velocity模板
<!-- 代碼生成器的依賴(lài) -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
<version>3.4.1</version>
</dependency>
<!--velocity模板引擎-->
<dependency>
<groupId>org.apache.velocity</groupId>
<artifactId>velocity-engine-core</artifactId>
<version>2.2</version>
</dependency>
2.代碼:
package com.tulingxueyuan;
import com.baomidou.mybatisplus.core.exceptions.MybatisPlusException;
import com.baomidou.mybatisplus.core.toolkit.StringPool;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.InjectionConfig;
import com.baomidou.mybatisplus.generator.config.*;
import com.baomidou.mybatisplus.generator.config.po.LikeTable;
import com.baomidou.mybatisplus.generator.config.po.TableInfo;
import com.baomidou.mybatisplus.generator.config.rules.DateType;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
/***
* @Author 徐庶 QQ:1092002729
* @Slogan 致敬大師,致敬未來(lái)的你
*
* pms_product
*/
public class GeneratorApp {
/**
* <p>
* 讀取控制臺(tái)內(nèi)容
* </p>
*/
public static String scanner(String tip) {
Scanner scanner = new Scanner(System.in);
StringBuilder help = new StringBuilder();
help.append("請(qǐng)輸入" + tip + ":");
System.out.println(help.toString());
// 判斷用戶(hù)是否輸入
if (scanner.hasNext()) {
// 拿到輸入內(nèi)容
String ipt = scanner.next();
if (StringUtils.isNotBlank(ipt)) {
return ipt;
}
}
throw new MybatisPlusException("請(qǐng)輸入正確的" + tip + "!");
}
public static void main(String[] args) {
String moduleName = scanner("模塊名");
String tableName = scanner("表名(多個(gè)用,號(hào)分隔,或者按前綴(pms*))");
String prefixName = scanner("需要替換的表前綴");
// 代碼生成器
AutoGenerator mpg = new AutoGenerator();
// 全局配置
GlobalConfig gc = new GlobalConfig();
// 獲得當(dāng)前項(xiàng)目的路徑
String projectPath = System.getProperty("user.dir")+"/05_generator";
// 設(shè)置生成路徑
gc.setOutputDir(projectPath + "/src/main/java");
// 作者
gc.setAuthor("xushu");
// 代碼生成是不是要打開(kāi)所在文件夾
gc.setOpen(false);
// 生成Swagger2注解
gc.setSwagger2(true);
// 會(huì)在mapper.xml 生成一個(gè)基礎(chǔ)的<ResultMap> 映射所有的字段
gc.setBaseResultMap(true);
// 同文件生成覆蓋
gc.setFileOverride(true);
//gc.setDateType(DateType.ONLY_DATE)
// 實(shí)體名:直接用表名 %s=表名
gc.setEntityName("%s");
// mapper接口名
gc.setMapperName("%sMapper");
// mapper.xml 文件名
gc.setXmlName("%sMapper");
// 業(yè)務(wù)邏輯類(lèi)接口名
gc.setServiceName("%sService");
// 業(yè)務(wù)邏輯類(lèi)實(shí)現(xiàn)類(lèi)名
gc.setServiceName("%sImplService");
// 將全局配置設(shè)置到AutoGenerator
mpg.setGlobalConfig(gc);
// 數(shù)據(jù)源配置
DataSourceConfig dsc = new DataSourceConfig();
dsc.setUrl("jdbc:mysql://localhost:3306/tuling_mall?characterEncoding=utf8&useSSL=false&serverTimezone=UTC&");
dsc.setDriverName("com.mysql.cj.jdbc.Driver");
dsc.setUsername("root");
dsc.setPassword("123456");
mpg.setDataSource(dsc);
// 包配置
PackageConfig pc = new PackageConfig();
// 模塊名
pc.setModuleName(moduleName);
// 包名
pc.setParent("com.tulingxueyuan");
// 完整的報(bào)名: com.tulingxueyuan.pms
mpg.setPackageInfo(pc);
// 自定義配置
InjectionConfig cfg = new InjectionConfig() {
@Override
public void initMap() {
// to do nothing
}
};
// 如果模板引擎是 velocity
String templatePath = "/templates/mapper.xml.vm";
// 自定義輸出配置
List<FileOutConfig> focList = new ArrayList<>();
// 自定義配置會(huì)被優(yōu)先輸出
focList.add(new FileOutConfig(templatePath) {
@Override
public String outputFile(TableInfo tableInfo) {
// 自定義輸出文件名 , 如果你 Entity 設(shè)置了前后綴、此處注意 xml 的名稱(chēng)會(huì)跟著發(fā)生變化!!
return projectPath + "/src/main/resources/mapper/" + pc.getModuleName()
+ "/" + tableInfo.getEntityName() + "Mapper" + StringPool.DOT_XML;
}
});
cfg.setFileOutConfigList(focList);
mpg.setCfg(cfg);
// 配置模板
TemplateConfig templateConfig = new TemplateConfig();
// 把已有的xml生成置空
templateConfig.setXml(null);
mpg.setTemplate(templateConfig);
// 策略配置
StrategyConfig strategy = new StrategyConfig();
// 表名的生成策略:下劃線轉(zhuǎn)駝峰 pms_product -- PmsProduct
strategy.setNaming(NamingStrategy.underline_to_camel);
// 列名的生成策略:下劃線轉(zhuǎn)駝峰 last_name -- lastName
strategy.setColumnNaming(NamingStrategy.underline_to_camel);
//strategy.setSuperEntityClass("你自己的父類(lèi)實(shí)體,沒(méi)有就不用設(shè)置!");
strategy.setEntityLombokModel(true);
// 在controller類(lèi)上是否生成@RestController
strategy.setRestControllerStyle(true);
// 公共父類(lèi)
//strategy.setSuperControllerClass("你自己的父類(lèi)控制器,沒(méi)有就不用設(shè)置!");
if(tableName.indexOf('*')>0){
// 按前綴生成表
strategy.setLikeTable(new LikeTable(tableName.replace('*','_')));
}
else{
// 要生成的表名 多個(gè)用逗號(hào)分隔
strategy.setInclude(tableName);
}
// 設(shè)置表替換前綴
// 很重要的一個(gè)配置 比如:表名是pms_product 那么設(shè)置了strategy.setTablePrefix("pms_");
// 之后實(shí)體類(lèi)名及mapper和service就都不帶pms_了,就是Product及ProductMapper等等類(lèi)似的命名了
strategy.setTablePrefix(prefixName);
// 駝峰轉(zhuǎn)連字符 比如 pms_product --> controller @RequestMapping("/pms/pmsProduct")
//strategy.setControllerMappingHyphenStyle(true);
mpg.setStrategy(strategy);
// 進(jìn)行生成
mpg.execute();
}
}
ps:相應(yīng)的swagger依賴(lài):文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-653489.html
<!--Swagger-UI API文檔生產(chǎn)工具-->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>${swagger2.version}</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>${swagger2.version}</version>
</dependency>
<!--解決Swagger 2.9.2版本NumberFormatException-->
<dependency>
<groupId>io.swagger</groupId>
<artifactId>swagger-models</artifactId>
<version>${swagger-models.version}</version>
</dependency>
<dependency>
<groupId>io.swagger</groupId>
<artifactId>swagger-annotations</artifactId>
<version>${swagger-annotations.version}</version>
</dependency>
<!--lombok最新版本-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.18</version>
</dependency>
<properties>
<java.version>1.8</java.version>
<swagger2.version>2.9.2</swagger2.version>
<swagger-models.version>1.6.0</swagger-models.version>
<swagger-annotations.version>1.6.0</swagger-annotations.version>
</properties>
ps:在 Lombok 中,@Data
注解是一個(gè)組合注解,它包含了一系列其他的注解,用于自動(dòng)生成 Java 類(lèi)的常用方法,如 getter、setter、toString、equals 和 hashCode 等。使用 @Data
注解可以減少編寫(xiě)重復(fù)的代碼,讓類(lèi)的定義更加簡(jiǎn)潔。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-653489.html
到了這里,關(guān)于SpringBoot整合Druid、Mybatis、MybatisPlus以及MybatisPlus的使用的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!