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