续上一篇MyBatis学习笔记-01MyBatis入门,我们继续讲讲通过MyBatis进行增删改操作。
本文涉及内容主要来自与本人学习《拉勾教育-大数据高薪训练营》课程的记录和总结。
1.3 映射配置文件概述
找到我们之前的映射配置文件UserMapper.xml
1.3.1 新增用户
- 编辑UserMapper.xml,增加insert标签的内容
<!--新增用户-->
<!--#{} : mybatis中的占位符,等同于JDBC的?-->
<insert id="saveUser" parameterType="com.lagou.domain.User">
insert into user(username, birthday, sex, address) values (#{username}, #{birthday}, #{sex}, #{address})
</insert>
#{} : mybatis中的占位符,等同于JDBC的?
在实际配置时候,为了让mybatis知道每个{}号中对应的是什么值,还需要填入parameterType对应的类变量汇总的类成员名称(实际上这个地方应该是对应类变量中没一个get方法的方法名去掉get后首字母小写的字符串。)
- 添加测试代码测试新增操作
@Test
public void testUserSave() throws IOException {
// 1. 加载核心配置文件
InputStream resourceAsStream = Resources.getResourceAsStream("sqlMapConfig.xml");
// 2. 获取sqlSessionFactory工厂对象
SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
// 3. 获取sqlSession会话对象
SqlSession sqlSession = sessionFactory.openSession();
// 4. 创建需要新增的类对象,以及对类变量的赋值
User user = new User();
user.setUsername("jack");
user.setBirthday(new Date());
user.setSex("男");
user.setAddress("上海市浦东新区");
// 5. 执行sql
sqlSession.insert("userMapper.saveUser", user);
// 6.DML语句,手动提交事务
sqlSession.commit();
// 7.关闭释放资源
sqlSession.close();
}
- 注意事项
- 插入语句使用insert标签
- 映射文件中使用parameterType属性指定要插入的数据类型
- Sql语句中使用#{实体属性名}方式引用是体重的属性值
- 插入操作使用的API是sqlSession.insert("namespace.id",实体对象)
- 插入操作设计数据库数据的变化,所以需要使用sqlSession对象显式的提交事务,sqlSession.commit()
我在实际测试的时候遇到个问题,就是插入数据的中文乱码,这里可以设置数据库链接的字符集(&在xml文件是需要转义的,所以需要使用&进行转义)
正确的url:jdbc:mysql://IP:port/mybatis_db?serverTimezone=UTC&useUnicode=true&characterEncoding=UTF-8
1.3.2 更新用户
- 编辑UserMapper.xml,增加update标签的内容
<!--更新用户-->
<update id="updateUser" parameterType="com.lagou.domain.User">
update user set username=#{username},birthday=#{birthday},sex=#{sex},address=#{address} where id=#{id}
</update>
- 添加测试代码测试更新操作
@Test
public void testUserUpdate() throws IOException {
// 1. 加载核心配置文件
InputStream resourceAsStream = Resources.getResourceAsStream("sqlMapConfig.xml");
// 2. 获取sqlSessionFactory工厂对象
SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
// 3. 获取sqlSession会话对象
SqlSession sqlSession = sessionFactory.openSession();
// 4. 创建需要新增的类对象,以及对类变量的赋值
User user = new User();
user.setId(3);
user.setUsername("jack");
user.setBirthday(new Date());
user.setSex("男");
user.setAddress("上海市浦东新区");
// 5. 执行sql
sqlSession.update("userMapper.updateUser", user);
// 6.DML语句,手动提交事务
sqlSession.commit();
// 7.关闭释放资源
sqlSession.close();
}
- 注意事项
- 更新语句使用update标签
- 更新操作使用的API是sqlSession.update("namespace.id",实体对象)
1.3.3 删除用户
- 编辑UserMapper.xml,增加delete标签的内容
<!--删除用户-->
<delete id="deleteUser" parameterType="java.lang.Integer">
delete from user where id=#{id}
</delete>
- 添加测试代码测试更新操作
@Test
public void testUserDelete() throws IOException {
// 1. 加载核心配置文件
InputStream resourceAsStream = Resources.getResourceAsStream("sqlMapConfig.xml");
// 2. 获取sqlSessionFactory工厂对象
SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
// 3. 获取sqlSession会话对象
SqlSession sqlSession = sessionFactory.openSession();
// 4. 执行sql
int insert = sqlSession.delete("userMapper.deleteUser", 4);
System.out.println(insert);
// 5.DML语句,手动提交事务
sqlSession.commit();
// 6.关闭释放资源
sqlSession.close();
}
- 注意事项
- 删除语句使用delete标签
- 删除操作使用的API是sqlSession.delete("namespace.id",实体对象)
- xml中配置删除语句我们只需要传一个id,所以案例里面,我们使用了直接传递Interage参数的用法。
MyBatis学习笔记系列
MyBatis学习笔记-01MyBatis入门
MyBatis学习笔记-02映射配置文件
MyBatis学习笔记-03核心配置文件
网友评论