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(?)
        }
    }
  • 相关阅读:
    AFHTTPRequestOperationManager网络请求的时候添加一个菊花,requestmapping
    媒体层图形技术之Core Animation 学习笔记
    PHP自动判断字符集并转码
    用PHP实现游戏中的一些常见功能
    从几个简单的程序看PHP的垃圾回收机制
    递归遍历PHP多维数组
    CodeIgniter的缓存机制与使用方法
    PHP的内存泄露问题与垃圾回收
    记录一下PHP数组数据分页的方法
    PHP正则表达式移除超链接文本
  • 原文地址:https://www.cnblogs.com/winner-0715/p/5315142.html
Copyright © 2011-2022 走看看