SpringBoot-14-整合Mybatis

整合Mybatis

MyBatis 是一个半自动化的 ORM 框架,所谓半自动化是指MyBatis只支持将数据库查出的数据映射到POJO实体类上,而实体到数据库的映射则需要我们自己编写SQL语句实现。,相较于Hibernate 这种完全自动化的框架,Mybatis 更加灵活,我们可以根据自身的需求编写 sql 语句来实现复杂的数据库操作。

随着Spring Boot的流行,Mybatis 也开发了一套基于Spring Boot模式的starter: mybatis-spring-boot-spring。使用该模块,将实现构建独立的应用程序,将样板文件减少为零,更少的xml配置。

现在我们来看看怎么使用

引用依赖

在项目pom.xml中配置mybatis-spirng-boot-starte依赖

<!--引入 mybatis-spring-boot-starter 的依赖-->
<dependency>
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
    <version>2.2.0</version>
</dependency>

最新依赖可以参考官网

配置 MyBatis

在Spring Boot的全局配置文件(application.properties/yaml)中进行配置

在这里插入图片描述
mybatis配置的属性如上,根据需求配置属性

--- mybatis配置
	# 指定mapper.xml位置
	mapper-locations:classpath:mybatis/mapper/*.xml
	# 扫描实体类的位置,在此处指明扫描实体类的包,在mapper.xml 中就可以不写实体类的全路径名
	type-aliase-package: com.liang.pojo

创建实体类

在指定数据库内创建一个worker表,并插入一些数据,如下表

在这里插入图片描述
根据worker表,创建相应实体类Worker

导入了lombok依赖

@Data
@AllArgsConstructor
@NoArgsConstructor
public class Worker {

    private Integer no;
    private String name;
}

创建Mapper接口
在com.liang.mapper创建一个WorkerMapper接口,并在该类上使用@Mapper注解,代码如下:


//注入Mapper注解
@Mapper
public interface WorkerMapper {

    //通过id查询工人信息
    Worker getWorkerById(@Param("no") int no);
}


注意:当 mapper 接口较多时,我们可以在 Spring Boot 主启动类上使用 @MapperScan 注解扫描指定包下的 mapper 接口,而不再需要在每个 mapper 接口上都标注 @Mapper 注解。

创建Mapper配置文件

xml方式

在配置文件application.properties/yml 通过 mybatis.mapper-locations 指定的位置中创建 WorkerMapper.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.liang.mapper.WorkerMapper">

    <select id="getWorkerById" resultType="Worker" parameterType="int">
        select * from `worker` where `no`= #{no}
    </select>



</mapper>

注解方式

使用Mapper的xml配置进行开发,,需要遵循以下规则:

  • mapper 映射文件中 namespace 必须与对应的 mapper 接口的完全限定名一致。

  • mapper 映射文件中 statement 的 id 必须与 mapper 接口中的方法的方法名一致

  • mapper 映射文件中 statement 的 parameterType 指定的类型必须与 mapper 接口中方法的参数类型一致。

  • mapper 映射文件中 statement 的 resultType 指定的类型必须与 mapper 接口中方法的返回值类型一致。

Mapper接口使用注解的方式,不需要创建Mapper映射文件,也不需要设置 mybatis.mapper-locations,代码如下:


//注入Mapper注解
@Mapper
public interface WorkerMapper {

   @Select("select * from `worker` where `no` =#{no}")
    //通过id查询工人信息
    Worker getWorkerById(@Param("no") int no);
}



创建Service接口

在项目com.liang.service包中创建一个名为WorkerService的接口,代码如下

public interface WorkerService {

    public Worker getWorkerById(int id);
}

创建Service接口实现类

在项目com.liang.service包中创建一个名为WorkerServiceImpl的类,代码如下

@Service("userService")
public class WorkerServiceImpl implements WorkerService{

    @Autowired
    private WorkerMapper workerMapper;

    @Override
    public Worker getWorkerById(int id) {
        return workerMapper.getWorkerById(id);
    }
}


创建Controller的类

在项目com.liang.controller包中创建一个名为SearchController的类,代码如下

@Controller
@RequestMapping("/worker")
public class SearchController {

    @Autowired
    private WorkerService workerService;

    @RequestMapping("/query")
    public String queryById(int no ,Model model)
    {
        Worker worker = workerService.getWorkerById(no);
        if(worker!=null)
        {
            System.out.println("查询成功");
        }else{
            System.out.println("查询失败");
        }
        //传一个值到worker页面
        model.addAttribute("worker",worker);
        return "worker";
    }

}

创建HTML页面

在项目resources/templates目录下,创建一个worker.html,代码如下

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>狂神说</title>
</head>
<body>

<div th:text="${worker.no}">工号</div>
<div th:text="${worker.name}">姓名</div>

</body>
</html>

在项目resources/static目录下,创建一个index.html,代码如下

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

<form action="/worker/query" method="get">
    <p>
        <input type="text" name="no" placeholder="请输入工号">
    </p>
    <p>
        <input type="submit" value="查询">
    </p>
</form>
<script type="text/javascript">

</script>
</body>
</html>

启动Spring Boot

启动sprng boot后,进入index页面,输入指定的工号,就跳转到worker.xml,输出指定worker的信息。

说明

区别: xml和注解

mapper 映射文件其实就是一个 XML 配置文件,它存在 XML 配置文件的通病,即编写繁琐,容易出错。即使是一个十分简单项目,涉及的 SQL 语句也都十分简单,我们仍然需要花费一定的时间在mapper 映射文件的配置上。

为了解决这个问题,MyBatis 针对实际实际业务中使用最多的“增伤改查”操作,分别提供了以下注解来替换 mapper 映射文件,简化配置:

  • @Select
  • @Insert
  • @Update
  • @Delete

注意:

mapper 接口中的任何一个方法,都只能使用一种配置方式,即注解和 mapper 映射文件二选一,但不同方法之间,这两种方式则可以混合使用,例如方法 1 使用注解方式,方法 2 使用 mapper 映射文件方式。

我们可以根据 SQL 的复杂程度,选择不同的方式来提高开发效率。
如果没有复杂的连接查询,我们可以使用注解的方式来简化配置;
如果涉及的 sql 较为复杂时,则使用 XML (mapper 映射文件)的方式更好一些。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值