电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

MyBatis-plus+達夢數據庫實現自動生成代碼的示例

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

先說點什么

mybatis-plus是一款增強版的mybatis,功能強大,可以很大程度的簡化開發。然而達夢數據庫比較小眾,雖然官方說mybatis-plus支持達夢數據庫,但是使用起來遇到了很多問題。這篇文章主要講如何使用mybatis-plus訪問達夢數據庫,并使用逆向工程自動生成代碼。=。=對了 這是個使用spring boot的項目。

(配置)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>

(配置)達夢的驅動包,配置數據源

在達夢數據庫的安裝目錄下有驅動包,我們先把jar包丟進來,放到lib這個文件夾下:

MyBatis-plus+達夢數據庫實現自動生成代碼的示例

然后配置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>

到現在,所有需要的依賴就都已經導入了。

(配置)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

創建Mybatis-Plus自動生成代碼的配置類

在配置數據源的時候要注意,如果不設置數據源的類型是達夢數據庫,會無法識別。經歷了開心的看源碼環節,我們發現Mybatis中有個枚舉類DbType來標識數據庫的類型,其中有達夢數據庫的類型。(=。=竟然有)所以我們在配置類里傳個參數就好了。(=。= 不然可能就涼了)

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('請輸入' + tip + ':'); System.out.println(help.toString()); if (scanner.hasNext()) { String ipt = scanner.next(); if (StringUtils.isNotEmpty(ipt)) {return ipt; } } throw new MybatisPlusException('請輸入正確的' + 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);//達夢數據庫的配置 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生成代碼

首先我們在數據庫里創建一張表,就叫教師(teacher)表好了。達夢數據庫似乎要求表名盡量是大寫的。

MyBatis-plus+達夢數據庫實現自動生成代碼的示例

然后插入一點數據方便測試。

MyBatis-plus+達夢數據庫實現自動生成代碼的示例

運行測試類,輸入模塊名和表名,達夢數據庫要求表名是大寫的。

MyBatis-plus+達夢數據庫實現自動生成代碼的示例

不出意外,我們就生成成功了。=。=不要問為什么有個students,因為自己測試用的這個。

MyBatis-plus+達夢數據庫實現自動生成代碼的示例

測試一下

我們來簡單寫個測試類,其功能是查出教師表的所有數據,然后插入一條教師信息,然后在查一次:

@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+達夢數據庫實現自動生成代碼的示例

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

Mybatis-plus主鍵生成可能出現的問題

讓我們來看看錯誤信息:

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]非空約束

很顯然,是主鍵插入時的問題。我們看一下mybatis-plus生成的實體類。

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

其中ID的屬性設置為自動,然而如果達夢數據庫建表的時候如果沒有設置主鍵為自增。=。= 那沒準就涼了。我們看一下mybatis-plus支持哪些屬性:

