使用MyBatis实现CRUD操作
文章目录
- 简介
-
- (一)学习方向
- (二)学习事项
- 一,准备工作
- 二,查询表记录
- 三,插入表记录
-
- (一)添加插入映射语句
- (二)在用户映射器接口添加插入方法
- (三)在测试类里测试插入方法
- (四)运行插入记录测试方法
- (五)运行按姓名查询测试方法
- 四,更新表记录
-
- (一)在用户映射器配置文件里添加更新映射语句
- (二)在用户映射器接口添加更新方法
- (三)在测试类添加更新记录测试方法
- (四)运行更新用户记录测试方法
- 五,删除表记录
-
- (一)在用户映射器配置文件里添加删除映射语句
- (二)在用户映射器接口里添加删除方法
- (三)在测试类里添加删除记录测试方法
- (四)运行按编号删除记录测试方法
简介
(一)学习方向
- 使用MyBatis查询表记录
- 使用MyBatis插入表记录
- 使用MyBatis更新表记录
- 使用MyBatis删除表记录
(二)学习事项
-
要使用MyBatis执行任何创建、读取、更新和删除(CRUD)操作,您需要创建与该表相对应的普通旧Java对象(POJO)类。此类描述了将“建模”数据库表行的对象。
-
在UserMapper.xml 的配置文件中,
<mapper namespace="net.huawei.mybatis.mapper.UserMapper">
,命名空间非常重要,不能有错,必须与我们定义的package和接口一致。
一,准备工作
打开MyBatisDemo项目
二,查询表记录
上一讲《使用MyBatis实现简单查询》中,我们在UserMapper.xml里定义了两个查询语句:findById和findAll,对应地在UserMapper接口里定义了两个抽象方法:findById(int id)和findAll()。
(一)在映射器配置文件里引入结果映射元素
如果表的列名与实体的属性名不一致,比如表的register_time字段对应实体类的registerTime属性,我们就需要定义resultMap,当然一致时也可以定义。
MyBatis里jdbcType与javaType的对应关系
jdbcType | javaType |
---|---|
CHAR | String |
VARCHAR | String |
LONGVARCHAR | String |
NUMERIC | java.math.BigDecimal |
DECIMAL | java.math.BigDecimal |
BIT | boolean |
BOOLEAN | boolean |
TINYINT | byte |
SMALLINT | short |
INTEGER | int |
BIGINT | long |
REAL | float |
FLOAT | double |
DOUBLE | double |
BINARY | byte[] |
VARBINARY | byte[] |
LONGVARBINARY | byte[] |
DATE | java.sql.Date |
TIME | java.sql.Time |
TIMESTAMP | java.sql.Timestamp |
CLOB | Clob |
BLOB | Blob |
ARRAY | Array |
DISTINCT | mapping of underlying type |
STRUCT | Struct |
REF | Ref |
DATALINK | java.net.URL |
t_user表的数据类型
在UserMapper.xml文件里创建结果映射元素
将UserMapper接口里抽象方法上的注解暂时注释掉
运行TestUserMapper测试类里的testFindAll()测试方法,查看结果
(二)添加按姓名查询用户记录功能
1,添加按姓名查询的映射语句
在UserMapper.xml里添加映射语句 - findByName
如果要实现按姓名模糊查询用户记录,那么语句要做如下修改
2,在用户映射器接口里添加按姓名查询用户记录的方法
在UserMapper接口里添加findByName()方法
3,添加按姓名查询用户记录的测试方法
在测试类TestUserMapper里添加测试方法testFindByName()
4,测试按姓名查询用户记录
运行测试方法testFindByName(),查看结果
三,插入表记录
(一)添加插入映射语句
在UserMapper.xml文件里添加插入映射语句
<insert id="insert" parameterType="User"useGeneratedKeys="true" keyProperty="id">INSERT INTO t_user(name, age, address)VALUES(#{name}, #{age}, #{address})
</insert>
注意:
- id和parameterType分别与UserMapper接口中的insert方法的名字与参数类型一致。以#{name}的形式引用User参数的name属性,MyBatis将使用反射读取User参数该属性。#{name}中name大小写敏感。引用其它属性与此一致。
- UseGeneratedKeys="true"表明要MyBatis获取由数据库自动生成的主键;keyProperty="id"指定把获取到的主键值注入到User的id属性。
(二)在用户映射器接口添加插入方法
在UserMapper接口里添加insert()方法,方法名insert与插入映射语句里的id值保持一致
(三)在测试类里测试插入方法
在测试类TestUserMapper里添加测试方法testInsert()
@Test
public void testInsert() { // 创建用户对象 User user = new User(); // 设置对象属性 user.setName("王雨涵"); user.setAge(30); user.setAddress("龙马潭区长桥路2号"); // 插入用户记录 int count = userMapper.insert(user); // 提交数据库操作 sqlSession.commit(); // 判断插入记录是否成功 if (count > 0) { System.out.println("恭喜,记录插入成功~"); System.out.println("插入的新记录:" + user);} else { System.out.println("遗憾,记录插入失败~"); }
}
注意:对于增删改操作,必须要执行SQL会话对象的commit()方法才能生效。
(四)运行插入记录测试方法
运行测试方法testInsert(),查看结果
(五)运行按姓名查询测试方法
运行测试方法testFindByName(),查看结果
用户表里姓“王”的记录都被查询出来了
四,更新表记录
(一)在用户映射器配置文件里添加更新映射语句
在UserMapper.xml里添加update映射语句
<update id="update" parameterType="User">UPDATE t_user SET name = #{name},age = #{age},address = #{address} WHERE id = #{id};
</update>
(二)在用户映射器接口添加更新方法
在UserMapper接口里添加update()方法
(三)在测试类添加更新记录测试方法
在测试类TestUserMapper里添加测试方法testUpdate()
@Test // 测试更新用户记录
public void testUpdate() { // 查找id为4的用户记录 User user = userMapper.findById(4); // 输出更新前的记录 System.out.println("更新前的记录:" + user); // 修改用户对象 user.setName("梁辰兴"); user.setAge(25); user.setAddress("北京朝阳区北苑路6号楼"); // 更新用户记录 int count = userMapper.update(user); // 判断更新是否成功 if (count > 0) { // 提交数据库操作 sqlSession.commit(); // 提示用户更新成功 System.out.println("恭喜,记录更新成功~"); System.out.println("更新后的记录:" + user); } else { // 提示用户更新失败 System.out.println("遗憾,记录更新失败~"); }
}
(四)运行更新用户记录测试方法
运行测试方法testUpdate(),查看结果
五,删除表记录
(一)在用户映射器配置文件里添加删除映射语句
在UserMapper.xml文件里添加映射语句deleteById
注意:要设置参数类型。
<delete id="deleteById" parameterType="int">DELETE FROM t_user WHERE id = #{id};
</delete>
(二)在用户映射器接口里添加删除方法
在UserMapper接口里添加deleteById()方法,方法名要与删除映射语句的id值保持一致
(三)在测试类里添加删除记录测试方法
在测试类TestUserMapper里添加测试方法testDeleteById()
// 按编号删除记录测试
@Test
public void testDeleteById() { // 查找id为4的用户记录 int id = 4; User user = userMapper.findById(id); // 输出待删除的记录 System.out.println("待删记录:" + user); // 按编号删除用户记录 int count = userMapper.deleteById(id); // 判断删除是否成功 if (count > 0) { // 提交数据库操作 sqlSession.commit(); // 提示用户删除成功 System.out.println("恭喜,编号为[" + id + "]的记录删除成功~"); } else { // 提示用户删除失败 System.out.println("遗憾,编号为[" + id + "]的记录删除失败~"); }
}
(四)运行按编号删除记录测试方法
运行测试方法testDeleteById(),查看结果
查看用户表记录