欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

mybatis plus自動(dòng)生成器解析(及遇到的坑)

 更新時(shí)間:2022年03月12日 09:42:15   作者:white煞  
這篇文章主要介紹了mybatis-plus自動(dòng)生成器及遇到的坑,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

mybatis plus自動(dòng)生成器解析

使用這個(gè)可以超快速生成entity service controller層

1.加入依賴

模板引擎的依賴也要導(dǎo)入,不然運(yùn)行會(huì)報(bào)錯(cuò)的

<dependency>
        <groupId>com.baomidou</groupId>
        <artifactId>mybatis-plus-generator</artifactId>
        <version>3.3.1.tmp</version>
    </dependency>
    <dependency>
        <groupId>org.freemarker</groupId>
        <artifactId>freemarker</artifactId>
        <version>2.3.30</version>
    </dependency>

2.寫一個(gè)類,作為自動(dòng)生成器的入口

在這里插入圖片描述

這里復(fù)制代碼的時(shí)候,一定一定要把import的包也復(fù)制,不然很容易出錯(cuò)

package van.generator;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
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.DataSourceConfig;
import com.baomidou.mybatisplus.generator.config.FileOutConfig;
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.TemplateConfig;
import com.baomidou.mybatisplus.generator.config.po.TableInfo;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;
/**
 * @author Van
 * @date 2020/5/1 - 15:43
 */
public class CodeGenerator {
    /**
     * <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());
        if (scanner.hasNext()) {
            String ipt = scanner.next();
            if (StringUtils.isNotEmpty(ipt)) {
                return ipt;
            }
        }
        throw new MybatisPlusException("請(qǐng)輸入正確的" + tip + "!");
    }
    /**
     * RUN THIS
     */
    public static void main(String[] args) {
        // 代碼生成器
        AutoGenerator mpg = new AutoGenerator();
        // 全局配置
        GlobalConfig gc = new GlobalConfig();
        String projectPath = System.getProperty("user.dir");
        gc.setOutputDir(projectPath + "/ad-sponsor/src/main/java/van");
        gc.setAuthor("van");
        gc.setOpen(false);
        mpg.setGlobalConfig(gc);
        // 數(shù)據(jù)源配置
        DataSourceConfig dsc = new DataSourceConfig();
        dsc.setUrl("jdbc:mysql://localhost:3306/ad?useUnicode=true&serverTimezone=GMT&useSSL=false&characterEncoding=utf8");
        // dsc.setSchemaName("public");
        dsc.setDriverName("com.mysql.jdbc.Driver");
        dsc.setUsername("root");
        dsc.setPassword("321asd");
        mpg.setDataSource(dsc);
        // 包配置
        PackageConfig pc = new PackageConfig();
        pc.setModuleName(scanner("模塊名"));
        pc.setParent("com.baomidou.mybatisplus.samples.generator");
        mpg.setPackageInfo(pc);
        // 自定義配置
        InjectionConfig cfg = new InjectionConfig() {
            @Override
            public void initMap() {
                // to do nothing
            }
        };
        List<FileOutConfig> focList = new ArrayList<>();
        focList.add(new FileOutConfig("/templates/mapper.xml.ftl") {
            @Override
            public String outputFile(TableInfo tableInfo) {
                // 自定義輸入文件名稱
                return projectPath + "/mybatis-plus-sample-generator/src/main/resources/mapper/" + pc.getModuleName()
                        + "/" + tableInfo.getEntityName() + "Mapper" + StringPool.DOT_XML;
            }
        });
        cfg.setFileOutConfigList(focList);
        mpg.setCfg(cfg);
        mpg.setTemplate(new TemplateConfig().setXml(null));
        // 策略配置
        StrategyConfig strategy = new StrategyConfig();
        strategy.setNaming(NamingStrategy.underline_to_camel);
        strategy.setColumnNaming(NamingStrategy.underline_to_camel);
        strategy.setSuperEntityClass("com.baomidou.mybatisplus.samples.generator.common.BaseEntity");
        strategy.setEntityLombokModel(true);
        strategy.setSuperControllerClass("com.baomidou.mybatisplus.samples.generator.common.BaseController");
        strategy.setInclude(scanner("表名"));
        strategy.setSuperEntityColumns("id");
        strategy.setControllerMappingHyphenStyle(true);
        strategy.setTablePrefix(pc.getModuleName() + "_");
        mpg.setStrategy(strategy);
        // 選擇 freemarker 引擎需要指定如下加,注意 pom 依賴必須有!
        mpg.setTemplateEngine(new FreemarkerTemplateEngine());
        mpg.execute();
    }
}

3.修改代碼

1.全局配置

在這里插入圖片描述

2.數(shù)據(jù)源配置

在這里插入圖片描述

3.包配置

在這里插入圖片描述

3.運(yùn)行

在這里插入圖片描述

講解一下

1.首先運(yùn)行這里

要求輸入的模塊名是生成的entity等的上層包名,我這里輸入的是sys如上圖所示

在這里插入圖片描述

2.全局配置這里

在這里插入圖片描述

是指定要生成的地方(模塊名)

在這里插入圖片描述

3.數(shù)據(jù)源配置沒(méi)啥說(shuō)的,填入正確信息即可

4.包配置

在這里插入圖片描述

mybatis plus代碼生成器使用及注意事項(xiàng)

Mybatis-plus的代碼生成器是mybatis-plus組件的,并不是mybatis的,注意不要看錯(cuò),這里會(huì)介紹代碼生成器的主要用法以及需要注意的事項(xiàng)。

1.添加maven依賴

Mybatis-plus的代碼生成器在3.0.3之后就獨(dú)立出來(lái),與mybatis-plus分開了,所以使用高版本的mybatis-plus的同學(xué)要注意,代碼生成器要單獨(dú)引入,如果是使用低版本的,不需要額外引用,這里使用的是按照官方文檔的3.1.2版本,

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
 
    <groupId>com.code.generator</groupId>
    <artifactId>code-generator</artifactId>
    <version>1.0-SNAPSHOT</version>
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
            </plugin>
        </plugins>
    </build>
 
    <dependencies>
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-generator</artifactId>
            <version>3.1.2</version>
        </dependency>  
 
        <!-- velocity 模板引擎, 默認(rèn) -->
        <!-- https://mvnrepository.com/artifact/org.apache.velocity/velocity-engine-core -->
        <dependency>
            <groupId>org.apache.velocity</groupId>
            <artifactId>velocity-engine-core</artifactId>
            <version>2.0</version>
        </dependency> 
 
        <!-- freemarker 模板引擎 -->
        <!-- https://mvnrepository.com/artifact/org.freemarker/freemarker -->
        <dependency>
            <groupId>org.freemarker</groupId>
            <artifactId>freemarker</artifactId>
            <version>2.3.28</version>
        </dependency>
 
        <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
        <dependency>
            <groupId>oracle.jdbc</groupId>
            <artifactId>ojdbc6</artifactId>
            <version>11.2.0.2.0</version>
        </dependency> 
 
        <!-- https://mvnrepository.com/artifact/org.springframework/spring-core -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
            <version>4.3.20.RELEASE</version>
        </dependency> 
 
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
            <version>1.7.25</version>
            <scope>compile</scope>
        </dependency> 
 
    </dependencies> 
</project>

2.編寫代碼生成器的類

依賴好了之后就可以開始編寫我們的代碼生成器,代碼生成器主要有幾部分的配置,具體配置的說(shuō)明參考代碼注釋

(1)全局配置

(2)包名配置

(3)數(shù)據(jù)源配置

(4)輸出模板

(5)自定義配置

(6)生成策略

import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.core.toolkit.StringPool;
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.TableInfo;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
 
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map; 
 
public class CodeGenerator {
    public static void main(String[] args) {
        AutoGenerator mpg = new AutoGenerator();
 
        /**
         * 全局配置,常用
         * 1.配置文件輸出的路徑OutputDir
         * 2.設(shè)置是否每次覆蓋文件FileOverride
         * 3.mybatis的xml配置,如二級(jí)緩存,是否生成resultMap映射,是否生成columnlist的sql,這里沒(méi)有使用xml,所以注釋掉
         * 4.設(shè)置作者、是否使用swagger2等全局變量,其他變量參考官方文檔
         * 5.自定義文件命名,%s是占位符,會(huì)將實(shí)體名替換進(jìn)去
         */
        final GlobalConfig gc = new GlobalConfig();
        gc.setOutputDir("E://output");//輸出文件路徑
        gc.setFileOverride(true);
        gc.setActiveRecord(false);// 不需要ActiveRecord特性的請(qǐng)改為false
        //gc.setEnableCache(false);// XML 二級(jí)緩存
        //gc.setBaseResultMap(true);// XML ResultMap
        //gc.setBaseColumnList(false);// XML columList
        gc.setAuthor("simple");// 作者
		gc.setSwagger2(true);
 
        // 自定義文件命名,注意 %s 會(huì)自動(dòng)填充表實(shí)體屬性!
        gc.setControllerName("%sController");
        gc.setServiceName("%sService");
        gc.setServiceImplName("%sServiceImpl");
        gc.setMapperName("%sMapper");
        mpg.setGlobalConfig(gc);
 
        /**
         * 包的配置,主要設(shè)置每一層的包名
         */
        final PackageConfig pc = new PackageConfig();
        //設(shè)置包名
        pc.setParent("com.code.generator");
        pc.setController("system.web");
        pc.setService("system.service");
        pc.setServiceImpl("system.service.impl");
        pc.setMapper("system.mapper");
        pc.setEntity("domain.po");
        mpg.setPackageInfo(pc);
 
        /**
         * 數(shù)據(jù)源配置,mybatis支持的數(shù)據(jù)庫(kù)這里都支持
         */
        DataSourceConfig dsc = new DataSourceConfig();
        dsc.setDbType(DbType.ORACLE);
        dsc.setDriverName("oracle.jdbc.driver.OracleDriver");
		//TODO
        dsc.setUsername("user");
		//TODO
        dsc.setPassword("password");
		//TODO
        dsc.setUrl("jdbc:oracle:thin:@ip:host:db");
        mpg.setDataSource(dsc);
 
        /**
         * 輸出模板,如果按照官方原生的可以不配置,也可以配置自定義的模板
         */
        TemplateConfig templateConfig = new TemplateConfig();
 
        // 配置自定義輸出模板
        //指定自定義模板路徑,注意不要帶上.ftl/.vm, 會(huì)根據(jù)使用的模板引擎自動(dòng)識(shí)別,默認(rèn)vm,xml不輸出
        templateConfig.setEntity("myTemplates/entity.java");
        templateConfig.setService("myTemplates/service.java");
        templateConfig.setServiceImpl("myTemplates/serviceImpl.java");
        templateConfig.setController("myTemplates/controller.java");
        templateConfig.setMapper("myTemplates/mapper.java");
        templateConfig.setXml(null);
        mpg.setTemplate(templateConfig);
 
        /**
         * 自定義配置,可以自定義參數(shù)在模板中使用,還可以已定義輸出的文件,
         * 如果除了上面的幾個(gè)模板之外還有其他的文件需要輸出可以在這里設(shè)置
         */
        InjectionConfig cfg = new InjectionConfig() {
            @Override
            public void initMap() {
                Map<String, Object> map = new HashMap<String, Object>();
                map.put("tableComment", "系統(tǒng)用戶");
                map.put("Handler", pc.getParent()+".system.handler");
                map.put("SuperHandler", "com.code.generator.core.base.BaseHandler");
                map.put("SuperHandlerName", "BaseHandler");
                map.put("vo", pc.getParent()+".domain.vo");
                this.setMap(map);
            }
        };
 
        // 自定義輸出配置
        List<FileOutConfig> focList = new ArrayList<>();
        // 自定義handler
        focList.add(new FileOutConfig("myTemplates/handler.java.vm") {
            @Override
            public String outputFile(TableInfo tableInfo) {
                return gc.getOutputDir() + "/com/code/generator/handler/"
                        + tableInfo.getEntityName()+"Handler" + StringPool.DOT_JAVA;
            }
        });
        // 自定義provider
        focList.add(new FileOutConfig("myTemplates/provider.java.vm") {
            @Override
            public String outputFile(TableInfo tableInfo) {
                return gc.getOutputDir() + "/com/code/generator/mapper/provider/"
                        + tableInfo.getEntityName()+"Provider" + StringPool.DOT_JAVA;
            }
        });
 
        // 自定義vo
        focList.add(new FileOutConfig("myTemplates/vo.java.vm") {
            @Override
            public String outputFile(TableInfo tableInfo) {
                return gc.getOutputDir() + "/com/code/generator/domain/vo/"
                        + tableInfo.getEntityName()+"Vo" + StringPool.DOT_JAVA;
            }
        });
 
        cfg.setFileOutConfigList(focList);
        mpg.setCfg(cfg);  
 
        /**
         * 生成策略配置,常用
         * 1.指定生成的表名
         * 2.表名前綴過(guò)濾
         * 3.實(shí)體名、字段名的命名方式
         * 4.指定繼承的父類、父字段
         */
        StrategyConfig strategy = new StrategyConfig();
        //過(guò)濾表前綴
        strategy.setTablePrefix(new String[] { "T_" });
        //類名生成策略:駝峰命名
        strategy.setNaming(NamingStrategy.underline_to_camel);
        //字段名生成方式:駝峰命名
        strategy.setColumnNaming(NamingStrategy.underline_to_camel);
        //需要生成的表
        strategy.setInclude(new String[] { "T_SYS_USER" });
        strategy.setCapitalMode(true);
        //controller是否restful風(fēng)格
        strategy.setRestControllerStyle(true);
 
        //配置繼承的父類
        strategy.setSuperEntityClass("com.code.generator.po.BaseDomain");
        strategy.setSuperEntityColumns("ID","ISVALID","CREATORID","CREATEDTIME","MODIFYID","MODIFYTIME","PACKAGEID");
        strategy.setSuperControllerClass("com.code.generator.core.base.BaseController");
        strategy.setSuperServiceClass("com.code.generator.core.base.BaseService");
        strategy.setSuperServiceImplClass("com.code.generator.impl.core.base.BaseServiceImpl");
        strategy.setSuperMapperClass("com.code.generator.impl.core.base.BaseMapper");
        mpg.setStrategy(strategy);  
        // 執(zhí)行生成
        mpg.execute(); 
    } 
}
 

