Spring Boot 快速上手(4)整合Mybatis

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,进行包名配置,需要手动创建包名称,如图所示进行配置,点击创建

Spring Boot 快速上手(4)整合Mybatis
生成结果,已经帮忙创建了最基础的代码
Spring Boot 快速上手(4)整合Mybatis

配置扫描

在启动类上添加扫描注解

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);
}

基础整合到此结束,以及简单的测试,本文初略介绍,整合为主

上一篇:POJ2796-Feel Good


下一篇:Codeforces Good Bye 2021: 2022 is NEAR ABCDE