文章插图
查询的条件只发送了
where 1=1 and sex=? 姓名和性别同一时间存在的查询 。发送的语句和结果
文章插图
查询条件
where 1=1 and name like concat('%', ?, '%') and sex=? 2.2 在 UPDATE 更新列中使用 if 标签
有些时候我们不渴望更新任何的字段 。只更新有变化的字段 。
2.2.1 更新条件
只更新有变化的字段 。空值不更新 。
2.2.1 动态 SQL
接口途径
/** * 更新非空属性 */ int updateByPrimaryKeySelective(Student record);对应的 SQL
update id="updateByPrimaryKeySelective" parameterType="com.homejim.mybatis.entity.Student" update student set if test="name != null" `name` = #{name,jdbcType=VARCHAR}, /if if test="phone != null" phone = #{phone,jdbcType=VARCHAR}, /if if test="email != null" email = #{email,jdbcType=VARCHAR}, /if if test="sex != null" sex = #{sex,jdbcType=TINYINT}, /if if test="locked != null" locked = #{locked,jdbcType=TINYINT}, /if if test="gmtCreated != null" gmt_created = #{gmtCreated,jdbcType=TIMESTAMP}, /if if test="gmtModified != null" gmt_modified = #{gmtModified,jdbcType=TIMESTAMP}, /if /set where student_id = #{studentId,jdbcType=INTEGER}2.2.3 测试
@Test public void updateByStudentSelective() { SqlSession sqlSession = null; sqlSession = sqlSessionFactory.openSession(); StudentMapper studentMapper = sqlSession.getMapper(StudentMapper.class); Student student = new Student(); student.setStudentId(1); student.setName("明明"); student.setPhone("13838438888"); System.out.println(studentMapper.updateByPrimaryKeySelective(student)); sqlSession.commit(); sqlSession.close(); }结果如下
文章插图
2.3 在 INSERT 动态插入中使用 if 标签
我们插入资料库中的一条记录 。不是每一个字段都有值的 。而是动态变化的 。在这时候使用 if 标签 。可帮我们解决这种问题 。
2.3.1 插入条件
只有非空属性才插入 。
2.3.2 动态SQL
接口途径
/** * 非空字段才进行插入 */ int insertSelective(Student record);对应的SQL
insert id="insertSelective" parameterType="com.homejim.mybatis.entity.Student" insert into student trim prefix="(" suffix=")" suffixOverrides="," if test="studentId != null" student_id, /if if test="name != null" `name`, /if if test="phone != null" phone, /if if test="email != null" email, /if if test="sex != null" sex, /if if test="locked != null" locked, /if if test="gmtCreated != null" gmt_created, /if if test="gmtModified != null" gmt_modified, /if /trim trim prefix="values (" suffix=")" suffixOverrides="," if test="studentId != null" #{studentId,jdbcType=INTEGER}, /if if test="name != null" #{name,jdbcType=VARCHAR}, /if if test="phone != null" #{phone,jdbcType=VARCHAR}, /if if test="email != null" #{email,jdbcType=VARCHAR}, /if if test="sex != null" #{sex,jdbcType=TINYINT}, /if if test="locked != null" #{locked,jdbcType=TINYINT}, /if if test="gmtCreated != null" #{gmtCreated,jdbcType=TIMESTAMP}, /if if test="gmtModified != null" #{gmtModified,jdbcType=TIMESTAMP}, /if /trim /insert这种 SQL 各位大概很熟悉 。毕竟是全自动生成的 。
2.3.3 测试
@Test public void insertByStudentSelective() { SqlSession sqlSession = null; sqlSession = sqlSessionFactory.openSession(); StudentMapper studentMapper = sqlSession.getMapper(StudentMapper.class); Student student = new Student(); student.setName("小飞机"); student.setPhone("13838438899"); student.setEmail("xiaofeiji@qq.com"); student.setLocked((byte) 0); System.out.println(studentMapper.insertSelective(student)); sqlSession.commit(); sqlSession.close(); }对应的结果
文章插图
SQL 中 。只有非空的字段才进行了插入 。
3 choose 标签
choose when otherwise 标签可以帮我们实现 if else 的逻辑 。一个 choose 标签至少有一个 when, 最多一个otherwise 。
下面是一个查询的举例 。
3.1 查询条件
假设 name 有着唯一性 。查询一个学生
当 studen_id 有值时 。使用 studen_id 进行查询;当 studen_id 没有值时 。使用 name 进行查询;不然返回空3.2 动态SQL
接口途径
/** * - 当 studen_id 有值时 。使用 studen_id 进行查询; * - 当 studen_id 没有值时 。使用 name 进行查询; * - 不然返回空 */ Student selectByIdOrName(Student record);对应的SQL
推荐阅读
- \"不在其位,不谋其政\",你对这句成语的理解是怎样的?
- 山东最知名的白酒有哪些?
- 为什么有人说关羽喜欢看《春秋》?
- 河南有哪些名酒?最好喝的是哪个牌子的?
- 清蒸多宝鱼的做法 不加一滴水做法简单
- 《世说新语》中学生应该怎样读,怎样做笔记才能积累解词,提高课外文言文的阅读能力?
- 河南的四大名酒是怎么没落的?
- 宝宝起痱子用什么方法最有效 婴儿去痱子止痒最有效的方法
- 《左传》与《战国策》是史书还是兵法?