天天看點

Spring Boot學習筆記:(四)整合Mybatis

Mybatis是國内使用較為廣泛的ORM架構,本文将簡要介紹Spring Boot中整合Mybatis的步驟。

一、準備

1.1 導入依賴

首先需要導入Mybatis和MySQL相關依賴:

<dependency>
	<groupId>org.mybatis.spring.boot</groupId>
	<artifactId>mybatis-spring-boot-starter</artifactId>
	<version>1.1.1</version>
</dependency>

<dependency>
	<groupId>mysql</groupId>
	<artifactId>mysql-connector-java</artifactId>
	<version>5.1.21</version>
</dependency>
           

(Spring Boot啟動相關依賴此處省略)

注:

MyBatis-Spring-Boot-Starter依賴将會提供如下
  • 自動檢測現有的DataSource
  • 将建立并注冊SqlSessionFactory的執行個體,該執行個體使用SqlSessionFactoryBean将該DataSource作為輸入進行傳遞
  • 将建立并注冊從SqlSessionFactory中擷取的SqlSessionTemplate的執行個體。

    自動掃描您的mappers,将它們連結到SqlSessionTemplate并将其注冊到Spring上下文,以便将它們注入到您的bean中。

    就是說,使用了該Starter之後,隻需要定義一個DataSource即可(application.properties中可配置),它會自動建立使用該DataSource的SqlSessionFactoryBean以及SqlSessionTemplate。會自動掃描你的Mappers,連接配接到SqlSessionTemplate,并注冊到Spring上下文中。

1.2、建立資料庫

