Mybatis是一個支持定制化SQL、存儲過程及高級映射的持久化框架。 -- Mybatis官方
開始之前:
首先安裝Mysql數(shù)據(jù)庫,創(chuàng)建數(shù)據(jù)庫并建表user如下,同時自行創(chuàng)建對應(yīng)的VO:
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT 'ID',
`avatar_id` bigint DEFAULT NULL COMMENT '頭像',
`email` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '郵箱',
`enabled` bigint DEFAULT NULL COMMENT '狀態(tài):1啟用、0禁用',
`password` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '密碼',
`username` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '用戶名',
`phone` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '手機號碼',
`create_time` datetime DEFAULT NULL COMMENT '創(chuàng)建日期',
`last_password_reset_time` datetime DEFAULT NULL COMMENT '最后修改密碼的日期',
`nick_name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,
`sex` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,
PRIMARY KEY (`id`) USING BTREE,
UNIQUE KEY `UK_kpubos9gc2cvtkb0thktkbkes` (`email`) USING BTREE,
UNIQUE KEY `username` (`username`) USING BTREE,
KEY `FKpq2dhypk2qgt68nauh2by22jb` (`avatar_id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8 ROW_FORMAT=COMPACT COMMENT='系統(tǒng)用戶';
SET FOREIGN_KEY_CHECKS = 1;
1.添加依賴
Mysbatis需要以數(shù)據(jù)庫驅(qū)動作為前提,因此,此處同時添加了Mysql驅(qū)動。
<!--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>
<version>1.3.2</version>
</dependency>
2.添加Dao接口
在啟動類所在路徑添加dao或mapper包用以存放Dao操作的接口。在該包中創(chuàng)建UserMapper.java接口,代碼如下:
package online.yuluo.demo.mapper;
@Repository
public interface UserMapper {
// @Select("select * from user")
List<User> queryUsers(User user);
}
簡析:
-
@Repository是@Component的子注解,能使該接口注冊為Bean; - Mybatis也提供了注解來應(yīng)對一些CURD操作,因此,
@Select注解可以取代第三步的XML配置操作,二選一即可。這里建議簡單的操作可通過注解形式完成,復(fù)雜的操作還是使用XML配置來完成。
3.添加配置文件
在resource資源文件夾中創(chuàng)建mapper文件夾用以存放Mybatis對應(yīng)的XML配置文件。
在mapper文件夾創(chuàng)建名為UserMapper.xml的文件,內(nèi)容如下:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="online.yuluo.demo.mapper.UserMapper">
<select id="queryUsers"
resultType="online.yuluo.demo.domain.User">
SELECT * from user
</select>
</mapper>
簡析:
- 工作空間
namespace字段的值對應(yīng)第二步中dao接口的相對路徑; - 查詢操作的ID名稱對應(yīng)接口中的方法名稱;
- 返回值類字段型
resultType對應(yīng)接口返回值類型對象的相對路徑。
4.添加項目全局配置
在項目配置文件application.properties或application.yml中添加數(shù)據(jù)庫連接信息及Mybatis映射信息:
spring:
datasource:
url: jdbc:mysql://localhost:3306/blog?useSSL=false&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&serverTimezone=Asia/Shanghai&useSSL=false # 數(shù)據(jù)庫URL
username: root # 數(shù)據(jù)庫用戶名
password: ***** # 數(shù)據(jù)庫密碼
driver-class-name: com.mysql.jdbc.Driver
mybatis:
mapper-locations: classpath:mapper/*.xml #Mybatis的XML配置文件地址
type-aliases-package: online.yuluo.demo.domain #實體對象地址
注意 :
- MySQL6.0之后的連接驅(qū)動名稱為
com.mysql.cj.jdbc.Driver - URL設(shè)置東八區(qū):serverTimezone=Asia/Shanghai
5.添加Mapper掃描
在項目啟動文件中添加Mapper掃描注解幫助系統(tǒng)發(fā)現(xiàn)mapper文件:
@SpringBootApplication
@MapperScan("online.yuluo.demo.mapper")
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
到此,Mybatis配置完成,添加Controller與service對UserMapper.queryUsers進(jìn)行調(diào)用,即可進(jìn)行簡單的測試,詳細(xì)請查看本文源碼Github
番外篇:添加Mybatis-plus
MyBatis-Plus(簡稱 MP)是一個 MyBatis 的增強工具,在 MyBatis 的基礎(chǔ)上只做增強不做改變,為簡化開發(fā)、提高效率而生。 --Mybatis-Plus文檔
修改依賴
將Mybatis依賴移除,添加Mybatis-plus的依賴。
<!--mybatis-->
<!-- <dependency>-->
<!-- <groupId>org.mybatis.spring.boot</groupId>-->
<!-- <artifactId>mybatis-spring-boot-starter</artifactId>-->
<!-- <version>1.3.2</version>-->
<!-- </dependency>-->
<!--mybatis plus-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.3.1.tmp</version>
</dependency>
修改Mapper
修改UserMapper文件繼承Mybatis-plus的BaseMapper類
public interface UserMapper extends BaseMapper<User>{
}
調(diào)用方法
@Override
public List<User> getAllUserList(){
return userMapper.selectList(null);
}
selectList方法是Mybatis plus自帶的方法,接收一個Wrapper,null表示無條件,將會返回所有數(shù)據(jù)。
源碼訪問Github
Mybatis plus更多使用方式請查看官方文檔。
番外篇:添加數(shù)據(jù)庫連接池Druid
添加依賴
<!--druid-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.12</version>
</dependency>
應(yīng)當(dāng)注意Mybatis plus自動依賴了其他連接池,因此使用Druid之前,請移除Mybatis plus,添加Mybatis依賴。
添加application.yml配置
spring:
datasource:
url: jdbc:mysql://localhost:3306/blog?useSSL=false&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&serverTimezone=Asia/Shanghai&useSSL=false # 數(shù)據(jù)庫URL
username: root # 數(shù)據(jù)庫用戶名
password: suiyu123 # 數(shù)據(jù)庫密碼
driver-class-name: com.mysql.cj.jdbc.Driver
###################以下為druid增加的配置###########################
type: com.alibaba.druid.pool.DruidDataSource
# 初始化連接池個數(shù)
initialSize: 5
# 最小連接池個數(shù),已過時,配置無用
minIdle: 2
# 最大連接池個數(shù)
maxActive: 20
# 配置獲取連接等待超時的時間,單位毫秒,缺省啟用公平鎖,并發(fā)效率會有所下降
maxWait: 60000
# 配置間隔多久才進(jìn)行一次檢測,檢測需要關(guān)閉的空閑連接,單位是毫秒
timeBetweenEvictionRunsMillis: 60000
# 配置一個連接在池中最小生存的時間,單位是毫秒
minEvictableIdleTimeMillis: 300000
# 用來檢測連接是否有效的sql,要求是一個查詢語句。
# 如果validationQuery為null,testOnBorrow、testOnReturn、testWhileIdle都不會起作用
validationQuery: SELECT 1 FROM DUAL
# 建議配置為true,不影響性能,并且保證安全性。
# 申請連接的時候檢測,如果空閑時間大于timeBetweenEvictionRunsMillis,執(zhí)行validationQuery檢測連接是否有效。
testWhileIdle: true
# 申請連接時執(zhí)行validationQuery檢測連接是否有效,做了這個配置會降低性能
testOnBorrow: false
# 歸還連接時執(zhí)行validationQuery檢測連接是否有效,做了這個配置會降低性能
testOnReturn: false
# 打開PSCache,并且指定每個連接上PSCache的大小
poolPreparedStatements: true
maxPoolPreparedStatementPerConnectionSize: 20
# 通過別名的方式配置擴展插件,多個英文逗號分隔,常用的插件有:
# 監(jiān)控統(tǒng)計用的filter:stat
# 日志用的filter:log4j 需要添加log4j依賴
# 防御sql注入的filter:wall
filters: stat,wall,config,log4j
# 通過connectProperties屬性來打開mergeSql功能;慢SQL記錄
connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
# 合并多個DruidDataSource的監(jiān)控數(shù)據(jù)
useGlobalDataSourceStat: true
mybatis:
mapper-locations: classpath:mapper/*.xml #Mybatis的XML配置文件地址
type-aliases-package: online.yuluo.demo.domain #實體對象地址
## druid config配置所需變量
druidData:
allow: 127.0.0.1
deny: 192.168.1.110
loginUsername: admin
loginPassword: admin
resetEnable: false
添加Druid 配置信息
在啟動類同目錄文件下的config文件夾中添加DruidConfig類,將其注冊為Bean,代碼如下
@Configuration
public class DruidConfig {
@Value("${druidData.allow}")
private String allow;
@Value("${druidData.deny}")
private String deny;
@Value("${druidData.loginUsername}")
private String loginUsername;
@Value("${druidData.loginPassword}")
private String loginPassword;
@Value("${druidData.resetEnable}")
private String resetEnable;
/**
* 主要實現(xiàn)WEB監(jiān)控的配置處理
*/
@Bean
public ServletRegistrationBean druidServlet() throws IOException {
// 現(xiàn)在要進(jìn)行druid監(jiān)控的配置處理操作
ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean(
new StatViewServlet(), "/druid/*");
// 白名單,多個用逗號分割, 如果allow沒有配置或者為空,則允許所有訪問
servletRegistrationBean.addInitParameter("allow", allow);
// 黑名單,多個用逗號分割 (共同存在時,deny優(yōu)先于allow)
servletRegistrationBean.addInitParameter("deny", deny);
// 控制臺用戶名
servletRegistrationBean.addInitParameter("loginUsername", loginUsername);
// 控制臺密碼
servletRegistrationBean.addInitParameter("loginPassword", loginPassword);
// 是否可以重置數(shù)據(jù)源,禁用HTML頁面上的“Reset All”功能
servletRegistrationBean.addInitParameter("resetEnable", resetEnable);
return servletRegistrationBean;
}
@Bean
public FilterRegistrationBean filterRegistrationBean() {
FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean();
filterRegistrationBean.setFilter(new WebStatFilter());
//所有請求進(jìn)行監(jiān)控處理
filterRegistrationBean.addUrlPatterns("/*");
//添加不需要忽略的格式信息
filterRegistrationBean.addInitParameter("exclusions", "*.js,*.gif,*.jpg,*.css,/druid/*");
return filterRegistrationBean;
}
@Bean
@ConfigurationProperties(prefix = "spring.datasource")
public DataSource druidDataSource() {
return new DruidDataSource();
}
}
啟動項目后,訪問http://localhost:8080/druid/index.html即可查看監(jiān)控頁面。
源碼訪問:Github
via https://blog.csdn.net/weixin_43453386/article/details/83582399