一、mybatis介绍
MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。
二、mybatis使用方法
2.1 引入mybatis的jar包
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.2.0</version>
</dependency>
2.2 spring boot启动类中加入mapper层注解
@SpringBootApplication
@MapperScan("com.cy.store.mapper")
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
@MapperScan(“com.cy.store.mapper”)意思是扫描com.cy.store.mapper下的所有类作为Mapper映射文件
2.3 yaml配置
注:本文中的数据库为mysql 8.0
server:
port: 8090
# 配置数据源
spring:
datasource:
url: jdbc:mysql://ip:port/databasename?serverTimezone=UTC&useSSL=false&allowPublicKeyRetrieval=true
driver-class-name: com.mysql.cj.jdbc.Driver
username: username
password: password
#mybatis配置
mybatis:
config-location: classpath:mybatis-config.xml
mapper-locations: classpath*:mybatis/mapper/*.xml
2.4 逻辑代码
2.4.1 model层代码
package com.cy.store.model;
public class Category {
private String id;
private String name;
private Integer count;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getCount() {
return count;
}
public void setCount(Integer count) {
this.count = count;
}
}
2.4.2 mapper层代码
package com.cy.store.mapper;
import com.cy.store.model.Category;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;
@Mapper
public interface CategoryMapper {
List<Category> getAll();
Category find(String id);
int insert(Category category);
int delete(String id);
}
对应的mybatis xml配置文件
<?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="com.cy.store.mapper.CategoryMapper">
<select id="getAll" resultType="com.cy.store.model.Category">
select * from t_category
</select>
<select id="find" resultType="com.cy.store.model.Category">
select * from t_category where id = #{id}
</select>
<insert id="insert" keyProperty="id" keyColumn="id" parameterType="com.cy.store.model.Category">
insert into t_category(id,name,count) values(#{id,},#{name},#{count})
</insert>
<update id="update" parameterType="com.cy.store.model.Category">
update t_category
<set>
<if test="name !=null">name=#{name}</if>
<if test="count !=null">count=#{count}</if>
</set>
where id = #{id}
</update>
<delete id="delete">
delete t_category where id = #{id}
</delete>
</mapper>
2.4.3 controller层代码
package com.cy.store.controller;
import com.cy.store.mapper.CategoryMapper;
import com.cy.store.model.Category;
import com.cy.store.utils.Result;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@RestController
@RequestMapping("/Category")
public class CategoryController {
@Autowired
private CategoryDao categoryMapper;
@GetMapping("")
public Result findAll() {
List<Category> categories = categoryMapper.getAll();
return new Result(categories);
}
@GetMapping("/{id}")
public Result findById(@PathVariable String id) {
Category category = categoryMapper.find(id);
return new Result(category);
}
@PutMapping("/{id}")
public Result update(@PathVariable String id,@RequestBody Category category) {
Integer result = categoryMapper.update(category);
return new Result(result);
}
@PostMapping("")
public Result insert(@RequestBody Category category) {
Integer result = categoryMapper.insert(category);
return new Result(result);
}
}