@Getterpublic enum IdType { /** * 數據庫ID自增 */ AUTO(0), /** * 該類型為未設置主鍵類型(將跟隨全局) */ NONE(1), /** * 用戶輸入ID * <p>該類型可以通過自己注冊自動填充插件進行填充</p> */ INPUT(2), /* 以下3種類型、只有當插入對象ID 為空,才自動填充。 */ /** * 全局唯一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; }}

可以看出,解決這個問題最簡單的方法就是,修改IdType,使用NONE,自己傳入id(主鍵)。同樣的,在自動生成代碼的階段,我們曾經設置過

gc.setIdType(IdType.AUTO);

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

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

然后在運行代碼,多半就成了。

到此這篇關于MyBatis-plus+達夢數據庫實現自動生成代碼的示例的文章就介紹到這了,更多相關MyBatis-plus 自動生成代碼內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Mybatis 數據庫
相關文章:
主站蜘蛛池模板: 长城人品牌官网| 办公室装修_上海办公室设计装修_时尚办公新主张-后街印象 | 超声波气象站_防爆气象站_空气质量监测站_负氧离子检测仪-风途物联网 | 小型高低温循环试验箱-可程式高低温湿热交变试验箱-东莞市拓德环境测试设备有限公司 | 成都装修公司-成都装修设计公司推荐-成都朗煜装饰公司 | 河南彩印编织袋,郑州饲料编织袋定制,肥料编织袋加工厂-盛军塑业 河南凯邦机械制造有限公司 | 深圳宣传片制作_产品视频制作_深圳3D动画制作公司_深圳短视频拍摄-深圳市西典映画传媒有限公司 | 污水/卧式/潜水/钻井/矿用/大型/小型/泥浆泵,价格,参数,型号,厂家 - 安平县鼎千泵业制造厂 | 南京种植牙医院【官方挂号】_南京治疗种植牙医院那个好_南京看种植牙哪里好_南京茀莱堡口腔医院 尼龙PA610树脂,尼龙PA612树脂,尼龙PA1010树脂,透明尼龙-谷骐科技【官网】 | 折弯机-刨槽机-数控折弯机-数控刨槽机-数控折弯机厂家-深圳豐科机械有限公司 | 「钾冰晶石」氟铝酸钾_冰晶石_氟铝酸钠「价格用途」-亚铝氟化物厂家 | 四川成人高考_四川成考报名网 | 臭氧灭菌箱-油桶加热箱-原料桶加热融化烘箱-南京腾阳干燥设备厂 臭氧发生器_臭氧消毒机 - 【同林品牌 实力厂家】 | 元拓建材集团官方网站 | 西安标准厂房_陕西工业厂房_西咸新区独栋厂房_长信科技产业园官方网站 | 磁力加热搅拌器-多工位|大功率|数显恒温磁力搅拌器-司乐仪器官网 | 临沂招聘网_人才市场_招聘信息_求职招聘找工作请认准【马头商标】 | 污水处理设备维修_污水处理工程改造_机械格栅_过滤设备_气浮设备_刮吸泥机_污泥浓缩罐_污水处理设备_污水处理工程-北京龙泉新禹科技有限公司 | 据信,上课带着跳 D 体验-别样的课堂刺激感受引发网友热议 | 多米诺-多米诺世界纪录团队-多米诺世界-多米诺团队培训-多米诺公关活动-多米诺创意广告-多米诺大型表演-多米诺专业赛事 | 石家庄网站建设|石家庄网站制作|石家庄小程序开发|石家庄微信开发|网站建设公司|网站制作公司|微信小程序开发|手机APP开发|软件开发 | 北京环球北美考试院【官方网站】|北京托福培训班|北京托福培训 | 净水器代理,净水器招商,净水器加盟-FineSky德国法兹全屋净水 | 安全光栅|射频导纳物位开关|音叉料位计|雷达液位计|两级跑偏开关|双向拉绳开关-山东卓信机械有限公司 | 热熔胶网膜|pes热熔网膜价格|eva热熔胶膜|热熔胶膜|tpu热熔胶膜厂家-苏州惠洋胶粘制品有限公司 | 工程管道/塑料管材/pvc排水管/ppr给水管/pe双壁波纹管等品牌管材批发厂家-河南洁尔康建材 | 电子海图系统-电梯检验系统-智慧供热系统开发-商品房预售资金监管系统 | 湖州织里童装_女童男童中大童装_款式多尺码全_织里儿童网【官网】-嘉兴嘉乐网络科技有限公司 | 撕碎机_轮胎破碎机_粉碎机_回收生产线厂家_东莞华达机械有限公司 | 不锈钢复合板厂家_钛钢复合板批发_铜铝复合板供应-威海泓方金属复合材料股份有限公司 | 岩棉切条机厂家_玻璃棉裁条机_水泥基保温板设备-廊坊鹏恒机械 | 不锈钢列管式冷凝器,换热器厂家-无锡飞尔诺环境工程有限公司 | 法兰连接型电磁流量计-蒸汽孔板节流装置流量计-北京凯安达仪器仪表有限公司 | 散热器-电子散热器-型材散热器-电源散热片-镇江新区宏图电子散热片厂家 | 瓶盖扭矩仪(扭力值检测)-百科| 苏州同创电子有限公司 - 四探针测试仪源头厂家 | LZ-373测厚仪-华瑞VOC气体检测仪-个人有毒气体检测仪-厂家-深圳市深博瑞仪器仪表有限公司 | 恒压供水控制柜|无负压|一体化泵站控制柜|PLC远程调试|MCGS触摸屏|自动控制方案-联致自控设备 | 冲击式破碎机-冲击式制砂机-移动碎石机厂家_青州市富康机械有限公司 | 东莞爱加真空科技有限公司-进口真空镀膜机|真空镀膜设备|Polycold维修厂家 | 蓝鹏测控平台 - 智慧车间系统 - 车间生产数据采集与分析系统 |