前言:
小伙伴们,大家好,我是狂奔の蜗牛rz,当然你们可以叫我蜗牛君,我是一个学习Java半年多时间的小菜鸟,同时还有一个伟大的梦想,那就是有朝一日,成为一个优秀的Java架构师。
这个Mybatis基础学习系列是用来记录我学习Mybatis框架基础知识的全过程 (这个系列是参照B站狂神的Mybatis最新教程来写的,由于是之前整理的,但当时没有发布出来,所以有些地方可能有错误,希望大家能够及时指正!)
之后我将会尽量以一天一更的速度更新这个系列,还没有学习Mybatis3框架的小伙伴可以参照我的博客学习一下;当然学习过的小伙伴,也可以顺便跟我一起复习一下基础。最后,希望能够和大家一同进步吧!加油吧!少年们!
今天我们来到了Mybatis基础学习的第三站:CRUD增删改查,主要内容就是使用Mybatis框架来实现一些简单的增删改查功能,让大家能够快速的上手Mybatis框架!废话不多说,让我们开始今天的学习内容吧。
特别提醒:由于今天的学习内容基于上一期第一个Mybatis程序的,如果还没有看过上篇博客的小伙伴,建议看完上期再继续学习本期内容,上篇博客的地址链接:Mybatis基础学习之第一个Mybatis程序
4. CRUD增删改查
4.1 查询用户信息
选择,查询语句:
- id:就是对应namespace中的方法名
- resultType:SQL语句执行的返回值
- parameterMap:参数类型
4.1.1 编写UserMapper接口
public interface UserMapper {
// 根据Id查询用户
User getUserById(int id);
}
4.1.2 编写UserMapper.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">
<!-- namespace中的包名要和Dao/Mapper接口的包名一致 -->
<mapper namespace="com.kuang.dao.UserMapper">
<!-- 通过id查询指定用户 -->
<select id="getUserById" parameterType="int" resultType="com.kuang.pojo.User">
select * from mybatis.user where id = #{id}
</select>
</mapper>
4.1.3 方法单元测试
1. 编写UserMapperTest测试类
public class UserMapperTest {
@Test
public void getUserById() {
// 获得SqlSession对象
SqlSession sqlSession= MybatisUtils.getSqlSession();
// 使用getMapper方法获取接口对象
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
// 调用getUserById方法查询指定用户
User user = mapper.getUserById(1);
// 打印用户信息
System.out.println(user);
// 关闭sqlSession
sqlSession.close();
}
}
2. 测试结果
结果:查询指定用户信息成功!
4.2 插入用户信息
4.2.1 编写UserMapper接口方法
public interface UserMapper {
// 插入用户信息
int addUser(User user);
}
4.2.2 编写UserMapper.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">
<!-- namespace中的包名要和Dao/Mapper接口的包名一致 -->
<mapper namespace="com.kuang.dao.UserMapper">
<!-- 插入用户信息
对象中的属性,可以直接取出来 -->
<insert id="addUser" parameterType="com.kuang.pojo.User">
insert into mybatis.user(id, name, pwd) values (#{id},#{name},#{pwd});
</insert>
</mapper>
4.2.3 方法单元测试
1. 编写UserMapperTest测试类
public class UserMapperTest {
@Test
public void addUser() {
// 获得SqlSession对象
SqlSession sqlSession= MybatisUtils.getSqlSession();
// 使用getMapper方法获得接口对象
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
// 调用addUser方法插入用户
int result = mapper.addUser(new User(4,"钟兴民","zxm123456"));
// 判断结果是否大于0
if(result > 0) {
System.out.println("插入成功!");
}
// 提交事务,如果不提交事务则会插入不进去数据
sqlSession.commit();
// 关闭sqlSession
sqlSession.close();
}
}
2. 测试结果
结果:插入用户信息成功!
4.3 修改用户信息
4.3.1 编写UserMapper接口
public interface UserMapper {
// 修改用户信息
int updateUser(User user);
}
4.3.2 编写UserMapper.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">
<!-- namespace中的包名要和Dao/Mapper接口的包名一致 -->
<mapper namespace="com.kuang.dao.UserMapper">
<!-- 修改用户信息 -->
<update id="updateUser" parameterType="com.kuang.pojo.User">
update mybatis.user set name=#{name},pwd=#{pwd} where id = #{id};
</update>
</mapper>
4.3.3 方法单元测试
1. 编写UserMapperTest测试类
public class UserMapperTest {
@Test
public void updateUser() {
// 获取SqlSession
SqlSession sqlSession = MybatisUtils.getSqlSession();
// 获取接口对象
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
// 调用updateUser方法
mapper.updateUser(new User(4,"黄雨勋","hyx123456"));
// 提交事务
sqlSession.commit();
// 关闭sqlSession
sqlSession.close();
}
}
2. 测试结果
结果:修改用户信息成功!
4.4 删除用户信息
4.4.1 编写UserMapper接口
public interface UserMapper {
// 删除用户信息
int deleteUser(int id);
}
4.4.2 编写UserMapper.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">
<!-- namespace中的包名要和Dao/Mapper接口的包名一致 -->
<mapper namespace="com.kuang.dao.UserMapper">
<!-- 删除用户信息 -->
<delete id="deleteUser" parameterType="com.kuang.pojo.User">
delete from mybatis.user where id = #{id};
</delete>
</mapper>
4.4.3 方法单元测试
1. 编写UserMapperTest测试类
public class UserMapperTest {
@Test
public void deleteUser() {
// 获取SqlSession对象
SqlSession sqlSession = MybatisUtils.getSqlSession();
// 获取接口对象
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
// 调用deleteUser方法
mapper.deleteUser(4);
// 提交事务
sqlSession.commit();
// 关闭sqlSession
sqlSession.close();
}
}
2. 测试结果
结果:删除用户信息成功!
注意:增删改需要提交事务!
下面是作为我们初学者在编写代码过程中可能会遇到的问题,这里我总结了一下:
4.5 分析错误
1. 标签不匹配
- 例如insert标签里的sql语句是select语句
<insert id="addUser" parameterType="com.kuang.pojo.User">
insert into mybatis.user(id, name, pwd) values (#{id},#{name},#{pwd})
</insert>
2.resource路径错误
- resource绑定mapper,需要使用路径!要写成 resource=“com/kuang/dao/UserMapper.xml”,而不是resource=“com.kuang.dao.UserMapper.xml”
<!-- 每一个Mapper.xml都需要再Mybatis核心配置文件中注册 -->
<mappers>
<mapper resource="com/kuang/dao/UserMapper.xml"/>
</mappers>
3.程序配置文件出错
程序配置文件必须符合规范!
注意:读错要从后往前读!
4.空指针异常
- 发生错误:java.lang.NullPointException
- 报错原因:
重复定义sqlSessionFactory,没有注册到资源,导致引发空指针异常
5.xml文件中文乱码
- 输出的xml文件中存在中文乱码问题!
6. maven资源未导出
- 在build中配置resources,来防止我们资源导出失败的问题!
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>false</filtering>
</resource>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<!--需要把filtering改为false-->
<filtering>false</filtering>
</resource>
</resources>
</build>
好了,今天的有关CRUD增删改查的学习就到此结束啦,欢迎小伙伴们积极学习和讨论,喜欢的可以给蜗牛君点个关注,顺便来个一键三连,我们下期见,拜拜啦!
参考视频链接:https://www.bilibili.com/video/BV1NE411Q7Nx?spm_id_from=333.999.0.0(【狂神说Java】Mybatis最新完整教程IDEA版通俗易懂)