zoukankan      html  css  js  c++  java
  • 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(?)
        }
    }
  • 相关阅读:
    【NYOJ】[168]房间安排
    【NYOJ】[168]房间安排
    【POJ】[3253]Fence Repair
    【POJ】[3253]Fence Repair
    【杭电】[2111]Saving HDU
    【杭电】[2111]Saving HDU
    【杭电】[3635]Dragon Balls
    【杭电】[3635]Dragon Balls
    [leetcode]159. Longest Substring with At Most Two Distinct Characters至多包含两种字符的最长子串
    [leetcode]3. Longest Substring Without Repeating Characters无重复字母的最长子串
  • 原文地址:https://www.cnblogs.com/winner-0715/p/5315142.html
Copyright © 2011-2022 走看看