准备数据库与相应表,映射对象请参考博主在【JavaEE进阶】MyBatis?? 所使用的
原始表数据如下:
MyBatis XML的?式需要以下两步:
配置数据库连接字符串和MyBatis
写持久层代码
application.yml?件配置内容如下:
spring:
datasource:
url: jdbc:mysql://127.0.0.1:3306/mybatis_test?
characterEncoding=utf8&useSSL=false
username: root
password: 666666
driver-class-name: com.mysql.cj.jdbc.Driver
mybatis:
configuration: # 配置打印 MyBatis?志
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
mapper-locations: classpath:mapper/**Mapper.xml
持久层代码分两部分
?法定义Interface
?法实现:XXX.xml
数据持久层的接?定义:
@Mapper
public interface UserInfoXMlMapper {
}
数据持久成的实现,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="org.example.mybatis.mapper.UserInfoXMlMapper">
</mapper>
创建UserInfoXMLMapper.xml,路径参考yml中的配置
单元测试类创建如下:
测试类初始代码如下:
@SpringBootTest
class UserInfoXMlMapperTest {
@Autowired
private UserInfoXMlMapper userInfoXMlMapper;
}
接下来我们就可以进行实现增删改查了。我们下来依旧采用单元测试的方式进行测试,有不会单元测试的小伙伴,可以看博主上面关于MyBates入门的链接,里面有介绍
UserInfoXMlMapper接?:
Integer insert(UserInfo userInfo);
UserInfoXMLMapper.xml实现如下:
<insert id="insert">
insert into userinfo (username, `password`, age, gender, phone)
values (#{username}, #{password}, #{age},#{gender},#{phone})
</insert>
测试单元代码如下:
@Test
void insert() {
UserInfo userInfo = new UserInfo();
userInfo.setUsername("陈平安");
userInfo.setPassword("123456");
userInfo.setAge(18);
userInfo.setGender(1);
userInfo.setPhone("123456789");
int cound = userInfoXMlMapper.insert(userInfo);
System.out.println("改变数据行数"+cound);
}
启动测试结果如下:
查询数据库如下:
已成功添加
接?定义不变,UserInfoXMLMapper.xml实现设置useGeneratedKeys和keyProperty属性
<insert id="insert" useGeneratedKeys="true" keyProperty="id">
insert into userinfo (username, `password`, age, gender, phone)
values (#{username}, #{password}, #{age},#{gender},#{phone})
</insert>
进行单元测试:
@Test
void insert() {
UserInfo userInfo = new UserInfo();
userInfo.setUsername("陈平安");
userInfo.setPassword("123456");
userInfo.setAge(18);
userInfo.setGender(1);
userInfo.setPhone("123456789");
int cound = userInfoXMlMapper.insert(userInfo);
System.out.println("改变数据行数"+cound+"自增id:"+userInfo.getId());
}
启动测试结果如下:
UserInfoXMlMapper接?:
Integer delete(Integer id);
UserInfoXMLMapper.xml实现如下:
</insert>
<delete id="delete">
delete from userinfo where id = #{id}
</delete>
测试单元代码如下:
@Test
void delete() {
int count = userInfoXMlMapper.delete(1);
System.out.println("改变行数:" + count);
}
启动元测试代码如下:
UserInfoXMlMapper接口如下:
Integer update(UserInfo userInfo);
UserInfoXMLMapper.xml实现代码如下:
<update id="update">
update userinfo set username=#{username} where id=#{id}
</update>
测试单元代码如下:
@Test
void update() {
UserInfo userInfo = new UserInfo();
userInfo.setId(8);
userInfo.setUsername("宁姚");
int count = userInfoXMlMapper.update(userInfo);
System.out.println("改变行数:"+count);
}
测试单元代码启动:
修改成功
查询所有内容
UserInfoXMlMapper接口代码如下:
List<UserInfo> queryAllUser();
UserInfoXMLMapper.xml代码如下:
<select id="queryAllUser" resultType="org.example.mybatis.model.UserInfo">
select * from userinfo
</select>
- resultType :是返回的数据类型,也就是开头我们定义的实体类
启动测试类如下:
我们上面在进行查询所有内容时,结果显?:deleteFlag,createTime,updateTime没有进?赋值
这是由于数据库与java命名规则不同,数据库的蛇形将转换成驼峰,所以无法识别。
解决方法有以下三种:
关于第一种与第三种方法,与使用注解一摸一样,所以博主这里不做讲解,大家可以参考博主写的 【JavaEE进阶】 MyBatis使用注解实现增删改查 里面的解决方法。
我们只需要使用下列方式提前声明
在使用的时候我们只需要,引入resultMap="BaseMap"即可
<select id="queryAllUser" resultMap="BaseMap">
select * from userinfo
</select>
关于《【JavaEE进阶】 MyBatis使用XML实现增删改查》就讲解到这儿,感谢大家的支持,欢迎各位留言交流以及批评指正,如果文章对您有帮助或者觉得作者写的还不错可以点一下关注,点赞,收藏支持一下!