目录
一、 配置连接字符串和MyBatis
二、书写持久层代码
2.1 添加Mapper接口
2.2 添加UserlnfoXMLMapper.xml
三、增删改查
3.1 、增(Insert)
3.2、删(Delete)
3.3、改 (Update)
3.4、查 (Select)
MyBatisXML的方式需要以下两步:
1.配置数据库连接字符串和MyBatis
2.写持久层代码
一、 配置连接字符串和MyBatis
application.yml文件,配置内容如下:
spring:datasource:url: jdbc:mysql://127.0.0.1:3306/mybatis_test?characterEncoding=utf8&useSSL=falseusername: rootpassword: 123456driver-class-name: com.mysql.cj.jdbc.Drivermybatis: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>
测试:
@Testvoid 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>
测试:
@Testvoid 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岁
@Testvoid 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());}
运行结果: