mybatis动态sql——if标签和设置映射方式处理插入null值

当遇到插入null值造成mybatis无法识别的情况时,我们可以通过设置映射的数据类型来处理,或者使用动态sql标签这两种方式来处理这种问题

1、通过设置映射的数据类型来处理:在#{}格式种加入数据类型声明,这样明确告诉mybatis遇到null时该如何处理

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "mybatis-3-mapper.dtd" >
<mapper namespace="mybatis.student">
	<insert id="insertStu" parameterType="com.orm.Student">
		insert into
		t_student(id,name,password,school,major)
		values(#{id,jdbcType=INTEGER},#{name,jdbcType=VARCHAR},#{password,jdbcType=VARCHAR},#{school,jdbcType=VARCHAR},#{major,jdbcType=VARCHAR})
		<selectKey keyProperty="id" order="AFTER" resultType="java.lang.Integer">
			select last_insert_id() as id
		</selectKey>
	</insert>
</mapper>	
package com.controller;

import java.io.IOException;

import org.apache.ibatis.session.SqlSession;

import com.dbtools.GetSqlSession;
import com.orm.Student;

public class Insert {

	public static void main(String[] args) throws IOException {
		Student stu = new Student();
		stu.setName("鬼鲛");
		stu.setPassword(null);
		stu.setSchool("晓");
		stu.setMajor("影");
		
		SqlSession sqlSession = GetSqlSession.getSqlSession();
		sqlSession.insert("insertStu", stu);
		sqlSession.commit();
		sqlSession.close();
	}
}

2、动态标签处理方式——if标签

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "mybatis-3-mapper.dtd" >
<mapper namespace="mybatis.student">
    <insert id="insertStuIf" parameterType="com.orm.Student">
		<if test="password != null">
			insert into
			t_student(id,name,password,school,major)
			values(#{id},#{name},#{password},#{school},#{major})
		</if>
		<if test="password == null">
			insert into 
			t_student(id,name,school,major)
			values(#{id},#{name},#{school},#{major})
		</if>
		<selectKey keyProperty="id" order="AFTER" resultType="java.lang.Integer">
			select last_insert_id() as id
		</selectKey>
	</insert>
</mapper>
package com.controller;

import java.io.IOException;

import org.apache.ibatis.session.SqlSession;

import com.dbtools.GetSqlSession;
import com.orm.Student;

public class InsertIf {

	public static void main(String[] args) throws IOException {
		Student stu = new Student();
		stu.setName("小李");
		stu.setPassword(null);
		stu.setSchool("木叶");
		stu.setMajor("中忍");
		
		Student stuif = new Student();
		stuif.setName("宁次");
		stuif.setPassword("123");
		stuif.setSchool("木叶");
		stuif.setMajor("上忍");
		
		SqlSession sqlSession = GetSqlSession.getSqlSession();
		sqlSession.insert("insertStuIf", stu);
		sqlSession.insert("insertStuIf", stuif);
		sqlSession.commit();
		sqlSession.close();
	}
}

猜你喜欢

转载自blog.csdn.net/Milan__Kundera/article/details/81843006