目录
MyBatisXML的方式需要以下两步:
1.配置数据库连接字符串和MyBatis
2.写持久层代码
一、 配置连接字符串和MyBatis
application.yml文件,配置内容如下:
spring:
datasource:
url: jdbc:mysql://127.0.0.1:3306/mybatis_test?characterEncoding=utf8&useSSL=false
username: root
password: 123456
driver-class-name: com.mysql.cj.jdbc.Driver
mybatis:
mapper-locations: classpath:mapper/**Mapper.xml #配置mybatisxml的文件路径,在resources/mapper创建所有表的xml文件
application.properties文件,配置内容如下:
#驱动类名称
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
#数据库连接的url
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/mybatis_test?
characterEncoding=utf8&useSSL=false
#连接数据库的用户名
spring.datasource.username=root
#连接数据库的密码
spring.datasource.password=123456
#配置mybatisxml的文件路径,在resources/mapper 创建所有表的xml文件
mybatis.mapper-locations=classpath:mapper/**Mapper.xml
二、书写持久层代码
持久层代码分两部分
1. 方法定义Interface
2. 方法实现:XXX.xml
2.1 添加Mapper接口
数据持久层的接口定义:
package com.example.book.mapper;
import com.example.book.model.UserInfo;
import org.apache.ibatis.annotations.*;
import java.util.List;
@Mapper
public interface UserInfoMapper {
List<UserInfo> queryAllUsers();
}
2.2 添加UserlnfoXMLMapper.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.book.mapper.UserInfoMapper">
</mapper>
注意:创建UserInfoXMLMapper.xml 是的路径参考yml文件
查询所有用户的具体实现:
<?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.book.mapper.UserInfoMapper">
<select id="queryAllUsers" resultType="com.example.book.model.UserInfo">
select *
from user_info
</select>
</mapper>
以下是对以上标签的说明:
<mapper>标签:需要指定namespace属性,表示命名空间,值为mapper接口的全限定名,包括全包名.类名。
<select>查询标签:用来执行数据库的查询操作
id:是和Interface(接口)中定义的方法名称一样的,表示对接口的具体实现方法。
resultType:是返回的数据类型,也就是定义的实体类(UserInfo)
测试:
@Test
//表示是测试方法
void queryAllUsers() {
List<UserInfo> userInfoList = userInfoMapper.queryAllUsers();
System.out.println(userInfoList.toString());
}
运行结果:
三、增删改查
3.1 、增(Insert)
UserInfoMapper接口:
@Mapper
public interface UserInfoMapper {
Integer insertUser(UserInfo userInfo);
}
UserInfoMapper.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.book.mapper.UserInfoMapper">
<insert id="insertUser" useGeneratedKeys="true" keyProperty="id">
insert into user_info (username, `password`, age, gender, phone)
values (#{username}, #{password}, #{age}, #{gender}, #{phone})
</insert>
</mapper>
如果使用@Param设置参数名称的话,使用方法和注解类似 UserInfoMapper接口:
@Mapper
public interface UserInfoMapper {
Integer insertUser(@Param("userInfo") UserInfo userInfo);
}
UserInfoMapper.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.book.mapper.UserInfoMapper">
<insert id="insertUser" useGeneratedKeys="true" keyProperty="id">
insert into user_info (username, `password`, age, gender, phone)
values (#{userInfo.username}, #{userInfo.password}, #{userInfo.age}, #{userInfo.gender}, #{userInfo.phone})
</insert>
</mapper>
测试:
@Test
void insertUser() {
UserInfo userInfo = new UserInfo();
userInfo.setUsername("admin");
userInfo.setPassword("123456");
userInfo.setAge(22);
userInfo.setGender(2);
userInfo.setPhone("12345678966");
userInfoMapper.insertUser(userInfo);
}
运行结果:
3.2、删(Delete)
UserInfoMapper接口:
@Mapper
public interface UserInfoMapper {
Integer deleteUser(Integer id);
}
UserInfoXMLMapper.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.book.mapper.UserInfoMapper">
<delete id="deleteUser">
delete from user_info where id = #{id}
</delete>
</mapper>
测试:
@Test
void deleteUser() {
userInfoMapper.deleteUser(1);
}
3.3、改 (Update)
UserInfoMapper接口:
@Mapper
public interface UserInfoMapper {
Integer updateUser(Integer id);
}
UserInfoXMLMapper.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.book.mapper.UserInfoMapper">
<delete id="updateUser">
update user_info set username=#{username} where id=#{id}
</delete>
</mapper>
测试:
将id为2的用户年龄更改为22岁
@Test
void updateUser() {
UserInfo userInfo = new UserInfo();
userInfo.setId(2);
userInfo.setUsername("admin");
userInfo.setPassword("123456");
userInfo.setAge(22);
userInfo.setGender(2);
userInfo.setPhone("12345678966");
userInfoMapper.updateUser(userInfo);
}
运行结果:
3.4、查 (Select)
Mapper接口实现:
@Mapper
public interface UserInfoMapper {
List<UserInfo> queryAllUsers();
}
UserInfoXMLMapper.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.book.mapper.UserInfoMapper">
<select id="queryAllUsers" resultType="com.example.book.model.UserInfo">
select *
from user_info
</select>
</mapper>
测试:
运行结果:
注意:如果 deleteFlag,createTime, updateTime 三个字段为null
解决办法和注解类似:
1.起别名
2.结果映射
3.开启驼峰命名
其中1,3的解决办法和注解一样,下面介绍2.结果映射
Mapper接口:
@Mapper
public interface UserInfoMapper {
List<UserInfo> queryAllUsers();
UserInfoXMLMapper.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.book.mapper.UserInfoMapper">
<resultMap id="BaseMap" type="com.example.book.model.UserInfo">
<id property="id" column="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="queryAllUsers" resultMap="BaseMap">
select *
from user_info
</select>
</mapper>
测试:
//表示是测试方法
void queryAllUsers() {
List<UserInfo> userInfoList = userInfoMapper.queryAllUsers();
System.out.println(userInfoList.toString());
}
运行结果: