Demo使用的是IDEA工具进行开发的,环境是JDK1.7+SpringBoot 1.5.5 换作其他版本也是一样的,差别不大。
首先使用IDEA新建一个SpringBoot项目,编译环境为JDK1.7,导入必须的jar包,pom.xml如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>boot-mybatis</name>
<description>Demo project for Spring Boot</description>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.15.BUILD-SNAPSHOT</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.7</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.2</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.datatype</groupId>
<artifactId>jackson-datatype-joda</artifactId>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.module</groupId>
<artifactId>jackson-module-parameter-names</artifactId>
</dependency>
<!-- 分页插件 -->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>1.1.2</version>
</dependency>
<!--链接池-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.0</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
<repositories>
<repository>
<id>spring-snapshots</id>
<name>Spring Snapshots</name>
<url>https://repo.spring.io/snapshot</url>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
<repository>
<id>spring-milestones</id>
<name>Spring Milestones</name>
<url>https://repo.spring.io/milestone</url>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>spring-snapshots</id>
<name>Spring Snapshots</name>
<url>https://repo.spring.io/snapshot</url>
<snapshots>
<enabled>true</enabled>
</snapshots>
</pluginRepository>
<pluginRepository>
<id>spring-milestones</id>
<name>Spring Milestones</name>
<url>https://repo.spring.io/milestone</url>
<snapshots>
<enabled>false</enabled>
</snapshots>
</pluginRepository>
</pluginRepositories>
</project>
此Demo未使用自动代码生成插件,所以下面的Maven插件并未导入。在导入必要的jar包之后,开始对项目的配置进行修改,也就是对applcation.properties进行编写
# 数据库配置
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/boot-mybatis?characterEncoding=utf8&useSSL=true
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.username=root
spring.datasource.password=62dfcwfGni
#druid 连接池的配置 可以是默认的
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.druid.filters=stat
spring.datasource.druid.max-active=20
spring.datasource.druid.initial-size=1
spring.datasource.druid.min-idle=1
spring.datasource.druid.max-wait=60000
spring.datasource.druid.time-between-eviction-runs-millis=60000
spring.datasource.druid.min-evictable-idle-time-millis=300000
spring.datasource.druid.validation-query=select 'x'
spring.datasource.druid.test-while-idle=true
spring.datasource.druid.test-on-borrow=false
spring.datasource.druid.test-on-return=false
spring.datasource.druid.pool-prepared-statements=true
spring.datasource.druid.max-open-prepared-statements=20
# mybatis 配置
mybatis.mapper-locations=classpath:mapping/*.xml #mapper文件的存放位置
mybatis.type-aliases-package=com.example.demo.entity #对应实体类的位置
pagehelper.helper-dialect=mysql
applciation.properties 配置了Druid 与 Mybatis 和数据源的配置,包括扫描mapper包的位置,实体类的位置.写好配置之后,开始新建实体类和mapper接口
package com.example.demo.entity;
/**
* Created by zy on 2018/7/21.
*/
public class User {
private Integer userId;
private String userName;
private String passWord;
private String phoneNum;
public Integer getUserId() {
return userId;
}
public void setUserId(Integer userId) {
this.userId = userId;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getPassWord() {
return passWord;
}
public void setPassWord(String passWord) {
this.passWord = passWord;
}
public String getPhoneNum() {
return phoneNum;
}
public void setPhoneNum(String phoneNum) {
this.phoneNum = phoneNum;
}
@Override
public String toString() {
return "User{" +
"userId=" + userId +
", userName='" + userName + '\'' +
", passWord='" + passWord + '\'' +
", phoneNum='" + phoneNum + '\'' +
'}';
}
}
mapper接口:
package com.example.demo.mapper;
import com.example.demo.entity.User;
import org.springframework.stereotype.Component;
import java.util.List;
/**
* Created by zy on 2018/7/21.
*/
@Component
public interface UserMapper {
User selectByPrimaryKey(Integer userId);
int deleteByPrimaryKey(Integer userId);
List<User> selectAll();
int insert(User user);
int insertSelective(User user);
int updateByPrimaryKeySelective(User user);
int updateByPrimaryKey(User user);
}
然后新建Controller与Service ,Serviceimpl
package com.example.demo.controller;
import com.example.demo.entity.User;
import com.example.demo.mapper.UserMapper;
import com.example.demo.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
/**
* Created by zy on 2018/7/23.
*/
@Controller
public class UserController {
@Autowired
private UserService userService;
@RequestMapping("/get_one")
@ResponseBody
public User getOne(Integer userId){
return userService.selectByPrimaryKey(userId);
}
}
package com.example.demo.service;
import com.example.demo.entity.User;
import org.springframework.stereotype.Component;
import java.util.List;
/**
* Created by zy on 2018/7/23.
*/
@Component
public interface UserService {
User selectByPrimaryKey(Integer userId);
int deleteByPrimaryKey(Integer userId);
List<User> selectAll();
int insert(User user);
int insertSelective(User user);
int updateByPrimaryKeySelective(User user);
int updateByPrimaryKey(User user);
}
package com.example.demo.service.impl;
import com.example.demo.entity.User;
import com.example.demo.mapper.UserMapper;
import com.example.demo.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
/**
* Created by zy on 2018/7/23.
*/
@Service("iserServiceimpl ")
public class UserServiceimpl implements UserService{
@Autowired
private UserMapper userMapper;
@Override
public User selectByPrimaryKey(Integer userId) {
return userMapper.selectByPrimaryKey(userId);
}
@Override
public int deleteByPrimaryKey(Integer userId) {
return userMapper.deleteByPrimaryKey(userId);
}
@Override
public List<User> selectAll() {
return userMapper.selectAll();
}
@Override
public int insert(User user) {
return userMapper.insert(user);
}
@Override
public int insertSelective(User user) {
return userMapper.insertSelective(user);
}
@Override
public int updateByPrimaryKeySelective(User user) {
return userMapper.updateByPrimaryKeySelective(user);
}
@Override
public int updateByPrimaryKey(User user) {
return userMapper.updateByPrimaryKey(user);
}
}
然后就是像传统的SSM项目一样编写mapper.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.example.demo.mapper.UserMapper">
<resultMap id="BaseResultMap" type="com.example.demo.entity.User">
<id column="user_id" property="userId" jdbcType="INTEGER"></id>
<result column="user_name" property="userName" jdbcType="VARCHAR"></result>
<result column="password" property="passWord" jdbcType="VARCHAR"></result>
<result column="phone_num" property="phoneNum" jdbcType="VARCHAR"></result>
</resultMap>
<sql id="Base_Column_List">
user_id,user_name,password,phone_num
</sql>
<select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.Integer">
SELECT
<include refid="Base_Column_List"></include>
FROM t_user
WHERE user_id =#{userId,jdbcType=INTEGER}
</select>
<select id="selectAll" resultMap="BaseResultMap">
SELECT
<include refid="Base_Column_List"></include>
FROM t_user
</select>
<delete id="deleteByPrimaryKey" parameterType="java.lang.Integer">
DELETE FROM t_user WHERE user_id = #{userId}
</delete>
<insert id="insert" parameterType="com.example.demo.entity.User" useGeneratedKeys="true" keyProperty="userId">
INSERT INTO t_user(user_name,password,phone_num)
VALUES (#{userName},#{passWord},#{phoneNum})
</insert>
<insert id="insertSelective" parameterType="com.example.demo.entity.User">
INSERT INTO t_user
<trim prefix="(" suffix=")" suffixOverrides=",">
<if test="userId != null">
user_id,
</if>
<if test="userName != null">
user_name,
</if>
<if test="passWord != null">
password,
</if>
<if test="phoneNum != null">
phone_num,
</if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="userId != null">
#{userId},
</if>
<if test="userName != null">
#{userName},
</if>
<if test="passWord != null">
#{passWord},
</if>
<if test="phoneNum != null">
#{phoneNum},
</if>
</trim>
</insert>
<update id="updateByPrimaryKeySelective" parameterType="com.example.demo.entity.User">
UPDATE t_user
<set>
<if test="userName != null">
user_name = #{userName}
</if> <if test="passWord != null">
password = #{passWord}
</if> <if test="userId != null">
user_id = #{userId}
</if> <if test="phoneNum != null">
phone_num = #{phoneNum}
</if>
</set>
WHERE user_id = #{userId}
</update>
<update id="updateByPrimaryKey" parameterType="com.example.demo.entity.User">
UPDATE t_user SET user_name = #{userName}, password = #{passWord},user_id = #{userId},phone_num = #{phoneNum} WHERE user_id = #{userId}
</update>
</mapper>
然后整个demo的项目结构如下
随后新建一个测试类使用junit进行测试
package com.example.demo.controller;
import com.example.demo.entity.User;
import com.example.demo.mapper.UserMapper;
import com.example.demo.service.UserService;
import org.junit.Assert;
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.SpringRunner;
import static org.junit.Assert.*;
/**
* Created by zy on 2018/7/23.
*/
@SpringBootTest
@RunWith(SpringRunner.class)
public class UserControllerTest {
@Autowired
private UserService userService;
@Test
public void testGetOne() throws Exception {
User user = userService.selectByPrimaryKey(1);
Assert.assertNotNull(user);
}
@Test
public void testAddOne() throws Exception {
User user = new User();
user.setPhoneNum("13255555");
user.setPassWord("qweqwewq");
user.setUserName("李四");
int id = userService.insert(user);
System.out.println(user);
}
}