3.自定義輸出模板

mybatis-plus-generator的jar包里面有原生的模板文件,在jar包的templates目錄下,btl對(duì)應(yīng)的是beetl模板引擎,ftl對(duì)應(yīng)freemarker模板引擎,vm對(duì)應(yīng)的是velocity模板引擎,默認(rèn)是vm,如果想更改使用的引擎可以通過(guò)setTemplateEngine方法設(shè)置,模板中的全局變量可以參考下面方法里面的變量com.baomidou.mybatisplus.generator.engine.AbstractTemplateEngine#getObjectMap

   

如果不想使用原生的模板,可以編寫自己的模板,基于原生模板修改,新的模板要放在resources下面,注意寫的時(shí)候不要加上模板文件的后綴,會(huì)根據(jù)引擎自動(dòng)識(shí)別,如果不想輸出對(duì)應(yīng)的文件,需要設(shè)置為null,否則會(huì)拿jar包下面原生的模板生成。

//指定自定義模板路徑,注意不要帶上.ftl/.vm, 會(huì)根據(jù)使用的模板引擎自動(dòng)識(shí)別,默認(rèn)vm,xml不輸出
templateConfig.setEntity("myTemplates/entity.java");
templateConfig.setXml(null);

4.自定義參數(shù)模板

(1)自定義參數(shù)

代碼生成器中提供了一些模板參數(shù),如果需要定制化自己的模板可能需要一些自定義的參數(shù)可以在這里添加,在模板中可以通過(guò)${cfg.key}來(lái)使用

(2)自定義模板

原生提供的有controller、service、serviceImpl、dao、mapper、entity六種生成模板,如果我們還需要輸出其他的一些模板文件,可以通過(guò)以下方式來(lái)輸出,與TemplateConfig配置不一樣,這里模板的路徑需要加上后綴,還需要指定輸出路徑。

到這里,代碼生成器就可以工作了,但是還有一些小缺陷在其他的文章中沒(méi)有提到,下面再提兩點(diǎn)

5.關(guān)于日志輸出

在代碼生成器中實(shí)際上是有生成過(guò)程的日志輸出的,如果配置不正確也會(huì)有對(duì)應(yīng)的提示,但是在很多的教程里面都沒(méi)有提到這一點(diǎn),控制臺(tái)都提示log4j異常了。

關(guān)于日志,實(shí)際上在模板引擎中就有l(wèi)og4j的api包引入了,但是log4j還需要有對(duì)應(yīng)的實(shí)現(xiàn)才能輸出日志,所以會(huì)提示上圖的異常,因此在上面我的依賴中還加入了slf4j-log4j12的實(shí)現(xiàn)依賴

