一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - MyBatis-plus+達夢數據庫實現自動生成代碼的示例

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

2020-08-26 00:10筱寧zvj Java教程

這篇文章主要介紹了MyBatis-plus+達夢數據庫實現自動生成代碼的示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

先說點什么

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

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
<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文件:

?
1
2
3
4
5
6
7
<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文件

?
1
2
3
4
5
6
7
8
9
10
11
spring.datasource.url=
spring.datasource.username=
spring.datasource.password=
spring.datasource.driver-class-name=dm.jdbc.driver.DmDriver
 
mybatis-plus.configuration.cache-enabled=true
mybatis-plus.mapper-locations=classpath*:mappers/*.xml
mybatis-plus.type-aliases-package=com.example.demo.extity.*
mybatis-plus.configuration.map-underscore-to-camel-case=true
mybatis-plus.configuration.auto-mapping-behavior=full
mybatis-plus.global-config.banner=false

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

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

?
1
dsc.setDbType(DbType.DM);

配置類代碼:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
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+達夢數據庫實現自動生成代碼的示例

測試一下

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest
public 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主鍵生成可能出現的問題

讓我們來看看錯誤信息:

?
1
2
3
4
5
6
7
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生成的實體類。

?
1
2
@TableId(value = "ID", type = IdType.AUTO)
  private Integer id;

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
@Getter
public 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(主鍵)。
同樣的,在自動生成代碼的階段,我們曾經設置過

?
1
gc.setIdType(IdType.AUTO);

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

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

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

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

原文鏈接:https://blog.csdn.net/xiaoningzvj/article/details/103028988

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 久久精品小视频 | 成人另类视频 | 欧美成人aletta ocean | 无人区在线观看免费国语完整版 | 久久99r66热这里有精品 | 黄篇网站在线观看 | 日本xxxx19| 青草国内精品视频在线观看 | 亚洲zooz人禽交xxxx | 全肉一女n男np高h乳 | 国产精品天天看天天爽 | 日本性生活免费看 | 国产成人亚洲精品一区二区在线看 | 校园全黄h全肉细节文 | 免费看黄色片的网站 | 天天久久综合网站 | 男人的天堂视频在线 | 成人网免费视频 | 22sihu国产精品视频影视资讯 | 被老外玩爽的中国美女视频 | www.久久精品视频 | 吃瓜视频在线观看 | 99re这里只有精品在线观看 | 国产亚洲欧美成人久久片 | 狠狠色伊人亚洲综合网站色 | 国产伊人网 | 大学生宿舍飞机china free | 精品国产美女AV久久久久 | 交换朋友夫妇3中文字幕 | 日韩免费观看成第15集 | 亚洲国产精品高清在线 | 色天天色综合 | 驯服有夫之妇HD中字日本 | 日韩综合久久 | 性xxxx中国 | 狐媚小说 | 亚洲 色 欧美 爱 视频 日韩 | jizz中国jizz老师水多 | 国产成人精选免费视频 | 久久成人伊人欧洲精品AV | 黄绝一级 |