CREATE TABLE `tbl_user` (
  `id` int(8) NOT NULL AUTO_INCREMENT COMMENT '主鍵自增',
  `name` varchar(50) NOT NULL COMMENT '使用者名',
  `age` int(50) NOT NULL COMMENT '年齡',
   `age` varchar(50) NOT NULL COMMENT '手機号',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='使用者表';
           

1.3、資料源配置

在resources/application.properties下進、資料源配置:

# mysql資料源配置
spring.datasource.url=jdbc:mysql://localhost:3306/springboot_database
spring.datasource.username=root
spring.datasource.password=920614
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
           

接下來看看如何進行代碼實操。

二、整合Mybatis

2.1 實體類

首先建立一個與表

tbl_user

對應的實體類:

package com.wgs.springboot.mybatis.bean;

import lombok.Data;

/**
 * Created by wanggenshen
 * Date: on 2018/7/14 15:48.
 * Description: XXX
 */
Data
public class User {

    private int id;
    private String name;
    private int age;
    private String phone;

    public User(){}

    public User(String name, int age, String phone) {
        this.name = name;
        this.age = age;
        this.phone = phone;
    }
}

           

2.2 持久層

同樣,MyBatis提供了注解與XML兩種方式。首先看下注解配置的方式:

1、 注解方式

主要提供了

@Insert

@Select

@Update

@Delete

四種注解來實作我們常用的CRUD操作。

package com.wgs.springboot.mybatis.dao;

import com.wgs.springboot.mybatis.bean.User;
import org.apache.ibatis.annotations.*;

/**
 * Created by wanggenshen
 * Date: on 2018/7/14 15:48.
 * Description: XXX
 */
Mapper
public interface UserMapper {

    String TABLE_NAME = "tbl_user";
    String INSERT_FIELDS = "name,age,phone";
    String ALL_FIELDS = "id" + INSERT_FIELDS;

    @Insert({"INSERT INTO", TABLE_NAME, "(", INSERT_FIELDS, ")", "VALUES(#{name}, #{age}, #{phone})"})
    int  insertUser(User user);

    @Select({"SELECT * FROM", TABLE_NAME, "WHERE name = #{name}" })
    User getUserByName(@Param("name") String name);

    @Update({"UPDATE", TABLE_NAME, "SET name = #{name} WHERE id = #{id}"})
    int updateUser(User user);

    @Delete("DELETE FROM tbl_user where name=#{name}")
    int deleteUserByName(String name);

}

           

測試:

package com.wgs.springboot;

import com.wgs.springboot.mybatis.bean.User;
import com.wgs.springboot.mybatis.dao.UserMapper;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

import javax.annotation.Resource;

@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest
public class SpringbootMybatisDemoTest {


    @Autowired
    private UserMapper userMapper;

    @Test
    public void testInsert1() {
        User user = new User();
        user.setName("dd");
        user.setAge(22);
        user.setPhone("18912340987");
        int result = userMapper.insertUser(user);
        System.out.println(result);
    }


    @Test
    public void testGet1() {
        User user = userMapper.getUserByName("aa");
        System.out.println(user);
    }

    @Test
    public void testUpdate1() {
        User user = userMapper.getUserByName("bb");
        user.setName("bbUupdate");
        int res = userMapper.updateUser(user);
        System.out.println(res);
        user = userMapper.getUserByName("bbUupdate");
        System.out.println(user);
    }


    @Test
    public void testDelete1() {
        int res = userMapper.deleteUserByName("dd");
        System.out.println(res);
    }

}

           

2、 XML配置

我們在原有Mapper中增加一個使用XML配置的方法。

首先需要在application.properties添加mapper掃描的配置:

# xxxMapper.xml所在的位置 (注:要與dao所在的包對應)
mybatis.mapper-locations=classpath*:com/wgs/springboot/mybatis/dao/*Mapper.xml
mybatis.type-aliases-package=com.wgs.springboot.mybatis.bean

# 駝峰命名規範 如:資料庫字段是  order_id 那麼 實體字段就要寫成 orderId(如果不配置此項,可以在xml中進行配置即可)
# mybatis.configuration.map-underscore-to-camel-case=true
           

由于*Mapper.xml中的内容在打包的時候是不會複制到class輸出目錄對應Mapper類所在的包中,是以需要在pom.xml中添加Mybatis加載配置檔案的配置:

(或者放在resources下即可)

<build>
		<resources>
			<resource>
				<directory>src/main/resources</directory>
			</resource>
			<resource>
				<directory>src/main/java</directory>
				<includes>
					<include>**/*.xml</include>
				</includes>
				<filtering>true</filtering>
			</resource>
		</resources>
	</build>

           

之後在UserMapper.java中新增一個方法:

User getInvalidUser(@Param("name") String name, @Param("age") int age);
           

在UserMapper.xml中進行實作:

<?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="com.wgs.springboot.mybatis.dao.UserMapper">

    <select id="getInvalidUser"  parameterType="Map" resultType="com.wgs.springboot.mybatis.bean.User">
        SELECT FROM `tbl_user` where age = #{age} and name = #{name}
    </select>

</mapper>
           

測試同上。

注:

(1)如果啟動過程中出現

org.apache.ibatis.binding.BindingException: Invalid bound statement (not found):

的錯誤,是由于Mapper類與xml檔案定義對不上,需要檢查包名、配置等;

(2)Mac下MySQL忘記root賬戶忘記密碼的操作:

  • (1)關閉mysql服務: 蘋果->系統偏好設定->最下邊點mysql 在彈出頁面中 關閉mysql服務(點選stop mysql server);
  • (2)進入終端輸入:cd /usr/local/mysql/bin/
  • (3)回車後 登入管理者權限 sudo su
  • (4)回車後輸入以下指令來禁止mysql驗證功能

    ./mysqld_safe --skip-grant-tables &

    回車後mysql會自動重新開機(偏好設定中mysql的狀态會變成running);

  • (5)輸入指令

    ./mysql

    ;
  • (6)回車後,輸入指令

    FLUSH PRIVILEGES

    ;
  • (7)回車後,輸入指令

    SET PASSWORD FOR 'root'@'localhost' = PASSWORD('你的新密碼')

    ;

    如:

SET PASSWORD FOR 'root'@'localhost' = PASSWORD('123456');
           

連結:

https://blog.csdn.net/ydxzmhy/article/details/53454499

繼續閱讀