天天看點

SpringBoot學習(四)—— springboot快速整合Mybatis元件MyBatis

SpringBoot學習(一)—— idea 快速搭建 Spring boot 架構

SpringBoot學習(二)—— springboot快速整合spring security元件

SpringBoot學習(三)—— springboot快速整合swagger文檔

SpringBoot學習(四)—— springboot快速整合Mybatis元件

SpringBoot學習(五)—— springboot快速整合Druid

SpringBoot學習(六)—— springboot快速整合RabbitMQ

SpringBoot學習(七)—— springboot快速整合Redis

MyBatis

文章目錄

  • MyBatis
      • 簡介
          • 優點
          • 劣勢
      • 引入mybatis元件
      • 代碼實戰

簡介

優點

最大的優點是SQL語句靈活,适合調優情景,業務複雜情景

劣勢

最大的劣勢是不同資料庫之間的遷移

引入mybatis元件

pom.xml中加入

<dependency>
	<groupId>mysql</groupId>
	<artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency>
	<groupId>org.mybatis.spring.boot</groupId>
	<artifactId>mybatis-spring-boot-starter</artifactId>
	<version>2.1.1</version>
</dependency>
           

application.properties中加入

#dateSource
spring.datasource.driverClassName=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/test?serverTimezone=UTC&useUnicode=true&characterEncoding=utf8&useSSL=false
spring.datasource.username=root
spring.datasource.password=root


# mybatis
# 下劃線轉駝峰開啟
mybatis.configuration.map-underscore-to-camel-case=true
# mapper掃描位置
mybatis.mapper-locations=classpath:mapper/*.xml
           

需要說明的是,我引入的mysql驅動為 com.mysql.cj.jdbc.Driver,而不是 com.mysql.jdbc.Driver。以下是一些參數的說明;

  • serverTimezone:該驅動需要指定某時區。
  • useUnicode:開啟指定編碼。
  • characterEncoding:指定讀取資料庫的編碼,因為項目采用UTF-8,存取資料庫資訊時保持一緻。
  • useSSL:是否建立SSL連接配接,我顯示選的否,因為這要為伺服器證書驗證提供信任庫,暫時沒條件。

代碼實戰

本地的 mysql 版本為 5.7.20。

建表語句

CREATE TABLE USER_INFO
(
    user_id DECIMAL(10) PRIMARY KEY NOT NULL,
    user_name VARCHAR(20) DEFAULT "" NOT NULL
);
CREATE UNIQUE INDEX USER_INFO_user_id_uindex ON USER_INFO (user_id);
ALTER TABLE USER_INFO COMMENT = '使用者基本資訊表';
           

插入資料

INSERT INTO test.user_info (user_id, user_name) VALUES (1, '特朗普');
INSERT INTO test.user_info (user_id, user_name) VALUES (2, '唐納德');
           

現在的項目路徑為

SpringBoot學習(四)—— springboot快速整合Mybatis元件MyBatis

在SpringBoot的入口類中加 @MapperScan 注解,以掃描 DAO 類,不用在每個dao接口加個@Mapper 注解。

package com.example;

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
@MapperScan("com.example.dao")
public class DemoApplication {
    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }
}
           

注:如果沒有分拆項目成微服務架構,或分布式架構,application主類中的@SpringBootApplication自動會掃描本包中的@Controller,@Service,@Resource等,是不需要浪費另一行@ComponentScan注解,配置路徑的。

UserController.java

package com.example.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import com.example.service.IUserService;

@Controller
@RequestMapping("user")
public class UserController {

    @Autowired
    private IUserService userService;

    @RequestMapping("/queryUser")
    @ResponseBody
    void queryUser() {
        this.userService.queryUser();
    }

}
           

IUserService.java

package com.example.service;

public interface IUserService {
    void queryUser();
}
           

UserServiceIml.java

package com.example.service;

import com.example.dao.UserDao;
import com.example.entity.UserEntity;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.List;

@Service("userService")
public class UserServiceIml implements IUserService {

    @Resource
    private UserDao userDao;

    @Override
    public void queryUser() {
        List<UserEntity> userList = this.userDao.queryUser();
        System.out.println("================");
        System.out.println(userList);
        System.out.println("================");
    }
}

           

注:如果是SSM架構過來的,這個@Resource注解可能比較陌生,因為我估計會和我之前一樣用@Autowired,但是我是沒有在dao層用 @Repository 注解的,之前用了在主類用了@MapperScan自動去掃描所有的dao,是以不能再用之前的@Autowired。

UserDao.java

package com.example.dao;

import com.example.entity.UserEntity;
import java.util.List;

public interface UserDao {
    List<UserEntity> queryUser();
}
           

UserEntity.java

package com.example.entity;

public class UserEntity {
    private long userId;
    private String userName;

    public long getUserId() {
        return userId;
    }

    public void setUserId(long userId) {
        this.userId = userId;
    }

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }
    
    @Override
    public String toString() {
        return "UserEntity{" +
                "userId=" + userId +
                ", userName='" + userName + '\'' +
                '}';
    }
}
           

如果你運作不成功,請對比引入的包的版本,和資料庫配置是否是根據你本地的,順便看看注解是否和文中一樣。

效果圖如下;

SpringBoot學習(四)—— springboot快速整合Mybatis元件MyBatis

注:如果是跟着本教程來的,因為一開始就引入了spring security,而新增的路徑不在剛才的權限中,是以我給zs使用者改成了皆可通路。如果沒有跟着之前配置spring security,無需理會如下内容

//http.authorizeRequests().antMatchers("/user/addUser").hasRole("AAA") 
http.authorizeRequests().antMatchers("/**").hasRole("AAA") 
           

繼續閱讀