說明
之前學習了mybatis之後沒有做記錄,在前幾天做一個題庫系統時,剛好要用到mybatis,因爲之前做東西時用的jpa,mybatis沒怎麼去用,導致有些知識點想不起來,在使用mybatis出現了一些低級的錯誤,現將mybatis的學習筆記記錄在這裏,以便日後查看,本文會持續更新,不斷地擴充
本文僅爲記錄學習軌跡,如有侵權,聯繫刪除
一、mybatis簡介
MyBatis是一流的持久性框架,支持自定義SQL,存儲過程和高級映射。MyBatis消除了幾乎所有的JDBC代碼以及參數的手動設置和結果檢索。MyBatis可以使用簡單的XML或註釋進行配置,並將圖元,映射接口和Java POJO(普通的舊Java對象)映射到數據庫記錄。
個人理解mybatis就是在JDBC的基礎上做了一層封裝,具體概念可以參考mybatis官網:mybatis官網鏈接
二、mybatis簡單入門
對於mybatis的入門,個人是覺得比較簡單的,只要實現了對數據庫的CURD操作,基本就可以說是入門了,這裏用springboot+mybatis的一個簡單例子作爲入門案例。
(1)數據庫創建
--注意:先創建一個數據庫,再執行下面的語句
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`username` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '用戶名稱',
`birthday` datetime(0) NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP(0) COMMENT '生日',
`sex` char(1) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '性別',
`address` varchar(256) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '地址',
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 51 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of user
-- ----------------------------
INSERT INTO `user` VALUES (1, '灰太狼', '2020-05-20 21:04:20', '男', '狼堡');
INSERT INTO `user` VALUES (2, '喜羊羊', '2020-05-31 21:03:50', '男', '羊村');
INSERT INTO `user` VALUES (3, '美羊羊', '2020-05-23 21:04:41', '女', '羊村');
INSERThuanc INTO `user` VALUES (4, '懶羊羊', '2020-05-20 21:05:08', '男', '羊村');
INSERT INTO ch`user` VALUES (5, '瀟灑哥', '2019-12-11 21:05:50', '男', '古古怪界');
INSERT INTO `user` VALUES (6, '黑大帥', '2019-11-01 21:06:18', '男', '古古怪界');
創建好的數據庫如圖:
(2)創建springboot項目
引入如下依賴,下面是本人使用mybatis時常用的一些依賴,像數據源springboot有自己的默認的數據源,但本人更喜歡用Druid這個數據源
<!-- mybatis-spring-boot-starter :整合-->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.2</version>
</dependency>
<!--Druid-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.21</version>
</dependency>
<!--log4j:日誌框架,建議引入-->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
<!--mysql-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<!--lombok-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
配置文件(application.yml)
#參考鏈接:https://www.cnblogs.com/hellokuangshen/p/12497041.html
#參考鏈接:https://www.cnblogs.com/hellokuangshen/p/12503200.html
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/test4?userSSL=false&useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT%2B8
password: 123
username: root
#切換爲druid數據源
type: com.alibaba.druid.pool.DruidDataSource
#Spring Boot 默認是不注入這些屬性值的,需要自己綁定
#druid 數據源專有配置
initialSize: 5
minIdle: 5
maxActive: 20
maxWait: 60000
timeBetweenEvictionRunsMillis: 60000
minEvictableIdleTimeMillis: 300000
validationQuery: SELECT 1 FROM DUAL
testWhileIdle: true
testOnBorrow: false
testOnReturn: false
poolPreparedStatements: true
#配置監控統計攔截的filters,stat:監控統計、log4j:日誌記錄、wall:防禦sql注入
#如果允許時報錯 java.lang.ClassNotFoundException: org.apache.log4j.Priority
#則導入 log4j 依賴即可,Maven 地址:https://mvnrepository.com/artifact/log4j/log4j
#需要導入log4j依賴
filters: stat,wall,log4j
maxPoolPreparedStatementPerConnectionSize: 20
useGlobalDataSourceStat: true
connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=500
#整合mybatis
#type-aliases-package:要掃描的實體類(與數據庫表對應)的位置
#mapper-locations:寫sql語句的地方,與待會要寫持久層接口對應
mybatis:
type-aliases-package: com.zsc.domain
mapper-locations: classpath:mybatis/mapper/*.xml
(3)增刪改查操作
創建實體類
編寫持久層接口
編寫sql語句
注意:這裏有個重點,如果實體類的成員變量名稱與數據表的字段名稱一模一樣的話可以不做數據庫表和實體類的映射,mybatis會自動根據字段封裝數據,如果有些字段跟數據庫表字段名稱不一致,則需要做數據庫表和實體類的映射,否則會封裝不上數據,這裏建議把映射都做上去。
關於數據庫表和實體類的映射
<!-- id是自己起的一個別名,type爲要映射的實體類-->
<resultMap id = "userMap" type = "com.zsc.domain.User">
<!-- <id></id>標籤是主鍵的映射,<result></result>是非主鍵的字段映射-->
<id column="id" property="id"></id>
<result column="username" property="userName"></result>
<result column="birthday" property="birthday"></result>
<result column="sex" property="sex"></result>
<result column="address" property="address"></result>
</resultMap>
運行測試
測試查詢所有數據,其餘測試就不在這裏展示
(4)總結
步驟:
(1)導入相關依賴
(2)創建與數據庫表一致的實體類,類的成員變量名字儘量與表字段名稱一致,如果不一致,則需要做數據表和實體類的映射(在xml文件配置),這裏建議每次都做一下映射
(3)創建持久層接口(UserMapper)
(4)創建與持久層接口對應的配置文件(xml文件),在裏面寫sql語句,實現增刪改查
注意:文件的創建要根據application.yml裏面的配置來創建