SpringBoot學(xué)習(xí)筆記三:添加Mybatis&Druid

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接口

在啟動類所在路徑添加daomapper包用以存放Dao操作的接口。在該包中創(chuàng)建UserMapper.java接口,代碼如下:

package online.yuluo.demo.mapper;
@Repository
public interface UserMapper  {
//    @Select("select * from user")
    List<User> queryUsers(User user);
}

簡析:

  1. @Repository@Component的子注解,能使該接口注冊為Bean;
  2. 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>

簡析:

  1. 工作空間namespace字段的值對應(yīng)第二步中dao接口的相對路徑;
  2. 查詢操作的ID名稱對應(yīng)接口中的方法名稱;
  3. 返回值類字段型resultType對應(yīng)接口返回值類型對象的相對路徑。

4.添加項目全局配置

在項目配置文件application.propertiesapplication.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 #實體對象地址

注意

  1. MySQL6.0之后的連接驅(qū)動名稱為com.mysql.cj.jdbc.Driver
  2. 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

?著作權(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ù)。

相關(guān)閱讀更多精彩內(nèi)容

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