MyBatis教程大全


 MyBatis SQL 映射

     MyBatis select 标签

     MyBatis 多数据库支持

     MyBatis selectKey 标签作用

     MyBatis @SelectKey注解用法介绍

     MyBatis @SelectKey注解用法详细介绍

     MyBatis keyProperty 属性介绍

     MyBatis insert、update 和 delete 元素

     MyBatis sql 元素

 MyBatis SQL 参数映射

     MyBatis SQL 参数映射

 MyBatis 动态SQL

     MyBatis 动态SQL与数据准备

     MyBatis if 标签

     MyBatis if else 用法

     MyBatis choose、when、otherwise 标签

     MyBatis where 标签

     MyBatis set 标签

     MyBatis foreach 标签

     MyBatis bind 标签

     MyBatis trim 标签

 MyBatis SQL 结果映射

 MyBatis SQL 结果之关系映射

 MyBatis 使用介绍

     MyBatis typeAliases 类型别名

     MyBatis typeHandlers 类型处理器

     MyBatis Transaction 事务接口

     MyBatis transactionManager 事务管理

     SqlSessionFactory 介绍

     MyBatis 核心对象 SqlSession

     MyBatis 初始化 创建 Session 实例

     MyBatis ObjectFactory 对象工厂

     MyBatis缓存机制:一级缓存和二级缓存

     MyBatis 常用注解

 MyBatis 配置文件

     MyBatis 配置文件

 MyBatis 映射

     MyBatis 映射简介

     MyBatis ResultMap 映射

     MyBatis 自动映射

     MyBatis 高级映射

     MyBatis 集合映射

     MyBatis 关联映射

     MyBatis 一对一关联映射

     MyBatis 一对多关联映射

     MyBatis 多对多关联映射

     MyBatis 一对一(注解形式)

     MyBatis 一对多(注解形式)

     MyBatis 多对多(注解形式)

     MyBatis resultMap 元素

 MyBatis 面试题库

     #{}和${}的区别是什么?

     数据库链接中断如何处理?

     数据库插入重复如何处理?

     事务执行过程中宕机的应对处理方式

     Java客户端中的一个Connection问题

MyBatis set 标签

MyBatis set 标签

set 标签可以被用于动态包含需要更新的列,而舍去其他的,例如多余的逗号。

<!-- 根据id查询员工信息-->
<select id="selectEmployeewithId" parameterType="int" resultType="cn.mybatis.domain.Employee">
    SELECT * FROM tb_employee where id = #{id}
</select>

<!-- 动态更新员工信息-->
<update id="updateEmployeeIfNecessary" parameterType="cn.mybatis.domain.Employee">
    update tb_employee
    <set>
      <if test="loginname != null">loginname=#{loginname} ,</if>
      <if test="password != null">password=#{password} ,</if>
      <if test="name != null">name=#{name},</if>
      <if test="sex != null">sex=#{sex},</if>
      <if test="age != null">age=#{age},</if>
      <if test="phone != null">phone=#{phone} ,</if>
      <if test="sal != null">sal=#{sal},</if>
      <if test="state != null">state=#{state}</if>
    </set>
    where id=#{id}
</update>

set 标签会动态前置SET关键字,同时也会消除无关的逗号,因为使用了条件语句之后很可能就会在生成的赋值语句的后面留下这些逗号。

// 根据id查询员工
Employee selectEmployeeWithId(Integer id);
// 动态更新员工
void updateEmployeeIfNecessary (Employee employee);

需要注意的是,updateEmployeelfNecessar方法传递的参数不是之前使用的HashMap,而是一个Employee对象,因为通常更新操作时都是先查询出一个实体对象再进行更新操作。

public void testUpdateEmployeeIfNecessary(qlSession session)
{
    EmployeeMapper em = session.getMapper(EmployeeMapper.class);
    // 查询id为4的员工信息
    Employee employee = em.selectEmployeewithId(4);
    // 设置需要修改的属性
    employee.setLoginname("mary");
    employee.setPassword("123");
    employee.setName("玛丽");
    em.updateEmployeeIfNecessary(employee);
}

测试updateEmployeelfNecessa方法,控制台显示如下:

DEBUG [main]==> Preparing: SELECT * FROM tb_ employee where id= ?
DEBUG [main]==> Parameters :4 (Integer)
DEBUG [main]<== Total :1
DEBUG [main]==> Preparing :update tb_employee SET loginname=?,password=?,name=?,sex=?,age=?,phone=?,sal=?,state=? where id=?
DEBUG [main]==> Parameters: mary(String),123(String),玛丽(String),女(String),20(Integer),13902016666(String),5800.0(Double),ACTIVE(String),4 (Integer)
DEBUG [main]<== Updates :1

可以看到,首先执行了一条查询语句,查询id为4的员工,之后执行了一条update语句,根据传入的Employee对象更新员工信息。切换到数据库,可以看到id为4的员工信息已经更新。