MyBatis XML配置文件
MyBatis开发有两种方式:
1.注解
2.xml
上面我们学习了注解的方式, 下面来学习xml的方式
使用MyBatis的注解方式, 主要是为了完成一些简单的增删改查功能, 而下面我们介绍的xml方式, 则一般用于写一些比较复杂的sql语句.
MyBatis XML的方式需要以下两步:
1.配置数据库连接字符串和MyBatis
2.写持久层代码
配置连接字符串和MyBatis
此步骤需要进行两项设置, 数据库连接字符串设置和MyBatis的XML文件配置.
配置如下:
# 数据库连接配置
spring:
datasource:
url: jdbc:mysql://127.0.0.1:3306/mybatis_test?characterEncoding=utf8&useSSL=false
username: root
password: root
driver-class-name: com.mysql.cj.jdbc.Driver
# 配置 mybatis xml 的⽂件路径,在 resources/mapper 创建所有表的 xml ⽂件
mybatis:
mapper-locations: classpath:mapper/**Mapper.xml
写持久层代码
持久层代码两部分:
1.方法定义: Interface 2.方法实现: XXX.xml
添加mapper接口
数据持久层的接口定义:
import com.bit.mybatis.model.UserInfo;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;
@Mapper
public interface UserInfoXmlMapper {
List<UserInfo> queryAllUser();
}
添加UserInfoXMLMapper.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.bit.mybatis.mapper.UserInfoXmlMapper">
</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.bit.mybatis.mapper.UserInfoXmlMapper">
<select id="queryAllUser" resultType="com.bit.mybatis.model.UserInfo">
select username, password, age, gender, phone from userinfo
</select>
</mapper>
这些是对标签的说明:
<mapper>标签: 需要指定namespace属性, 表示命名空间, 值为mapper接口的全限定名, 包括全包名.类名.(即你这个接口在哪)
<select>查询标签: 是用来执行数据库的查询操作的:
id: 是和Interface定义的方法名称是一样的, 表示对接口的具体实现方法.
resultType: 是返回的数据类型, 也就是开头我们定义的实体类.
单元测试
import com.bit.mybatis.model.UserInfo;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import java.util.List;
import static org.junit.jupiter.api.Assertions.*;
@SpringBootTest
class UserInfoXmlMapperTest {
@Autowired
UserInfoXmlMapper userInfoXmlMapper;
@Test
void queryAllUser() {
List<UserInfo> userInfoList = userInfoXmlMapper.queryAllUser();
System.out.println(userInfoList);
}
}
运行结果如下:
增删改查操作
增(Insert)
UserInfoMapper接口:
Integer insertUser(UserInfo userInfo);
UserInfoMapper.xml实现:
<insert id="insertUser">
insert into userinfo (userName, password, age, gender, phone) values (#{username}, #{password}, #{age}, #{gender}, #{phone})
</insert>
返回自增id
接口定义不变, Mapper.xml实现设置useGeneratedKeys和keyProperty属性. 即:
<insert id="insertUser" useGeneratedKeys="true" keyProperty="id">
删(Delete)
UserInfoMapper接口:
Integer deleteUser(Integer id);
UserInfoMapper.xml实现:
<delete id="deleteUser">
delete from userinfo where id = #{id}
</delete>
改(Update)
UserInfoMapper接口:
Integer updateUser(UserInfo userInfo);
UserInfoMapper.xml实现:
<update id="updateUser">
update userinfo set username = #{username} where id = #{id}
</update>