🎍前言
准备数据库与相应表,映射对象请参考博主在【JavaEE进阶】MyBatis⼊⻔ 所使用的
原始表数据如下:
MyBatis XML的⽅式需要以下两步:
- 配置数据库连接字符串和MyBatis
- 写持久层代码
🍀配置连接字符串和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接⼝
数据持久层的接⼝定义:
@Mapper public interface UserInfoXMlMapper { }
🚩添加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="org.example.mybatis.mapper.UserInfoXMlMapper"> </mapper>
创建UserInfoXMLMapper.xml,路径参考yml中的配置
🚩单元测试
单元测试类创建如下:
测试类初始代码如下:
@SpringBootTest class UserInfoXMlMapperTest { @Autowired private UserInfoXMlMapper userInfoXMlMapper; }
接下来我们就可以进行实现增删改查了。我们下来依旧采用单元测试的方式进行测试,有不会单元测试的小伙伴,可以看博主上面关于MyBates入门的链接,里面有介绍
🌴增(Insert)
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); }
启动测试结果如下:
查询数据库如下:
已成功添加
🚩返回⾃增id
接⼝定义不变,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()); }
启动测试结果如下:
🎋删(Delete)
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); }
启动元测试代码如下:
🎄改(Update)
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); }
测试单元代码启动:
修改成功
🌲查(Select)
查询所有内容
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实现增删改查》就讲解到这儿,感谢大家的支持,欢迎各位留言交流以及批评指正,如果文章对您有帮助或者觉得作者写的还不错可以点一下关注,点赞,收藏支持一下!