Spring Boot 快速上手(4)整合Mybatis
添加依赖
在Spring Boot 项目添加mybatis依赖及mysql驱动依赖
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.2.0</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
配置
spring:
mvc:
view:
prefix: /
suffix: .jsp
## 数据源配置
datasource: # 数据库的数据配置
driver-class-name: com.mysql.cj.jdbc.Driver
# url不用换行,由于数据太长了这里换行了
url: jdbc:mysql://localhost:3306/数据库名称?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8&useSSL=false
username: root
password: root
## mybatis 配置
mybatis:
mapper-locations: classpath:/mapper/*.xml # 扫描mybatis的实现dao接口*.xml文件
type-aliases-package: com.example.helloworld.entity #实体类取别名
configuration:
## 下划线转驼峰配置
map-underscore-to-camel-case: true
## 显示dao 执⾏sql语句
logging:
level:
com.example.helloworld.dao: debug # 改成你的dao接口文件所在包路径可以打印出sql语句
创建数据库
CREATE TABLE `good` (
`id` int(8) NOT NULL AUTO_INCREMENT COMMENT 'id',
`good_name` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '商品名称',
`good_price` decimal(10, 2) NOT NULL COMMENT '商品价格',
`create_time` datetime NOT NULL COMMENT '创建时间',
`update_time` datetime NOT NULL COMMENT '更新时间',
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '商品表' ROW_FORMAT = Dynamic;
生成mybatis基本代码
使用idea 插件
IDEA连接数据库,选中表右键mybatis-generator,进行包名配置,需要手动创建包名称,如图所示进行配置,点击创建
生成结果,已经帮忙创建了最基础的代码
配置扫描
在启动类上添加扫描注解
import org.mybatis.spring.annotation.MapperScan;
@MapperScan("com.example.helloworld.dao")
public class HelloworldApplication {
...
}
测试Dao
编写测试用的控制类
import com.example.helloworld.dao.GoodDao;
import com.example.helloworld.entity.Good;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
/**
* <h1>测试good dao</h1>
*
* @version 1.0
* @author: Vincent Vic
* @since: 2022/01/14
*/
@RestController
@RequestMapping("/v1/good/")
public class GoodV1Controller {
@Autowired
private GoodDao goodDao;
/**
* 通过商品id获取商品信息
* @param id 商品id 路径参数的方式请求
* @return
*/
@GetMapping("/get/{id}")
public Good getOne(@PathVariable("id") Integer id){
return goodDao.selectByPrimaryKey(id);
}
}
@RequestMapping("/v1/good/") 配置找个控制类的路径
/get/{id} 方法请求路径,其中{id}为路径参数
@PathVariable(“id”) 绑定路径参数,默认根据名称,参数名称和变量名称一致也可以直接通过@PathVariable获取、
通过生成的方法直接测试mybatis是否可用
注:正常中间还会有一层service层,测试省略
测试:
http://ip:port/v1/good/get/1
{
“id”: 1,
“goodName”: “测试商品”,
“goodPrice”: 100,
“createTime”: “2022-01-14T04:40:20.000+00:00”,
“updateTime”: “2022-01-14T04:40:23.000+00:00”
}
编写Dao层案例
查询商品列表
GoodDao 添加查询所有商品列表方法
List<Good> listByAll();
GoodDao.xml 添加sql,查询所有无需条件 查询使用select 标签
<select id="listByAll" resultType="com.example.helloworld.entity.Good">
select
<include refid="Base_Column_List" />
from good
</select>
其中 <include refid=“Base_Column_List” /> 是xml中sql标签,用于通用参数,为了便于管理
根据关键字查询商品列表
GoodDao 添加根据关键字查询商品列表方法
List<Good> listByKeyWord(@Param("keyword") String keyword);
GoodDao.xml 添加sql,where标签 在if标签有成立的情况下才会添加where语句,里面可以添加多条if标签
<select id="listByKeyWord" parameterType="java.lang.String" resultType="com.example.helloworld.entity.Good">
select
<include refid="Base_Column_List" />
from good
<where>
<if test="keyword != null">
good_name like #{keyword}
</if>
</where>
</select>
根据id列表查询商品列表
GoodDao 添加根据id列表查询商品列表方法
GoodDao.xml 添加sql, foreach 标签使用, collection 列表元素,item 遍历元素设置 open,
separator, close,开始,中间,后面设置分隔符合
<select id="listByIds" parameterType="java.util.List" resultType="com.example.helloworld.entity.Good">
select
<include refid="Base_Column_List" />
from good
<where>
<if test="ids != null and ids.size() > 0 ">
id in
<foreach item="id" index="index" collection="ids" open="("
separator="," close=")">
#{id}
</foreach>
</if>
</where>
</select>
测试是否可用
GoodV1Controller 添加方法,浏览器自行测试,id列表查询,多个id使用’,'逗号隔开
@GetMapping("/list")
public List<Good> listByAll(){
return goodDao.listByAll();
}
@GetMapping("/list/{keyword}")
public List<Good> listByKeyWord(@PathVariable("keyword") String keyword){
return goodDao.listByKeyWord(keyword);
}
@GetMapping("/list/ids/{ids}")
public List<Good> list(@PathVariable("ids") List<Integer> ids){
return goodDao.listByIds(ids);
}
基础整合到此结束,以及简单的测试,本文初略介绍,整合为主