- 👑专栏内容:MyBatis
- ⛪个人主页:子夜的星的主页
- 💕座右铭:前路未远,步履不停
目录
- 一、MyBatis XML方式
- 1、配置数据库
- 2、指明XML路径
- 3、写持久层代码
- 二、基础操作
- 1、新增
- 2、删除
- 3、更新
- 4、查找
- Ⅰ、开启驼峰命名
- Ⅱ、结果映射
一、MyBatis XML方式
使⽤Mybatis的注解⽅式,主要是来完成⼀些简单的增删改查功能。如果需要实现复杂的SQL功能,建议使⽤XML来配置映射语句,也就是将SQL语句写在XML配置⽂件中。
MyBatis XML的方式需要以下两步:
- 配置数据库连接字符串
- 指明XML的路径
- 写持久层代码
1、配置数据库
和前面配置数据库的方法一样。
如果是application.yml
文件,则配置如下内容:
spring:
datasource:
url: jdbc:mysql://localhost:3306/mybatis_test?useSSL=false&allowPublicKeyRetrieval=true
username: root # 数据库用户名
password: 11111 # 数据库密码
driver-class-name: com.mysql.cj.jdbc.Driver
如果是application.properties
文件,则配置如下内容:
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/数据库名?characterEncoding=utf8&useSSL=false
# 数据库名称
spring.datasource.username=root
# 数据库密码
spring.datasource.password=11111
2、指明XML路径
如果是application.yml
⽂件,配置内容如下:
mybatis:
mapper-locations: classpath:mapper/**Mapper.xml
如果是application.properties
⽂件,配置内容如下:
# 配置 mybatis xml 的⽂件路径,在 resources/mapper 创建所有表的 xml ⽂件
mybatis.mapper-locations=classpath:mapper/**Mapper.xml
在mapper文件夹内,新建XXXMapper.xml
文件
在该文件内写入MyBatis 的固定 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.demo.mapper.UserInfoXMLMapper">
</mapper>
这里通常与 Mapper 接口的完全限定名相匹配。这样 MyBatis 就能够将接口中的方法与映射器文件中的 SQL 语句关联起来。
3、写持久层代码
持久层代码分两部分
- ⽅法定义 Interface
- ⽅法实现: XXXMapper.xml
新建一个接口:UserInfoXMlMapper
@Mapper
public interface UserInfoXMLMapper {
List<UserInfo> selectAll();
}
新建UserInfoXMLMapper
用于实现该接口的方法。
<?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.mybatisdemo.mapper.UserInfoXMLMapper">
<select id="selectAll" resultType="com.example.mybatisdemo.model.UserInfo">
select * from userinfo
</select>
</mapper>
-
<mapper>
标签是 MyBatis 中映射器文件的基础,它定义了一个命名空间,用于隔离不同的 SQL 语句,防止 SQL ID 冲突。 -
namespace
属性是必须的,它通常设置为 Mapper 接口的全限定名,这样 MyBatis 可以将接口中的方法与映射器文件中的 SQL 语句关联起来。例如:<mapper namespace="com.example.mybatisdemo.mapper.UserInfoXMLMapper">
-
resultType
属性用于指定查询结果的类型,它应该是返回对象的完全限定类名或别名。MyBatis 会将查询结果映射到这个类型的实例中。
二、基础操作
1、新增
UserInfoXMLMapper
接口:
@Mapper
public interface UserInfoXMLMapper {
Integer insertUser(UserInfo userInfo);
}
UserInfoXMLMapper.xml
进行实现:
<insert id="insertUser">
insert into userinfo (username, password, age, gender, phone)
values (#{username}, #{password}, #{age},#{gender},#{phone})
</insert>
对应的单元测试:
@Autowired
private UserInfoXMLMapper userInfoXMLMapper;
@Test
void insertUser() {
UserInfo userInfo = new UserInfo();
userInfo.setUsername("lisi");
userInfo.setPassword("123456");
userInfo.setAge(20);
userInfo.setPhone("12345678901");
userInfo.setGender(1);
Integer result = userInfoXMLMapper.insertUser(userInfo);
}
获取插入数据的自增ID:接口定义不变,Mapper.xml
实现设置useGeneratedKeys 和keyProperty属性:
<insert id="insertUser" useGeneratedKeys="true" keyProperty="id">
insert into userinfo (username, password, age, gender, phone)
values (#{username}, #{password}, #{age},#{gender},#{phone})
</insert>
2、删除
UserInfoXMLMapper
接口:
@Mapper
public interface UserInfoXMLMapper {
Integer deleteUser(Integer id);
}
UserInfoXMLMapper.xml
进行实现:
<delete id="deleteUser">
delete from userinfo where id = #{id}
</delete>
3、更新
UserInfoXMLMapper
接口:
@Mapper
public interface UserInfoXMLMapper {
Integer updateUser(UserInfo userInfo);
}
UserInfoXMLMapper.xml
进行实现:
<update id="updateUser">
update userinfo set username=#{username} where id=#{id}
</update>
4、查找
同样的, 使⽤XML 的⽅式进⾏查询, 也存在数据封装的问题。解决办法和注解类似:使用结果映射或者开启驼峰命名。
Ⅰ、开启驼峰命名
和前面一样。在application.yml
文件中加入下方配置:
mybatis:
configuration:
map-underscore-to-camel-case: true
Ⅱ、结果映射
<resultMap id="BaseMap" type="com.example.demo.model.UserInfo">
<id column="id" property="id"></id>
<result column="delete_flag" property="deleteFlag"></result>
<result column="create_time" property="createTime"></result>
<result column="update_time" property="updateTime"></result>
</resultMap>
<select id="selectAllUser" resultMap="BaseMap">
select id, username, `password`, age, gender, phone, delete_flag,
create_time, update_time from userinfo
</select>
<resultMap>
标签:
<resultMap>
用于定义如何将查询结果映射到 Java 对象上。id
属性是结果映射的唯一标识符。type
属性指定了结果映射的 Java 类型,通常是实体类的全限定名。
<id>
标签:
<id>
标签用于指定主键列的映射。column
属性表示数据库表中的列名。property
属性表示 Java 对象中的属性名。
<result>
标签:
<result>
标签用于指定非主键列的映射。column
属性表示数据库表中的列名。property
属性表示 Java 对象中的属性名。