【后端】集成mybatis以及orm框架和插件的個人看法

[TOC]

002-集成mybatis以及orm框架和插件的個人看法

文章來源:臨窗旋墨的博客

1-orm框架選擇和插件的個人看法

? 在springboot中使用jpa已經(jīng)非常的方便了,當然也需要額外的花點學習的成本. 但是我個人是不大喜歡JPA這套規(guī)范下的代碼的,有太多的不可控因素,對于研究不深的人使用起來就是災(zāi)難. 曾使用hiberndate的時候就遇到過持久代持續(xù)增長和級聯(lián)查詢IO過頻等問題,暫且不表. JPA唯一的好處,我個人看來是對單表的操作,當關(guān)聯(lián)關(guān)系復(fù)雜時,從優(yōu)化層面就難以控制了(限于本人水平有限). 當然JPA也支持原生的sql,但是和相比于已經(jīng)很難看的xml里的sql, 注解里的sql的可讀性就更差了,所以放棄了JAP.

? 放棄了JPA, 也不是完全代碼mybatis就一定有多好; 比如, 首先就是移植性不好, 這個也暫且忽略吧。 另外當表結(jié)構(gòu)發(fā)生變化的時候,修改起來也是非常麻煩的, 需要手動一處處的修改; 另外在xml中寫sql,個人感官也比較一般, 看著也不是那么的舒服。 不過我個人還是稍微傾向于自己手動編寫sql, 可控性稍微強一些。

? 選擇mybatis時也有一點小小的糾結(jié),就是是否需要使用tk.mybatis或者mybatis-plus等,想了很久,決定全部放棄?;趥€人對二者了解程度有限,單純覺得兩者都要寫實體上寫注解, 使DO(data obejct) 和VO界限不清,如果完全區(qū)分VO和DO 則又需要中間一層的轉(zhuǎn)換,而使用DO作為VO, 難免有需要對對象做一些調(diào)整. 雖然二者都可以結(jié)合generator自動生成代碼,但是個人還是不喜歡(大概是雞蛋里挑骨頭吧).

? 最終還是堅持選擇了原生的mybatis,但是個人也會寫一個代碼生成器(在后續(xù)得空在記錄下來吧),生成簡單的增刪改查等根據(jù)業(yè)務(wù)需要使用的通用單表處理. 如此自主程度會更高.

2-集成mybatis

2.1-創(chuàng)建數(shù)據(jù)庫(mysql)

CREATE DATABASE boot DEFAULT CHARSET utf8;
GRANT ALL PRIVILEGES ON boot.* TO 'boot'@'localhost' IDENTIFIED BY '12345678';
-- mysql8 
-- CREATE USER 'boot'@'%' IDENTIFIED BY '12345678';
-- GRANT ALL PRIVILEGES ON boot.* TO 'boot'@'%' WITH GRANT OPTION;

FLUSH PRIVILEGES;

-- 追加相同的字段
/*
ALTER TABLE table_name ADD (
 `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '創(chuàng)建時間',
  `update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `is_enable` TINYINT(1) DEFAULT '1' COMMENT '是否啟用',
  `is_delete` TINYINT(1) DEFAULT '0' COMMENT '是否刪除'
);

*/

2.2-新增依賴

<!-- mysql連接類 -->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <scope>runtime</scope>
</dependency>

<!-- mybatis 依賴 -->
<dependency>
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
</dependency>

2.3-配置數(shù)據(jù)庫和mybatis

# mysql
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/boot?useUnicode=true&characterEncoding=utf8&serverTimezone=UTC&useSSL=true
spring.datasource.username=boot
spring.datasource.password=password

# mybatis 配置 
mybatis.config-location=classpath:config/mybatis-config.xml
mybatis.mapper-locations=classpath:mapper/**/*.xml

  • 新增mybatis-config.xml文件
<?xml version="1.0" encoding="UTF-8" ?>  
<!DOCTYPE configuration  PUBLIC "-//mybatis.org//DTD Config 3.0//EN"  "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <settings>
        <setting name="logImpl" value="STDOUT_LOGGING" />
    </settings>
</configuratio

2.4-啟動類開啟掃描mapper注解

  • @MapperScan(basePackages = "pers.vic.boot.console.**.mapper")

2.5 測試mybatis

  1. 建表

    -- ALTER TABLE test_mybatis   MODIFY COLUMN update_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP ;
    
      CREATE TABLE `test_mybatis` (
      `id` INT(11) NOT NULL AUTO_INCREMENT,
      `name` VARCHAR(64) NOT NULL,
      `create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '創(chuàng)建時間',
      `update_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
      PRIMARY KEY (`id`)
    ) ENGINE=INNODB DEFAULT CHARSET=utf8 COMMENT='測試mybatis的表'
    ;
    
    1. 編寫xml 略
    2. mapper略
    3. service 略

3-集成分頁插件

  1. 依賴

    <dependency>
        <groupId>com.github.pagehelper</groupId>
        <artifactId>pagehelper-spring-boot-starter</artifactId>
    </dependency>
    
  2. 配置文件修改

    pagehelper.helper-dialect=mysql
    #pagehelper.reasonable=false
    #pagehelper.support-methods-arguments=false
    #pagehelper.params=count=countsql
    
    
  3. 使用插件,在service中查詢之前PageHelper.startPage(pageNum, pageSize);

文章來源:臨窗旋墨的博客

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容