SpringBoot2.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  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值