spring boot 整合mybatis
- 创建项目勾选 mybatis 项目依赖
- 创建 entity 实体类包,在包下创建实体类,注意实体类的属性名必须对应数据库的字段名
- 创建 mapper 包,在包下创建 mapper 接口,接口里写上所要实现的方法,不能有方法体
- 在resource文件下创建 mybatis 文件夹,在 mybatis文件夹下创建 mapper 、config 两个文件夹,分别来存放 mybatis 的配置文件(config下) mybatis-config,和存放 mapper 的配置,注意这里的 mapper.xml 文件名必须和mapper接口名一致
- 在 mapper.xml下编写mapper配置
<?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.server.vue.mapper.UserMapper">
<!--绑定接口,namespace地址为要调用数据库的接口-->
<select id="getEmpById" resultType="com.server.vue.entity.User">
select * from user.buy where Id = #{id}
</select>
<insert id="insert">
insert into user.buy(id,shoppingname) values (${id},#{shopping})
</insert>
</mapper>
首先,mapper 的namespace 对应着的是mapper接口,然后写 数据库语句,注意每个数据库操作的标签中的 id 必须对应着mapper接口中的方法名,即方法名必须和id一致,然后注意 select 语句的resultType 必须对应着实体类,这样才能输出,insert,delete、update没有返回值就不用写。
6. 编写配置文件,删除原有的 application.properties , 编写application.yml ,在里面配置上
pring:
profiles:
active: dev
表示生效的配置文件是application-dev.yml
再在同目录下创建 application-dev.yml:
server:
port: 8082
spring:
datasource:
username: root
password: 1528303964
url: jdbc:mysql://127.0.0.1:3306/user?useUnicode=true&characterEncoding=utf8&serverTimezone=UTC
driver-class-name: com.mysql.jdbc.Driver
mybatis:
mapper-locations: classpath:/mybatis/mapper/*.xml
config-location: classpath:/mybatis/config/mybatis-config.xml
type-aliases-package: src/main/java/com/server/vue/entity
- 先指定端口
- 再指定数据库的配置,注意url中端口号后面代表的是表名,然后最后需要加上时间配置信息 serverTimezone=UTC
- 最后指定mybatis配置,mapper-locations 的值是 mapper 的配置文件路径,由于可能存在多个文件,故这里用 * 匹配所有xml文件,config-location 的值是config的配置文件路径,最后指定 type-aliases-package 的值为实体类包名即可
- 在 mybatis-config下编写文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<!--这里写mybatis的其他配置,此教程下不需要-->
</configuration>
-
最后在 mapper 接口方法名上加上注解 @Mapper 表示这是一个mapper,并且在启动类上加上注解
@MapperScan({这里写mapper包名}),让程序扫描到mapper。 -
创建controller来进行测试,
package com.server.vue.controller;import com.server.vue.entity.User; import com.server.vue.mapper.UserMapper; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.*; @ResponseBody @Controller public class test { @Autowired UserMapper userMapper; @RequestMapping("/test/{id}") public User getEmpById(@PathVariable Integer id){ return userMapper.getEmpById(id); } @RequestMapping("test/{id}/{shopping}") public void insert(@PathVariable Integer id,@PathVariable String shopping) { User user=new User(); user.setId(id); user.setUsername(shopping); userMapper.insert(user); }; }
- 先创建mapper对象,并用 @Autowired 自动注入
- 然后编写测试方法,这里用的是根据id查询数据库的信息,所以要从url上获得id,即
@RequestMapping("/test/{id}"),在方法参数列表上加上 @PathVariable 表示当前参数是从url上获得的,
最后 执行mapper接口中的查询函数并传入参数,当程序运行到这里,程序会去寻找mapper下的方法名,由于,mapper已经映射到了mybatis的配置文件上(mapper.xml),所以会去扫描xml文件,当寻找到id为当前方法名的标签时,即进行数据库操作。 - 测试能准确得出结果
-
目录结构
-
源码地址
https://github.com/ADRK12138/java-spring-boot-mybatis/tree/master