日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

MyBatis-plus+達(dá)夢(mèng)數(shù)據(jù)庫(kù)實(shí)現(xiàn)自動(dòng)生成代碼的示例

瀏覽:188日期:2023-10-23 10:01:02

先說(shuō)點(diǎn)什么

mybatis-plus是一款增強(qiáng)版的mybatis,功能強(qiáng)大,可以很大程度的簡(jiǎn)化開(kāi)發(fā)。然而達(dá)夢(mèng)數(shù)據(jù)庫(kù)比較小眾,雖然官方說(shuō)mybatis-plus支持達(dá)夢(mèng)數(shù)據(jù)庫(kù),但是使用起來(lái)遇到了很多問(wèn)題。這篇文章主要講如何使用mybatis-plus訪問(wèn)達(dá)夢(mèng)數(shù)據(jù)庫(kù),并使用逆向工程自動(dòng)生成代碼。=。=對(duì)了 這是個(gè)使用spring boot的項(xiàng)目。

(配置)POM文件,引入所需要的依賴

<dependencies> <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-starter-test</artifactId> <scope>test</scope> <exclusions><exclusion> <groupId>org.junit.vintage</groupId> <artifactId>junit-vintage-engine</artifactId></exclusion> </exclusions> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artifactId> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency> <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger2</artifactId> <version>2.7.0</version> </dependency> <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger-ui</artifactId> <version>2.7.0</version> </dependency> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.2.0</version> </dependency> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-generator</artifactId> <version>3.2.0</version> </dependency> <dependency> <groupId>org.freemarker</groupId> <artifactId>freemarker</artifactId> <version>2.3.29</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-test</artifactId> <version>5.2.0.RELEASE</version> <scope>compile</scope> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-test</artifactId> </dependency> </dependencies>

(配置)達(dá)夢(mèng)的驅(qū)動(dòng)包,配置數(shù)據(jù)源

在達(dá)夢(mèng)數(shù)據(jù)庫(kù)的安裝目錄下有驅(qū)動(dòng)包,我們先把jar包丟進(jìn)來(lái),放到lib這個(gè)文件夾下:

MyBatis-plus+達(dá)夢(mèng)數(shù)據(jù)庫(kù)實(shí)現(xiàn)自動(dòng)生成代碼的示例

然后配置pom文件:

<dependency> <groupId>com.dm</groupId> <artifactId>Dm7JdbcDriver</artifactId> <version>1.7</version> <scope>system</scope> <systemPath>${project.basedir}/src/lib/Dm7JdbcDriver18.jar</systemPath> </dependency>

到現(xiàn)在,所有需要的依賴就都已經(jīng)導(dǎo)入了。

(配置)application.properties文件

