本章导学:
- 在pom.xml导入Spring与mybatis整合的坐标依赖
- 在application.yml中添加配置
- 编写实体类
- 编写Dao层与对应的mapper.xm配置文件
- 在springboot配置文件中 整合mybatis 配置别名和扫描mapper映射文件 application.yml
- 编写Service接口和实现类
- 编写Controller
- 使用PostMan最终测试
一、整合Mybatis
1,1、在pom.xml导入Spring与mybatis整合的坐标依赖
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.3</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
1.2、在application.yml中添加配置
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/db_brand
username: root
password: rootaaa
我们去测试一下DataSource有没有成功导入
1.3、编写实体类
package com.brrbaii.pojo;
import lombok.*;
@Data
@NoArgsConstructor
@ToString
public class Brand {
private int id;
private String brandName;
private String companyName;
private int ordered;
private String description;
private int status;
}
1.4、 编写Dao层与对应的mapper.xm配置文件
package com.brrbaii.dao;
import com.brrbaii.pojo.Brand;
import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.ResultMap;
import org.apache.ibatis.annotations.Select;
import java.util.List;
//@Mapper
public interface BrandDao {
@Select("select * from tb_brand")
@ResultMap("BrandResult")
List<Brand> selectAll();
@Select("select * from tb_brand where id = #{Id}")
Brand selectById(Integer Id);
@Delete("delete from tb_brand where id = #{Id}")
boolean deleteById(Integer Id);
boolean save(Brand brand);
boolean updateById(Brand brand);
}
我们去resource目录下建一个Mapper包,专门放mapper.xml映射文件
BrandDao.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.brrbaii.dao.BrandDao">
<resultMap id="BrandResult" type="brand">
<result column="brand_name" property="brandName" />
<result column="company_name" property="companyName" />
</resultMap>
<insert id="save">
insert into
tb_brand
values
(null, #{brandName}, #{companyName}, #{ordered}, #{description}, #{status})
</insert>
<update id="updateById">
update tb_brand
<set>
<if test="brandName!=null and brandName!= ''">
brand_name = #{brandName},
</if>
<if test="companyName!=null and companyName!= ''">
company_name = #{companyName},
</if>
<if test="description!=null and description!= ''">
description = #{description},
</if>
<if test="ordered!=null and ordered!= ''">
ordered = #{ordered},
</if>
<if test="status!=null and status!= ''">
status = #{status},
</if>
</set>
where id = #{id}
</update>
</mapper>
注:我们在Dao层上并不直接添加@Mapper注解,因为如果后续程序有很多数据类,我们就得一个个的去添加@Mapper。我这里直接在启动类上指定扫描Dao层文件的位置
1.5、在springboot配置文件中 整合mybatis 配置别名和扫描mapper映射文件 application.yml
mybatis-plus:
mapper-locations: classpath:mapper/*.xml
type-aliases-package: com.brrbaii.pojo
这里的mapper-locations是我配置文件的路径
1.6、编写Service接口和实现类
接口 :
package com.brrbaii.service;
import com.brrbaii.pojo.Brand;
import java.util.List;
public interface BrandService {
List<Brand> selectAll();
Brand selectById(Integer Id);
boolean save(Brand brand);
boolean delete(Integer Id);
boolean updateById(Brand brand);
}
实现类:
package com.brrbaii.service.Imp;
import com.brrbaii.dao.BrandDao;
import com.brrbaii.dao.MqDao;
import com.brrbaii.pojo.Brand;
import com.brrbaii.service.BrandService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class BrandServiceImp implements BrandService {
@Autowired
private BrandDao brandDao;
@Override
public List<Brand> selectAll() {
List<Brand> brands = brandDao.selectAll();
return brands;
}
@Override
public Brand selectById(Integer Id) {
Brand brand = brandDao.selectById(Id);
return brand;
}
@Override
public boolean save(Brand brand){
return brandDao.save(brand);
}
@Override
public boolean delete(Integer Id) {
return brandDao.deleteById(Id);
}
@Override
public boolean updateById(Brand brand) {
return brandDao.updateById(brand);
}
}
1.7、编写Contorller层
package com.brrbaii.controller;
import com.brrbaii.pojo.Brand;
import com.brrbaii.service.BrandService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.ArrayList;
import java.util.List;
@RestController
@RequestMapping("/brands")
public class BrandController {
@Autowired
private BrandService brandService;
@GetMapping
public Result getAll(){
List<Brand> brands = brandService.selectAll();
Integer code = checkMesg(brands) ? Code.SELECT_OK : Code.SELECT_ERR;
return new Result(code,brands);
}
@GetMapping("/{Id}")
public Result getById(@PathVariable Integer Id){
Brand brand = brandService.selectById(Id);
Integer code = checkMesg(brand) ? Code.SELECT_OK : Code.SELECT_ERR;
String msg = checkMesg(brand) ? "查询成功": "查询失败";
return new Result(code,brand,msg);
}
@PostMapping
public Result save(@RequestBody Brand brand){
boolean flag = brandService.save(brand);
Integer code = flag ? Code.SAVE_OK : Code.SAVE_ERR;
return new Result(code,flag);
}
@DeleteMapping("/{Id}")
public Result delete(@PathVariable Integer Id){
boolean flag = brandService.delete(Id);
Integer code = flag ? Code.DELETE_OK : Code.DELETE_ERR;
return new Result(code,flag);
}
@PutMapping()
public Result update(@RequestBody Brand brand){
boolean flag = brandService.updateById(brand);
Integer code = flag ? Code.UPDATE_OK : Code.UPDATE_ERR;
return new Result(code,flag);
}
public boolean checkMesg(Object o){
return o != null ? true : false;
}
}
1.8、用PostMan最终测试
二、整合Mybatis-Plus
2.1、导入坐标
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.2.6</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.5.2</version>
</dependency>
2.2、修改yml配置
mybatis-plus:
#mapper文件的位置
mapper-locations: classpath:mapper/*.xml
#起别名
type-aliases-package: com.brrbaii.pojo
#开启日志
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
#为实体类增加前缀
global-config:
db-config:
table-prefix: tb_
2.3、Dao层继承BaseMapper
mybaits-plus只在mybatis上做了增强,不做改动,如果我们需要编写自定义的SQl语句,还是可以创建一个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.brrbaii.dao.MqDao">
<select id="selectMapById" resultType="map">
select * from tb_brand where id = #{id};
</select>
</mapper>
mybatis-plus会自动把实体类的成员变量当做表的字段去查询,驼峰改为下划线_
比如companyName在查询时会被修改为company_name
如果实体类的成员变量和数据库列名不一致,我们可以用@TableFileId注解为它指定名称
2.4、 最终测试