本節課進行SpringBoot整合Mybatis3.0註解的實戰,
首先新建一個空項目,建好實體類,mapper,service等,項目地址:源碼地址:https://gitee.com/xuxinsunqizheng/SpringBoot2.0.git ,下面是表的sql腳本
CREATE TABLE `user` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(128) DEFAULT NULL COMMENT '名稱',
`phone` varchar(16) DEFAULT NULL COMMENT '用戶手機號',
`create_time` datetime DEFAULT NULL COMMENT '創建時間',
`age` int(4) DEFAULT NULL COMMENT '年齡',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=18 DEFAULT CHARSET=utf8;
項目結構:
第一步:在pom文件中加入相關依賴
<!-- 引入starter-->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.2</version>
<scope>runtime</scope>
</dependency>
<!-- MySQL的JDBC驅動包 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<!-- 引入第三方數據源 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.6</version>
</dependency>
第二步:加入配置文件
方式一:perpropeties:
#可以自動識別
#spring.datasource.driver-class-name =com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/movie?useUnicode=true&characterEncoding=utf-8
spring.datasource.username =root
spring.datasource.password =password
#如果不使用默認的數據源 (com.zaxxer.hikari.HikariDataSource)
spring.datasource.type =com.alibaba.druid.pool.DruidDataSource
方拾二:yml:
spring:
datasource:
name: test
url: jdbc:mysql://127.0.0.1:3306/crm
username: root
password: 123456
# 使用druid數據源
type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: com.mysql.jdbc.Driver
spring.datasource.driver-class-name:告訴Spring使用的驅動是什麼,不過SpringBoot可以自動識別,不需要告訴他spring.datasource.url:數據庫地址
spring.datasource.username =root 用戶名
spring.datasource.password =password:密碼
spring.datasource.type =com.alibaba.druid.pool.DruidDataSource:指定數據源, 如果不使用默認的數據源 (com.zaxxer.hikari.HikariDataSource)
然後在我們加載配置的時候注入到sqlSessionFactory等都是springBoot幫我們完成
第三步:啓動類增加mapper掃描
早點的時間是直接在Mapper類上面添加註解@Mapper,這種方式要求每一個mapper類都需要添加此註解,比較麻煩。
現在通過使用@MapperScan可以指定要掃描的Mapper類的包的路徑
在啓動類中加入@MapperScan("net.xdclass.base_project.mapper"),掃描mapper接口下的包,也就是mapper接口的全路徑
注意:如果掃描多個包的時候要用逗號隔開
第四步:開發mapper
1.註解方式:
使用註解方式就比較方便,不需要寫xml文件,只需要在mapper接口中對應的接口使用註解查詢就行,比如我們插入一個User:
//推薦使用#{}取值,不要用${},因爲存在注入的風險
@Insert("INSERT INTO user(name,phone,create_time,age) VALUES(#{name}, #{phone}, #{createTime},#{age})")
@Options(useGeneratedKeys=true, keyProperty="id", keyColumn="id") //keyProperty java對象的屬性;keyColumn表示數據庫的字段
int insert(User user);
使用@Options註解獲取插入之後的主鍵值,keyProperty表示 java對象的屬性;keyColumn表示數據庫的字段。
2.xml方法:
相對於註解方式,本人還是比較習慣xml配置方式進行mybatis的開發,使用xml開發只需要在配置文件中加入下面兩個配置:
## 該配置節點爲獨立的節點,有很多同學容易將這個配置放在spring的節點下,導致配置無法被識別
mybatis:
mapper-locations: classpath:mapping/*.xml #注意:一定要對應mapper映射xml文件的所在路徑
type-aliases-package: net.xdclass.base_project.domain # 注意:對應實體類的路徑
mapper-locations: classpath:mapping/*.xml 這是mapper接口對應的xml文件的路徑,注意:如果mapper接口與xml配置文件在同一目錄下那麼可以不加這個配置
type-aliases-package: net.xdclass.base_project.domain 這是實體類的包路徑
第五步:測試
寫一個查詢方法,一個插入方法分別測試上面兩種mapper開發方式:
controller代碼:
package net.xdclass.base_project.controller;
import java.util.Date;
import net.xdclass.base_project.domain.JsonData;
import net.xdclass.base_project.domain.User;
import net.xdclass.base_project.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/api/v1/user")
public class UserController {
@Autowired
private UserService userService;
/**
* 功能描述: user 保存接口
* @return
*/
@GetMapping("add")
public Object add(){
User user = new User();
user.setAge(11);
user.setCreateTime(new Date());
user.setName("xdclass");
user.setPhone("10010000");
int id = userService.add(user);
return JsonData.buildSuccess(id);
}
/**
* 功能描述: 查詢api
* @return
*/
@GetMapping("select")
public Object select(){
User user = userService.findById(19);
return JsonData.buildSuccess(user);
}
}
service代碼:
package net.xdclass.base_project.service;
import net.xdclass.base_project.domain.User;
public interface UserService {
public int add(User user);
public User findById(Integer id);
}
package net.xdclass.base_project.service.impl;
import java.util.Date;
import net.xdclass.base_project.domain.User;
import net.xdclass.base_project.mapper.UserMapper;
import net.xdclass.base_project.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@Service
public class UserServiceImpl implements UserService{
@Autowired
private UserMapper userMapper;
@Override
public int add(User user) {
userMapper.insert(user);
int id = user.getId();
return id;
}
@Override
public User findById(Integer id) {
return userMapper.findById(id);
}
}
mapper接口:
package net.xdclass.base_project.mapper;
import net.xdclass.base_project.domain.User;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Options;
/**
* 功能描述:訪問數據庫的接口
*
* <p> 創建時間:May 6, 2018 3:51:49 PM </p>
*
*@作者 小D課堂 小D
*/
public interface UserMapper {
//推薦使用#{}取值,不要用${},因爲存在注入的風險
@Insert("INSERT INTO user(name,phone,create_time,age) VALUES(#{name}, #{phone}, #{createTime},#{age})")
@Options(useGeneratedKeys=true, keyProperty="id", keyColumn="id") //keyProperty java對象的屬性;keyColumn表示數據庫的字段
int insert(User user);
User findById(Integer id);
}
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="net.xdclass.base_project.mapper.UserMapper" >
<resultMap id="BaseResultMap" type="net.xdclass.base_project.domain.User" >
<id column="id" property="id" jdbcType="INTEGER" />
<result column="name" property="name" jdbcType="VARCHAR" />
<result column="phone" property="phone" jdbcType="VARCHAR" />
<result column="create_time" property="createTime" jdbcType="TIMESTAMP" />
<result column="age" property="age" jdbcType="INTEGER" />
</resultMap>
<sql id="Base_Column_List" >
id, name, phone,create_time,age
</sql>
<select id="findById" resultMap="BaseResultMap" parameterType="java.lang.Integer" >
select
<include refid="Base_Column_List" />
from user
where id = #{id}
</select>
</mapper>
啓動項目分別訪問http://localhost:8080/api/v1/user/add,http://localhost:8080/api/v1/user/select,測試成功!
相關資料:
http://www.mybatis.org/spring-boot-starter/mybatis-spring-boot-autoconfigure/#Configuration
http://www.mybatis.org/mybatis-3/zh/java-api.html
整合問題集合:
https://my.oschina.net/hxflar1314520/blog/1800035
https://blog.csdn.net/tingxuetage/article/details/80179772