spring.datasource.url=spring.datasource.username=spring.datasource.password=spring.datasource.driver-class-name=dm.jdbc.driver.DmDrivermybatis-plus.configuration.cache-enabled=truemybatis-plus.mapper-locations=classpath*:mappers/*.xmlmybatis-plus.type-aliases-package=com.example.demo.extity.*mybatis-plus.configuration.map-underscore-to-camel-case=truemybatis-plus.configuration.auto-mapping-behavior=fullmybatis-plus.global-config.banner=false

創(chuàng)建Mybatis-Plus自動(dòng)生成代碼的配置類

在配置數(shù)據(jù)源的時(shí)候要注意,如果不設(shè)置數(shù)據(jù)源的類型是達(dá)夢(mèng)數(shù)據(jù)庫(kù),會(huì)無(wú)法識(shí)別。經(jīng)歷了開(kāi)心的看源碼環(huán)節(jié),我們發(fā)現(xiàn)Mybatis中有個(gè)枚舉類DbType來(lái)標(biāo)識(shí)數(shù)據(jù)庫(kù)的類型,其中有達(dá)夢(mèng)數(shù)據(jù)庫(kù)的類型。(=。=竟然有)所以我們?cè)谂渲妙惱飩鱾€(gè)參數(shù)就好了。(=。= 不然可能就涼了)

dsc.setDbType(DbType.DM);

配置類代碼:

public class MysqlGenerator { 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 + '!'); } 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('kning'); gc.setOpen(false); gc.setSwagger2(true); gc.setIdType(IdType.AUTO); gc.setBaseResultMap(true); mpg.setGlobalConfig(gc);//達(dá)夢(mèng)數(shù)據(jù)庫(kù)的配置 DataSourceConfig dsc = new DataSourceConfig(); dsc.setDbType(DbType.DM); dsc.setSchemaName('SYSDBA'); dsc.setUrl(''); dsc.setDriverName('dm.jdbc.driver.DmDriver'); dsc.setUsername(''); dsc.setPassword(''); mpg.setDataSource(dsc); // 包配置 PackageConfig pc = new PackageConfig(); pc.setModuleName(scanner('模塊名')); pc.setParent('com.example'); 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 + '/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.setEntityLombokModel(true); strategy.setInclude(scanner('表名')); strategy.setSuperEntityColumns('id'); strategy.setControllerMappingHyphenStyle(true); strategy.setTablePrefix(pc.getModuleName() + '_'); strategy.setEntityLombokModel(true); mpg.setStrategy(strategy); // 選擇 freemarker 引擎需要指定如下加,注意 pom 依賴必須有! mpg.setTemplateEngine(new FreemarkerTemplateEngine()); mpg.execute(); }}

Mybatis-plus生成代碼

首先我們?cè)跀?shù)據(jù)庫(kù)里創(chuàng)建一張表,就叫教師(teacher)表好了。達(dá)夢(mèng)數(shù)據(jù)庫(kù)似乎要求表名盡量是大寫的。

MyBatis-plus+達(dá)夢(mèng)數(shù)據(jù)庫(kù)實(shí)現(xiàn)自動(dòng)生成代碼的示例

然后插入一點(diǎn)數(shù)據(jù)方便測(cè)試。

MyBatis-plus+達(dá)夢(mèng)數(shù)據(jù)庫(kù)實(shí)現(xiàn)自動(dòng)生成代碼的示例

運(yùn)行測(cè)試類,輸入模塊名和表名,達(dá)夢(mèng)數(shù)據(jù)庫(kù)要求表名是大寫的。

MyBatis-plus+達(dá)夢(mèng)數(shù)據(jù)庫(kù)實(shí)現(xiàn)自動(dòng)生成代碼的示例

不出意外,我們就生成成功了。=。=不要問(wèn)為什么有個(gè)students,因?yàn)樽约簻y(cè)試用的這個(gè)。

MyBatis-plus+達(dá)夢(mèng)數(shù)據(jù)庫(kù)實(shí)現(xiàn)自動(dòng)生成代碼的示例

測(cè)試一下

我們來(lái)簡(jiǎn)單寫個(gè)測(cè)試類,其功能是查出教師表的所有數(shù)據(jù),然后插入一條教師信息,然后在查一次:

@RunWith(SpringJUnit4ClassRunner.class)@SpringBootTestpublic class teacherTest { @Autowired private TeacherMapper teacherMapper; @Test public void teacher(){ List<Teacher> teachers = teacherMapper.selectList(null); teachers.forEach(System.out::println); System.out.println('=================================='); Teacher teacher = new Teacher(); teacher.setId(6); teacher.setName('zhou'); teacher.setAge(58); teacherMapper.insert(teacher); teachers = teacherMapper.selectList(null); teachers.forEach(System.out::println); }}

=。=看樣子我們成功了。

MyBatis-plus+達(dá)夢(mèng)數(shù)據(jù)庫(kù)實(shí)現(xiàn)自動(dòng)生成代碼的示例

到這里,我們就成功的使用Mybatis-plus成功的生成了代碼。

Mybatis-plus主鍵生成可能出現(xiàn)的問(wèn)題

讓我們來(lái)看看錯(cuò)誤信息:

org.springframework.dao.DataIntegrityViolationException: ### Error updating database. Cause: java.sql.SQLException: 違反列[ID]非空約束### The error may exist in com/example/demo/mapper/TeacherMapper.java (best guess)### The error may involve com.example.demo.mapper.TeacherMapper.insert-Inline### The error occurred while setting parameters### SQL: INSERT INTO TEACHER ( NAME, AGE ) VALUES ( ?, ? )### Cause: java.sql.SQLException: 違反列[ID]非空約束

很顯然,是主鍵插入時(shí)的問(wèn)題。我們看一下mybatis-plus生成的實(shí)體類。

@TableId(value = 'ID', type = IdType.AUTO) private Integer id;

其中ID的屬性設(shè)置為自動(dòng),然而如果達(dá)夢(mèng)數(shù)據(jù)庫(kù)建表的時(shí)候如果沒(méi)有設(shè)置主鍵為自增。=。= 那沒(méi)準(zhǔn)就涼了。我們看一下mybatis-plus支持哪些屬性:

@Getterpublic enum IdType { /** * 數(shù)據(jù)庫(kù)ID自增 */ AUTO(0), /** * 該類型為未設(shè)置主鍵類型(將跟隨全局) */ NONE(1), /** * 用戶輸入ID * <p>該類型可以通過(guò)自己注冊(cè)自動(dòng)填充插件進(jìn)行填充</p> */ INPUT(2), /* 以下3種類型、只有當(dāng)插入對(duì)象ID 為空,才自動(dòng)填充。 */ /** * 全局唯一ID (idWorker) */ ID_WORKER(3), /** * 全局唯一ID (UUID) */ UUID(4), /** * 字符串全局唯一ID (idWorker 的字符串表示) */ ID_WORKER_STR(5); private final int key; IdType(int key) { this.key = key; }}