這時(shí)候我們?cè)賮?lái)運(yùn)行,發(fā)現(xiàn)還會(huì)報(bào)錯(cuò),這是因?yàn)槿鄙賚og4j的properties文件,下面我們建立一個(gè)log4j.properties文件,注意文件名不要改,就叫這個(gè)名字,配置內(nèi)容參考下面的,也可以用你常用的,具體配置的屬性自行查找吧

log4j.rootLogger=DEBUG, stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n

上面該補(bǔ)的補(bǔ)完之后我們就可以看到代碼生成器的控制臺(tái)日志了

6.關(guān)于字段類型轉(zhuǎn)換

代碼生成器在生成字段信息的時(shí)候會(huì)從數(shù)據(jù)庫(kù)獲取表字段信息,根據(jù)一定的規(guī)則來(lái)生成字段,如果不想使用原生的字段信息,可以自定義自己的規(guī)則,在這里我使用的是Oracle數(shù)據(jù)庫(kù),在配置數(shù)據(jù)源的時(shí)候有兩個(gè)方法setDbQuery和setTypeConvert,前者是獲取數(shù)據(jù)庫(kù)字段信息的sql,后者是數(shù)據(jù)庫(kù)字段類型與java字段類型的映射規(guī)則,下面我們看一下源碼的實(shí)現(xiàn)看看是如何轉(zhuǎn)換的

(1)獲取字段信息

在這里可以看到對(duì)于Oracle在處理Number類型字段的時(shí)候是做了處理的,不像mysql,很多時(shí)候我們會(huì)直接使用number來(lái)代表各種數(shù)字類型,如double、decimal等,這里會(huì)根據(jù)number的字段長(zhǎng)度、小數(shù)位來(lái)進(jìn)行組裝然后提供給后面字段映射來(lái)進(jìn)行處理,所以我們?cè)谠O(shè)計(jì)的時(shí)候要注意,該定義長(zhǎng)度就定義長(zhǎng)度,該定義小數(shù)位就定義小數(shù)位,盡量不要直接用number或者number(*,0)這樣的方式來(lái)定義,否則在后面映射的時(shí)候回當(dāng)成Double處理,但實(shí)際上我們想要的是Integer,不然生成之后你就只能手工修改,或者自定義自己的轉(zhuǎn)換規(guī)則來(lái)適配

SELECT
	A.COLUMN_NAME,
CASE
	
	WHEN A.DATA_TYPE = 'NUMBER' THEN
	(
CASE
	
	WHEN A.DATA_PRECISION IS NULL THEN
	A.DATA_TYPE 
	WHEN NVL( A.DATA_SCALE, 0 ) > 0 THEN
	A.DATA_TYPE || '(' || A.DATA_PRECISION || ',' || A.DATA_SCALE || ')' ELSE A.DATA_TYPE || '(' || A.DATA_PRECISION || ')' 
END 
	) ELSE A.DATA_TYPE 
	END DATA_TYPE,
	B.COMMENTS,
	DECODE( C.POSITION, '1', 'PRI' ) KEY 
FROM
	ALL_TAB_COLUMNS A
	INNER JOIN ALL_COL_COMMENTS B ON A.TABLE_NAME = B.TABLE_NAME 
	AND A.COLUMN_NAME = B.COLUMN_NAME 
	AND B.OWNER = 'USER'--schema
	LEFT JOIN ALL_CONSTRAINTS D ON D.TABLE_NAME = A.TABLE_NAME 
	AND D.CONSTRAINT_TYPE = 'P' 
	AND D.OWNER = 'USER'--schema
	LEFT JOIN ALL_CONS_COLUMNS C ON C.CONSTRAINT_NAME = D.CONSTRAINT_NAME 
	AND C.COLUMN_NAME = A.COLUMN_NAME 
	AND C.OWNER = 'USER' --schema
WHERE
	A.OWNER = 'USER' --schema
	AND A.TABLE_NAME = 'T_SYS_USER' 
ORDER BY
	A.COLUMN_ID

(2)字段類型映射

