在mybatis和springboot时有两种方式,一种是使用传统的xml,还有一种是使用注解。
一、使用传统的xml配置可以灵活动态生成sql,方便调整sql. 先介绍xml的方式。
1、首先创建实体
package org.learn.boot.mybatis.demo.entity;
import lombok.Data;
import java.util.Date;
/**
* ClassName: Bank
* Description: 实体类
* Date: 2019/3/21 15:50
* History:
* <version> 1.0
* @author lin
*/
@Data
public class Bank {
private Integer id;
private String code;
private String name;
private Date createTime;
}
2、创建mapper
package org.learn.boot.mybatis.demo.mapper;
import org.learn.boot.mybatis.demo.entity.Bank;
import java.util.List;
/**
* ClassName: BankMapper 使用 xml的配置方式
* Description: 测试mybatis
* Date: 2019/3/21 16:07
* History:
* <version> 1.0
* @author lin
*/
public interface BankMapper {
/**
* 查询全部
* @Description 查询全部
* @param
* @return java.util.List<com.base.entity.Bank>
* @exception
* @author lin
* @Date 16:09 2019/3/21
**/
List<Bank> findAll();
/**
* 根据id查询
* @Description 根据id查询
* @param id
* @return com.base.entity.Bank
* @exception
* @author lin
* @Date 16:10 2019/3/21
**/
Bank getOne(Integer id);
/**
* 添加
* @Description
* @param bank
* @return void
* @exception
* @author lin
* @Date 16:11 2019/3/21
**/
void insert(Bank bank);
/**
* 更新
* @Description
* @param bank
* @return void
* @exception
* @author lin
* @Date 16:11 2019/3/21
**/
void update(Bank bank);
/**
* 删除
* @Description
* @param id
* @return void
* @exception
* @author lin
* @Date 16:11 2019/3/21
**/
void delete(Integer id);
}
3、编写controller
package org.learn.boot.mybatis.demo.mapper;
import org.learn.boot.mybatis.demo.entity.Bank;
import java.util.List;
/**
* ClassName: BankMapper 使用 xml的配置方式
* Description: 测试mybatis
* Date: 2019/3/21 16:07
* History:
* <version> 1.0
* @author lin
*/
public interface BankMapper {
/**
* 查询全部
* @Description 查询全部
* @param
* @return java.util.List<com.base.entity.Bank>
* @exception
* @author lin
* @Date 16:09 2019/3/21
**/
List<Bank> findAll();
/**
* 根据id查询
* @Description 根据id查询
* @param id
* @return com.base.entity.Bank
* @exception
* @author lin
* @Date 16:10 2019/3/21
**/
Bank getOne(Integer id);
/**
* 添加
* @Description
* @param bank
* @return void
* @exception
* @author lin
* @Date 16:11 2019/3/21
**/
void insert(Bank bank);
/**
* 更新
* @Description
* @param bank
* @return void
* @exception
* @author lin
* @Date 16:11 2019/3/21
**/
void update(Bank bank);
/**
* 删除
* @Description
* @param id
* @return void
* @exception
* @author lin
* @Date 16:11 2019/3/21
**/
void delete(Integer id);
}
4、编写Bank映射文件
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.learn.boot.mybatis.demo.mapper.BankMapper" >
<resultMap id="BaseResultMap" type="org.learn.boot.mybatis.demo.entity.Bank">
<id column="id" property="id" javaType="INT"/>
<result column="name" property="name" jdbcType="VARCHAR"/>
<result column="code" property="code" jdbcType="VARCHAR"/>
<result column="create_time" property="createTime" jdbcType="DATE"/>
</resultMap>
<sql id="Base_Column_List">
id, code, name, create_time
</sql>
<select id="findAll" resultMap="BaseResultMap">
SELECT
<include refid="Base_Column_List"/>
FROM c_bank
</select>
<select id="getOne" parameterType="java.lang.Integer" resultMap="BaseResultMap">
SELECT
<include refid="Base_Column_List"/>
FROM c_bank
WHERE id=#{id}
</select>
<!--在插入时字段要和数据库的字段对应,不然会报错-->
<insert id="insert" parameterType="org.learn.boot.mybatis.demo.entity.Bank">
INSERT INTO
c_bank
(name,code,create_time)
VALUES
(#{name},#{code},#{createTime})
</insert>
<update id="update" parameterType="org.learn.boot.mybatis.demo.entity.Bank">
UPDATE
c_bank
SET
<if test="name != null">name=#{name},</if>
<if test="code != null">code=#{code},</if>
WHERE
id=#{id}
</update>
<delete id="delete" parameterType="java.lang.Integer">
DELETE FROM
c_bank
WHERE
id=#{id}
</delete>
</mapper>
5、指定了 Mybatis 基础配置文件和实体类映射文件的地址
mybatis_config.xml
<?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>
<typeAliases>
<typeAlias alias="Integer" type="java.lang.Integer"/>
<typeAlias alias="String" type="java.lang.String"/>
<typeAlias alias="String" type="java.lang.String"/>
<typeAlias alias="Date" type="java.util.Date"/>
</typeAliases>
</configuration>
6、在application.properties中加入 mybatis的配置
//mybatis 配置 指定文件和实体映射文件地址
mybatis.config-location=classpath:mybatis_config.xml
mybatis.mapper-locations=classpath:mybatis/*.xml
二、使用注解的方式,首先要在pom文件中添加mybatis依赖
1、添加依赖配置,
使用了该Starter之后,只需要定义一个DataSource即可,它会自动创建使用该DataSource的SqlSessionFactoryBean以及SqlSessionTemplate。会自动扫描你的Mappers,连接到SqlSessionTemplate,并注册到Spring上下文中。
<!--mybatis 依赖-->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.0.0</version>
</dependency>
2、然后在application.properties中加入相关配置
server.port=8085
spring.banner.charset=UTF-8
server.tomcat.uri-encoding=UTF-8
spring.http.encoding.charset=UTF-8
spring.http.encoding.enabled=true
spring.http.encoding.force=true
spring.messages.encoding=UTF-8
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/lin?useUnicode=true&characterEncoding=utf-8&serverTimezone=UTC&useSSL=true
spring.datasource.username=root
spring.datasource.password=123
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
// 用来指定实体类的包路径
mybatis.type-aliases-package=org.learn.boot.mybatis.demo.entity
Spring Boot 会自动加载 spring.datasource.* 相关配置,数据源就会自动注入到 sqlSessionFactory 中,sqlSessionFactory 会自动注入到 Mapper 中我们就可以直接拿来用了。
在启动类中添加MapperScan注解用来扫描 mapper. 如果不在启动类中加入该注解,就要在mapper中添加@Mapper注解。但是如果多个mapper那么每一个都要添加就比较麻烦。所有的mapper接口类都在一个包下,还是使用@MapperScan注解更为方便。
package org.learn.boot.mybatis.demo;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@MapperScan("org.learn.boot.mybatis.demo.mapper")
@SpringBootApplication
public class LearnSpringBootMybatisDemoApplication {
public static void main(String[] args) {
SpringApplication.run(LearnSpringBootMybatisDemoApplication.class, args);
}
}
3、编写mapper
package org.learn.boot.mybatis.demo.mapper;
import org.apache.ibatis.annotations.*;
import org.learn.boot.mybatis.demo.entity.Book;
import java.util.List;
/**
* ClassName: BookMapper
* Description: 测试 mybatis注解配置
* Date: 2019/3/24 14:36
* History:
* <version> 1.0
* @author lin
*/
public interface BookMapper {
/**
* @Description 查询全部
* @param
* @return java.util.List<com.base.entity.Book>
* @exception
* @author lin
* @Date 14:41 2019/3/24
**/
@Select("SELECT * FROM c_book")
@Results({@Result(property = "bookName",column = "book_name"),
@Result(property = "bookNumber",column = "book_number"),
@Result(property = "publishCompany",column = "publish_company")})
List<Book> getAll();
/**
* @Description 根据id获取书信息
* @param id
* @return com.base.entity.Book
* @exception
* @author lin
* @Date 14:42 2019/3/24
**/
@Select("SELECT * FROM c_book WhERE id=#{id}")
@Results({@Result(property = "bookName",column = "book_name"),
@Result(property = "bookNumber",column = "book_number"),
@Result(property = "publishCompany",column = "publish_company")})
Book getOne(Integer id);
/**
* @Description 添加
* @param book
* @return int
* @exception
* @author lin
* @Date 14:48 2019/3/24
**/
@Insert("INSERT INTO c_book(book_name,book_number,publish_company) " +
"VALUES(#{bookName},#{bookNumber},#{publishCompany})")
void insert(Book book);
/**
* @Description 更新
* @param book
* @return void
* @exception
* @author lin
* @Date 14:54 2019/3/24
**/
@Update("UPDATE c_book SET book_name=#{bookName}, book_number=#{bookNumber}," +
"publish_company=#{publishCompany} WHERE id=#{id}")
void update(Book book);
/**
* @Description 删除
* @param id
* @return void
* @exception
* @author lin
* @Date 14:56 2019/3/24
**/
@Delete("DELETE FROM c_book WHERE id=#{id}")
void delete(Integer id);
}
编写controller 层
package org.learn.boot.mybatis.demo.controller;
import org.learn.boot.mybatis.demo.entity.Book;
import org.learn.boot.mybatis.demo.mapper.BookMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
/**
* ClassName: BookController
* Description: 测试 注解 mybatis
* Date: 2019/3/24 15:03
* History:
* <version> 1.0
* @author lin
*/
@RequestMapping(value = "/book")
@RestController
public class BookController {
@Autowired
private BookMapper bookMapper;
/**
* @Description 查询全部
* @param
* @return java.util.List<com.base.entity.Book>
* @exception
* @author lin
* @Date 14:41 2019/3/24
**/
@RequestMapping(value = "getAll",method = RequestMethod.GET)
public List<Book> getAll(){
List<Book> books = bookMapper.getAll();
return books;
}
/**
* @Description 根据id获取书信息
* @param id
* @return com.base.entity.Book
* @exception
* @author lin
* @Date 14:42 2019/3/24
**/
@RequestMapping(value = "getOne",method = RequestMethod.GET)
public Book getOne(Integer id){
Book one = bookMapper.getOne(id);
return one;
}
/**
* @Description 添加
* @param book
* @return int
* @exception
* @author lin
* @Date 14:48 2019/3/24
**/
@RequestMapping(value = "save", method = RequestMethod.POST)
public void insert(@RequestBody Book book){
bookMapper.insert(book);
}
/**
* @Description 更新
* @param book
* @return void
* @exception
* @author lin
* @Date 14:54 2019/3/24
**/
@RequestMapping(value = "update", method = RequestMethod.POST)
public void update(@RequestBody Book book){
bookMapper.update(book);
}
/**
* @Description 删除
* @param id
* @return void
* @exception
* @author lin
* @Date 14:56 2019/3/24
**/
@RequestMapping(value ="delete")
public void delete(Integer id){
bookMapper.delete(id);
}
}
到这里就可以使用postman进行测试
查询所有书
sql文件
CREATE TABLE `c_book` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`book_name` varchar(24) DEFAULT NULL,
`book_number` varchar(64) DEFAULT NULL,
`publish_company` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=ut
参考:http://www.ityouknow.com/springboot/2016/11/06/spring-boot-mybatis.html