简介
MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。
添加依赖
在pom.xml文件添加mysql与mybatis的依赖,如下:
<!-- mysql 依赖 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<!-- mybatis 依赖 -->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.2.2</version>
</dependency>
在添加了mysql与mybatis依赖后,我们需要接着配置mysql连接信息,在application.yml配置文件中,如下:
spring:
datasource:
username: root # 数据库用户名
password: 123456 # 数据库密码
url: jdbc:mysql://localhost:3311/yun?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8 # 数据库连接串
driver-class-name: com.mysql.cj.jdbc.Driver # mysql连接驱动
mybatis:
configuration:
map-underscore-to-camel-case: true #是否启用驼峰命名法
新版本的mybatis提供了两种方式进行数据库的操作,分别可以通过注解标注的方式和XML配置文件的方式对数据库进行相关的操作。
使用注解方式
1、新建数据库表并添加测试数据
CREATE TABLE `user` (
`id` int NOT NULL AUTO_INCREMENT,
`name` varchar(225) DEFAULT NULL,
`city` varchar(255) DEFAULT NULL,
`created_time` datetime DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
BEGIN;
INSERT INTO `user` VALUES (1, 'xiaoyuan', 'shenzhen', '2022-09-25 18:30:11');
COMMIT;
2、新建数据库表实体类User
新建一个dao的类包,在该类包中新建User实体类
@Data
public class User {
private Integer id;
private String name;
private String city;
private LocalDateTime createdTime;
}
3、新建myBatis Mapper接口
新建一个mapper的类包,在该类包下新建一个UserMapper的接口类,
@Mapper
public interface UserMapper {
@Select("select * from user where id=#{id}")
public User getUserInfo(Integer id);
}
在这个接口类上需要标注上@Mapper注解,这个一定不能忘记,@Select则代表这是一个查询操作,在@Select 注解里直接填写我们需要查找的SQL语句,#{id}代表的预编译占位符,在SQL语句正式执行时,会用参数id的值来代替#{id}。
@Select() 代表查询操作
@Update() 代表更新操作
@Delete() 代表删除操作
@Insert() 代表新增操作
4、编写Controller执行测试
新建一个UserController的类文件,里面调用UserMapper进行查询操作,如下:
@RestController
@RequestMapping("user")
public class UserController {
@Autowired
private UserMapper userMapper;
@GetMapping
public User getUserInfo(){
User user = userMapper.getUserInfo(1);
return user;
}
}
private UserMapper userMapper
使用用了@Autowired
自动注入注解获取容器中的Bean,在getUserInfo()方法中传入参数1
。启动应用,访问URL: http://localhost:8080/user ,接口返回结果如下:
{
"id": 1,
"name": "xiaoyuan",
"city": "shenzhen",
"createdTime": "2022-09-25T18:30:11"
}
整个项目的目录如下:
到这里结束,SpringBoot已经初步整合了myBatis。
使用XML方式
mybatis不但可以使用注解的方式对数据库进行相关操作,也可以使用传统XML的方式。
1、新建xml映射文件包mapper
这个mapper包是建在resources资源包下的,该包主要保存以xml结尾的xxxxMapper.xml文件,如下:
2、更改配置文件项
在applicaton.yml配置中,添加mapper-locations: classpath:mapper/*.xml
的配置项
mybatis:
configuration:
map-underscore-to-camel-case: true #是否启用驼峰命名法
mapper-locations: classpath:mapper/*.xml # 配置xml的配置路径
type-aliases-package: com.example.demo2.dao #定义数据表与实体类的包路径
mapper-location
配置项主要是配置xxxMapper.xml文件存放目录。
3、新建XML映射文件
在resources/mapper
包下新建一个XML映射文件,文件名为UserMapper.xml
,一般情况我们在这里的文件名与之前定义的xxxMapper.java同名,如下
新建好UserMapper.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.example.demo2.mapper.UserMapper"> @1
</mapper>
@1:namespace
的内容为需要映射的接口类,在这里这个XML与之映射的是com.example.demo2.mapper.UserMapper
类,即我们上面定义的接口类。
4、Mapper接口类定义
由于我们现在是使用XML来进行数据库的相关操作,因此,需要对上面定义的Mapper接口类进行修改,去除掉@Select()查询注解,如下:
@Mapper
public interface UserMapper {
User getUserInfo(Integer id);
}
5、添加getUserInfo方法映射
<?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.example.demo2.mapper.UserMapper">
<select id="getUserInfo" resultType="com.example.demo2.dao.User"> @1
select * from user where id=#{id}
</select>
</mapper>
@1: 这里定义一个select查询语句串,这里有两个需要注意的点:
1、<select>
标签的id值需要与UserMapper
文件中的getUserInfo
方法一致,一一对应,并且在同一个xml里不能重点,需唯一。
2、resultType
:为查询结果返回值,在这里返回的是User类。
6、编写Controller测试
新建一个UserController的类文件,里面调用UserMapper进行查询操作,如下:
@RestController
@RequestMapping("user")
public class UserController {
@Autowired
private UserMapper userMapper;
@GetMapping
public User getUserInfo(){
User user = userMapper.getUserInfo(1);
return user;
}
}
private UserMapper userMapper
使用用了@Autowired
自动注入注解获取容器中的Bean,在getUserInfo()方法中传入参数1
。启动应用,访问URL: http://localhost:8080/user ,接口返回结果如下:
{
"id": 1,
"name": "xiaoyuan",
"city": "shenzhen",
"createdTime": "2022-09-25T18:30:11"
}
原创文章,作者:jiafegn,如若转载,请注明出处:https://www.techlearn.cn/archives/2165