MyBatis的動態SQL操作--插入


需求:向數據庫中插入一條數據

//id,name,sal非空,三個字段都插入 insert into student(id,name,sal) values (?,?,?) //id,name非空,只對id和name插入值 insert into student(id,name) values (?,?) //id,sal非空 insert into student(id,sal) values (?,?)

為null的字段忽略掉.

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<!-- namespace的取值可以是實體的全限定名,這樣有好處! -->
<mapper namespace="com.winner.entity.Student">
    <resultMap id="studentMap" type="student">
        <id property="id" column="id"/>
        <result property="name" column="name"/>
        <result property="sal" column="sal"/>
    </resultMap>
    <!-- sql片段對應字段名,id屬性值任意 -->
    <sql id="key">
        <!-- 去掉最后一個, -->
        <trim suffixOverrides=",">
       //id是類的屬性名
<if test="id!=null">
         //id是表的字段名
id,</if>
       //name是類的屬性名
<if test="name!=null">
         //name是表的字段名
name, </if>
       //sal是類的屬性名
<if test="sal!=null">
         //sal是表的字段名
sal, </if> </trim> </sql> <!-- sql片段對應?,id屬性值任意 --> <sql id="value"> <!-- 去掉最后一個, --> <trim suffixOverrides=","> <if test="id!=null"> #{id},//肯定是調用了get方法得到的值,所以是實體類中的屬性名 </if> <if test="name!=null"> #{name}, </if> <if test="sal!=null"> #{sal}, </if> </trim> </sql> <!-- <include refid="key"/>和<include refid="value"/>表示引用上面定義的sql片段 --> <insert id="dynaInsert" parameterType="Student"> INSERT INTO student(<include refid="key"/>) VALUES(<include refid="value"/>) </insert> </mapper>

 

public class StudentDao { /** * 插入學生 */
    public void dynaInsert(Student student) throws Exception{ SqlSession sqlSession = null; try{ sqlSession = MybatisUtil.getSqlSession(); sqlSession.insert(Student.class.getName() + ".dynaInsert", student); sqlSession.commit(); }catch(Exception e){ e.printStackTrace(); sqlSession.rollback(); throw e; }finally{ MybatisUtil.closeSqlSession(); } } public static void main(String[] args) throws Exception{ StudentDao dao = new StudentDao();  //dao.dynaInsert(new Student(1,"zhangsan1",1000d));//insert into 表名(*,*,*) values(?,?,?)  //dao.dynaInsert(new Student(3,"lisi",null));//insert into 表名(*,*) values(?,?)
        dao.dynaInsert(new Student(5,null,7000D));//insert into 表名(*,*) values(?,?)  //dao.dynaInsert(new Student(4,null,null));//insert into 表名(*) values(?)
 } }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM