spring boot 2 integrated mybatis

mybatis-spring-boot-starter There are two solutions, one is to use annotations, one is to use XML.

Reference article hands ran an example, slightly different from the original is spring boot, here turned into a spring boot 2, mybatis now the latest version is 1.3.2.

First, the use of annotations

1, add the relevant documents maven

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        
        <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>
        </dependency>
        
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <optional>true</optional>
        </dependency>

mybatis-spring-boot-starter latest version can be found at the official website
http://www.mybatis.org/spring-boot-starter/mybatis-spring-boot-autoconfigure/index.html

2, application.properties add configuration

mybatis.type-aliases-package = com.example.demo.entity

spring.datasource.driverClassName = com.mysql.jdbc.Driver
spring.datasource.url = jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8
spring.datasource.username = root
spring.datasource.password = 

3, the entity class User.java

package com.example.demo.entity;

import com.example.demo.enums.UserSexEnum;

public class User {
	public User() {
		super();
	}
	
	public User(String name, UserSexEnum sex) {
		super();
		this.name = name;
		this.sex = sex;
	}
	
    private Integer id;

    private String name;

    private UserSexEnum sex;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name == null ? null : name.trim();
    }

    public UserSexEnum  getSex() {
        return sex;
    }

    public void setSex(UserSexEnum  sex) {
        this.sex = sex;
    } 
    
    @Override
	public String toString() {
		return "name " + this.name + ", sex " + this.sex;
	}
}

4, enumeration UserSexEnum.java

package com.example.demo.enums;

public enum UserSexEnum {
	MAN, 
	WOMAN
}

5, start packet mapper class add scanning @MapperScan, thereby eliminating the need to add annotations @Mapper each class Mapper above.


package com.example.demo;

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;

@SpringBootApplication
@MapperScan("com.example.demo.mapper")
public class DemoApplication extends SpringBootServletInitializer {
	
	public static void main(String[] args) {
		SpringApplication.run(DemoApplication.class, args);
	}
}

6, development Mapper

package com.example.demo.mapper;

import java.util.List;

import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Result;
import org.apache.ibatis.annotations.Results;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;

import com.example.demo.entity.User;
import com.example.demo.enums.UserSexEnum;

public interface UserMapper {
	@Select("SELECT * FROM user")
       //结果集,关联实体类属性和数据库字段一一对应,如果两边一致,就不需要这个属性来修饰。
	@Results({		
		@Result(property = "sex",  column = "sex", javaType = UserSexEnum.class),
	})
	List<User> getAll();
	
	@Select("SELECT * FROM user WHERE id = #{id}")
	@Results({
		@Result(property = "sex",  column = "sex", javaType = UserSexEnum.class),
	})
	User getOne(Long id);

	@Insert("INSERT INTO user(name,sex) VALUES(#{name}, #{sex})")
	void insert(User user);

	@Update("UPDATE user SET name=#{name} WHERE id =#{id}")
	void update(User user);

	@Delete("DELETE FROM user WHERE id =#{id}")
	void delete(Long id);
}

7, unit testing


package com.example.demo.mapper;

import java.util.List;

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 com.example.demo.entity.User;
import com.example.demo.enums.UserSexEnum;

@RunWith(SpringRunner.class)
@SpringBootTest
public class UserMapperTest {

	@Autowired
	private UserMapper UserMapper;

	@Test
	public void testInsert() throws Exception {
		UserMapper.insert(new User("aa", UserSexEnum.MAN));
		UserMapper.insert(new User("bb", UserSexEnum.WOMAN));
		UserMapper.insert(new User("cc", UserSexEnum.WOMAN));

		Assert.assertEquals(3, UserMapper.getAll().size());
	}

	@Test
	public void testQuery() throws Exception {
		List<User> users = UserMapper.getAll();
		if(users==null || users.size()==0){
			System.out.println("is null");
		}else{
			System.out.println(users.toString());
		}
	}
	
	
	@Test
	public void testUpdate() throws Exception {
		User user = UserMapper.getOne(6l);
		System.out.println(user.toString());
		user.setName("dd");
		UserMapper.update(user);
		Assert.assertTrue(("dd".equals(UserMapper.getOne(6l).getName())));
	}

}

8, the control layer

package com.example.demo.web;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import com.example.demo.entity.User;
import com.example.demo.mapper.UserMapper;

@RestController
public class UserController {
	@Autowired
	private UserMapper userMapper;
	
	@RequestMapping("/getUsers")
	public List<User> getUsers() {
		List<User> users=userMapper.getAll();
		return users;
	}
	
    @RequestMapping("/getUser")
    public User getUser(Long id) {
    	User user=userMapper.getOne(id);
        return user;
    }
    
    @RequestMapping("/add")
    public void save(User user) {
    	userMapper.insert(user);
    }
    
    @RequestMapping(value="update")
    public void update(User user) {
    	userMapper.update(user);
    }
    
    @RequestMapping(value="/delete/{id}")
    public void delete(@PathVariable("id") Long id) {
    	userMapper.delete(id);
    }
}

Project directory structure:

Second, the use of XML

1, application.properties add the following configuration

mybatis.config-location = classpath:mybatis/mybatis-config.xml
mybatis.mapper-locations = classpath:mybatis/mapper/*.xml

2, was added mybatis-config.xml configuration in resources / mybatis directory

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
	<settings>
        <!-- 控制台打印查询语句 -->
        <setting name="logImpl" value="STDOUT_LOGGING" />
    </settings>
	<typeAliases>
		<typeAlias alias="Integer" type="java.lang.Integer" />
		<typeAlias alias="Long" type="java.lang.Long" />
		<typeAlias alias="HashMap" type="java.util.HashMap" />
		<typeAlias alias="LinkedHashMap" type="java.util.LinkedHashMap" />
		<typeAlias alias="ArrayList" type="java.util.ArrayList" />
		<typeAlias alias="LinkedList" type="java.util.LinkedList" />
	</typeAliases>
</configuration>

3, add the mapping file UserMapper.xml in resources / mybatis / mapper directory

<?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="id" property="id" jdbcType="BIGINT" />
        <result column="name" property="name" jdbcType="VARCHAR" />
        <result column="sex" property="sex" javaType="com.example.demo.enums.UserSexEnum"/>
    </resultMap>
    
    <sql id="Base_Column_List" >
        id, name, sex
    </sql>

    <select id="getAll" resultMap="BaseResultMap"  >
       SELECT 
       <include refid="Base_Column_List" />
	   FROM user
    </select>

    <select id="getOne" parameterType="java.lang.Long" resultMap="BaseResultMap" >
        SELECT 
       <include refid="Base_Column_List" />
	   FROM user
	   WHERE id = #{id}
    </select>

    <insert id="insert" parameterType="com.example.demo.entity.User" >
       INSERT INTO 
       		user
       		(name,sex) 
       	VALUES
       		(#{name},  #{sex})
    </insert>
    
    <update id="update" parameterType="com.example.demo.entity.User" >
       UPDATE 
       		user 
       SET        
       	name = #{name}
       WHERE 
       		id = #{id}
    </update>
    
    <delete id="delete" parameterType="java.lang.Long" >
       DELETE FROM
       		 user 
       WHERE 
       		 id =#{id}
    </delete>

</mapper>

4, the layer coding Dao


package com.example.demo.mapper;

import java.util.List;

import com.example.demo.entity.User;

public interface UserMapper {
	
	List<User> getAll();
	
	User getOne(Long id);

	void insert(User user);

	void update(User user);

	void delete(Long id);
}

 

Guess you like

Origin blog.csdn.net/gdjlc/article/details/84768763