字段類型映射我們關(guān)注點(diǎn)還是對(duì)于number的處理,其他類型都是直接映射過(guò)去的,在這里可以看到是使用了正則表達(dá)式對(duì)number的字段長(zhǎng)度進(jìn)行匹配來(lái)區(qū)分Integer、Long、Double,如果沒(méi)有小數(shù)位,長(zhǎng)度小于10的則為Integer,否則為L(zhǎng)ong,否則一律按Double處理,所以在定義Number的時(shí)候就注意按實(shí)際來(lái)吧,不要貪圖方便或者偷懶,否則生成之后Entity、xml都要做相應(yīng)的修改。

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Spring如何解決循環(huán)依賴的問(wèn)題

    Spring如何解決循環(huán)依賴的問(wèn)題

    這篇文章主要介紹了Spring是如何解決循環(huán)依賴的問(wèn)題,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-08-08
  • springboot整合ehcache 實(shí)現(xiàn)支付超時(shí)限制的方法

    springboot整合ehcache 實(shí)現(xiàn)支付超時(shí)限制的方法

    在線支付系統(tǒng)需要極高的穩(wěn)定性,在有限的系統(tǒng)資源下,穩(wěn)定性優(yōu)先級(jí)要高于系統(tǒng)并發(fā)以及用戶體驗(yàn),因此需要合理的控制用戶的支付請(qǐng)求。下面通過(guò)本文給大家介紹springboot整合ehcache 實(shí)現(xiàn)支付超時(shí)限制的方法,一起看看吧
    2018-01-01
  • Mybatis velocity腳本的使用教程詳解(推薦)

    Mybatis velocity腳本的使用教程詳解(推薦)

    很多朋友不清楚在mybatis可以使用各種腳本語(yǔ)言來(lái)定義Mapper文件里面的動(dòng)態(tài)SQL;目前mybatis支持的腳本語(yǔ)言有XML(默認(rèn)的);Velocity和Freemarker三種。下面通過(guò)本文給大家介紹Mybatis velocity腳本的使用,一起看看吧
    2016-11-11
  • SpringBoot3整合SpringDoc OpenAPI生成接口文檔的詳細(xì)過(guò)程

    SpringBoot3整合SpringDoc OpenAPI生成接口文檔的詳細(xì)過(guò)程

    SpringDoc OpenAPI 是一個(gè)強(qiáng)大的工具,能夠幫助我們輕松生成 OpenAPI 3.0 規(guī)范的文檔,并提供交互式的 Swagger UI 界面,所以本文給大家介紹了SpringBoot3整合SpringDoc OpenAPI生成接口文檔的詳細(xì)過(guò)程,需要的朋友可以參考下
    2024-07-07
  • java中實(shí)現(xiàn)漢字按照拼音排序(示例代碼)

    java中實(shí)現(xiàn)漢字按照拼音排序(示例代碼)

    這篇文章主要是對(duì)java中將漢字按照拼音排序的實(shí)現(xiàn)代碼進(jìn)行了詳細(xì)的分析介紹。需要的朋友可以過(guò)來(lái)參考下,希望對(duì)大家有所幫助
    2013-12-12
  • 使用Jacoco獲取 Java 程序的代碼執(zhí)行覆蓋率的步驟詳解

    使用Jacoco獲取 Java 程序的代碼執(zhí)行覆蓋率的步驟詳解

    這篇文章主要介紹了使用Jacoco獲取 Java 程序的代碼執(zhí)行覆蓋率的步驟詳解,幫助大家更好的理解和學(xué)習(xí)使用Java,感興趣的朋友可以了解下
    2021-03-03
  • Mybatis設(shè)置sql打印日志的多種方法

    Mybatis設(shè)置sql打印日志的多種方法

    這篇文章主要介紹了Mybatis設(shè)置sql打印日志,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-08-08
  • Java使用IOC控制反轉(zhuǎn)的三種設(shè)計(jì)模式詳解

    Java使用IOC控制反轉(zhuǎn)的三種設(shè)計(jì)模式詳解

    這篇文章主要為大家詳細(xì)介紹了Java使用IOC控制反轉(zhuǎn)的三種設(shè)計(jì)模式,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-10-10
  • 教你如何用Java替換Word中帶有${}的內(nèi)容

    教你如何用Java替換Word中帶有${}的內(nèi)容

    這篇文章主要介紹了教你如何用Java替換Word中帶有${}的內(nèi)容,文中有非常詳細(xì)的代碼示例,對(duì)正在學(xué)習(xí)java的小伙伴們有很好的幫助,需要的朋友可以參考下
    2021-04-04
  • java注解結(jié)合aspectj AOP進(jìn)行日志打印的操作

    java注解結(jié)合aspectj AOP進(jìn)行日志打印的操作

    這篇文章主要介紹了java注解結(jié)合aspectj AOP進(jìn)行日志打印的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-02-02

最新評(píng)論