[TOC]
002-集成mybatis以及orm框架和插件的個(gè)人看法
文章來(lái)源:臨窗旋墨的博客
1-orm框架選擇和插件的個(gè)人看法
? 在springboot中使用jpa已經(jīng)非常的方便了,當(dāng)然也需要額外的花點(diǎn)學(xué)習(xí)的成本. 但是我個(gè)人是不大喜歡JPA這套規(guī)范下的代碼的,有太多的不可控因素,對(duì)于研究不深的人使用起來(lái)就是災(zāi)難. 曾使用hiberndate的時(shí)候就遇到過(guò)持久代持續(xù)增長(zhǎng)和級(jí)聯(lián)查詢IO過(guò)頻等問(wèn)題,暫且不表. JPA唯一的好處,我個(gè)人看來(lái)是對(duì)單表的操作,當(dāng)關(guān)聯(lián)關(guān)系復(fù)雜時(shí),從優(yōu)化層面就難以控制了(限于本人水平有限). 當(dāng)然JPA也支持原生的sql,但是和相比于已經(jīng)很難看的xml里的sql, 注解里的sql的可讀性就更差了,所以放棄了JAP.
? 放棄了JPA势似, 也不是完全代碼mybatis就一定有多好; 比如, 首先就是移植性不好嗓节, 這個(gè)也暫且忽略吧。 另外當(dāng)表結(jié)構(gòu)發(fā)生變化的時(shí)候,修改起來(lái)也是非常麻煩的, 需要手動(dòng)一處處的修改魂角; 另外在xml中寫sql,個(gè)人感官也比較一般智绸, 看著也不是那么的舒服野揪。 不過(guò)我個(gè)人還是稍微傾向于自己手動(dòng)編寫sql, 可控性稍微強(qiáng)一些瞧栗。
? 選擇mybatis時(shí)也有一點(diǎn)小小的糾結(jié),就是是否需要使用tk.mybatis或者mybatis-plus等,想了很久,決定全部放棄斯稳。基于個(gè)人對(duì)二者了解程度有限迹恐,單純覺(jué)得兩者都要寫實(shí)體上寫注解, 使DO(data obejct) 和VO界限不清,如果完全區(qū)分VO和DO 則又需要中間一層的轉(zhuǎn)換,而使用DO作為VO, 難免有需要對(duì)對(duì)象做一些調(diào)整. 雖然二者都可以結(jié)合generator自動(dòng)生成代碼,但是個(gè)人還是不喜歡(大概是雞蛋里挑骨頭吧).
? 最終還是堅(jiān)持選擇了原生的mybatis,但是個(gè)人也會(huì)寫一個(gè)代碼生成器(在后續(xù)得空在記錄下來(lái)吧),生成簡(jiǎn)單的增刪改查等根據(jù)業(yè)務(wù)需要使用的通用單表處理. 如此自主程度會(huì)更高.
2-集成mybatis
2.1-創(chuàng)建數(shù)據(jù)庫(kù)(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)建時(shí)間',
`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ù)庫(kù)和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-啟動(dòng)類開(kāi)啟掃描mapper注解
@MapperScan(basePackages = "pers.vic.boot.console.**.mapper")
2.5 測(cè)試mybatis
-
建表
-- 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)建時(shí)間', `update_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (`id`) ) ENGINE=INNODB DEFAULT CHARSET=utf8 COMMENT='測(cè)試mybatis的表' ;
- 編寫xml 略
- mapper略
- service 略
3-集成分頁(yè)插件
-
依賴
<dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper-spring-boot-starter</artifactId> </dependency>
-
配置文件修改
pagehelper.helper-dialect=mysql #pagehelper.reasonable=false #pagehelper.support-methods-arguments=false #pagehelper.params=count=countsql
使用插件,在service中查詢之前
PageHelper.startPage(pageNum, pageSize);
文章來(lái)源:臨窗旋墨的博客