SpringBoot2.X學習第十八課(SpringBoot.X整合Mybatis3.0)

本節課進行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

源碼地址:https://gitee.com/xuxinsunqizheng/SpringBoot2.0.git  

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章