可以看出,解決這個(gè)問(wèn)題最簡(jiǎn)單的方法就是,修改IdType,使用NONE,自己傳入id(主鍵)。同樣的,在自動(dòng)生成代碼的階段,我們?cè)?jīng)設(shè)置過(guò)

gc.setIdType(IdType.AUTO);

在這里更改可以直接更改自動(dòng)生成的代碼,甚至也可以選擇UUID等方式。當(dāng)然,這樣并不好,所以也可以修改數(shù)據(jù)庫(kù)表,設(shè)置ID為自增。在剛剛的teacher表中執(zhí)行下面這條語(yǔ)句,就可以修改主鍵id的屬性為自增了。

ALTER TABLE TEACHER ADD ID identity (1,1);

然后在運(yùn)行代碼,多半就成了。

到此這篇關(guān)于MyBatis-plus+達(dá)夢(mèng)數(shù)據(jù)庫(kù)實(shí)現(xiàn)自動(dòng)生成代碼的示例的文章就介紹到這了,更多相關(guān)MyBatis-plus 自動(dòng)生成代碼內(nèi)容請(qǐng)搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
精品国产中文字幕第一页| 精品一区二区三区亚洲 | 高清久久一区| 精品久久久中文字幕| 麻豆久久久久久久| 国产一区二区三区网| 国产一区二区三区91| 精品美女视频| 国产盗摄——sm在线视频| 久久久久久色| 中文字幕免费一区二区| 久久av网站| 欧美aa在线观看| 亚洲精华国产欧美| 日本中文字幕一区二区| 91成人精品在线| 美女国产精品久久久| 日韩精品麻豆| 免费观看在线综合色| 欧美片第1页综合| 久久亚洲精品中文字幕| 91tv亚洲精品香蕉国产一区| 午夜一区在线| 精品国产欧美日韩| 99热免费精品| 久久一区精品| 亚州国产精品| 99热国内精品| 国产精品嫩草影院在线看| 香蕉视频亚洲一级| 日本成人在线网站| 久久视频精品| 麻豆久久一区| 亚洲精品成a人ⅴ香蕉片| 美女免费视频一区| 日韩精品亚洲一区二区三区免费| 伊人久久高清| 国产精品一级| 亚洲精品激情| 亚洲激情精品| 欧美在线影院| 欧美丝袜一区| 国产伊人久久| 国产乱子精品一区二区在线观看| 99国产精品99久久久久久粉嫩| 精品中国亚洲| 国产探花一区在线观看| 国产亚洲高清视频| 精品成人免费一区二区在线播放| 国产伦一区二区三区| 亚洲精品一级| 蜜桃传媒麻豆第一区在线观看| 日本精品影院| 日韩免费视频| 91欧美在线| 97人人精品| 国产夫妻在线| 日韩和的一区二在线| 91欧美国产| 人人草在线视频| 欧洲亚洲一区二区三区| 日韩一区二区在线免费| 精品资源在线| 欧洲av不卡| 欧美日韩亚洲在线观看| 久久中文字幕二区| 欧美日韩黑人| 日韩一区精品视频| 日本不卡高清| 国产精品亚洲一区二区在线观看 | 精品五月天堂| 日韩国产欧美| 香蕉国产精品| 一二三区精品| 久久爱www成人| 欧美国产美女| 一区免费在线| 日本国产亚洲| 精品久久久久中文字幕小说| 涩涩av在线| 国产亚洲在线| 日本强好片久久久久久aaa| 国产精品第一国产精品| 精品视频亚洲| 欧美国产亚洲精品| 综合色一区二区| 六月丁香综合在线视频| 日韩黄色大片| 亚洲另类黄色| 精品国产亚洲一区二区三区在线| 人在线成免费视频| 最新国产精品久久久| 久久午夜精品| 精品国产三区在线| 欧美日韩国产一区精品一区| 亚洲精品伊人| 日韩精品欧美| 欧美日韩一区自拍| 久久久久国产一区二区| 综合一区二区三区| 日韩欧美在线中字| 欧美日本不卡| 亚洲一区欧美| 久久男女视频| 国产欧美啪啪| 免费视频一区二区| 日本美女一区| 久久影视三级福利片| 夜夜嗨网站十八久久| 国产精品高清一区二区| 日韩在线卡一卡二| 91精品啪在线观看国产18| 青草国产精品久久久久久| 香蕉国产精品| 国产中文在线播放| 欧美激情精品| 日韩高清电影免费| 视频一区在线视频| 久久久777| 色综合www| 97视频热人人精品免费| 精品黄色一级片| 欧美aa在线视频| 欧美aaaaaa午夜精品| 国产精品一区亚洲| 欧美一区成人| 久久国产日韩欧美精品| 日本成人中文字幕| 国产精品三p一区二区| 国产精品丝袜在线播放| 欧美日韩亚洲一区在线观看| 日本亚洲不卡| 亚洲精品激情| 久久国产日韩欧美精品| 91国内精品| 国产精品色在线网站| 国产精品中文| 国产一区二区久久久久| 精品久久视频| 欧美日韩色图| 日韩精品一区二区三区中文在线| 日韩av不卡在线观看| 国产精品jk白丝蜜臀av小说| 国产精品国码视频| 久久久久久自在自线| 婷婷亚洲五月色综合| 三级欧美韩日大片在线看| 日韩激情av在线| 福利一区二区三区视频在线观看| 蜜桃精品在线| 亚洲资源网站| 国产精品成人一区二区不卡| 日韩欧美一区免费| 丝袜美腿成人在线| 青青草视频一区| 国产欧美在线观看免费| 成人精品久久| 亚洲另类黄色| 国产精品中文字幕制服诱惑| 久久青草久久| 欧美激情 亚洲a∨综合| av一区二区高清| 国产精品66| 亚洲免费观看| 日韩av专区| 亚洲精品少妇| 极品日韩av| 久久这里只有精品一区二区| 亚洲免费影视| 国产中文字幕一区二区三区| 亚洲精品激情| 一本一道久久a久久精品蜜桃| 国产香蕉精品| 夜夜精品视频| 麻豆精品蜜桃| 国产精品115| 久久精品99国产国产精| 国产精品日本| 不卡中文字幕| 日韩三区在线| 欧美成人a交片免费看| 久久免费视频66| 国产精品mm| 精品一区二区三区中文字幕在线| 日本精品久久| 日韩午夜视频在线| 最新国产精品| 日韩三级一区| 欧美一级全黄| 国产精品中文字幕制服诱惑| 视频一区中文字幕精品| 在线亚洲观看| 日韩视频一区| 天堂av在线一区| 中文字幕亚洲影视| 亚洲精品福利| 欧美一级网址| 国产精品久久久久久模特| 国产精品3区| 日本а中文在线天堂|