zoukankan      html  css  js  c++  java
  • mybatis 之动态sql 增删改查

    ====================== mybatis的动态SQL ============

    ---------------------------------------------------------------------------------------------------------
    一、什么是动态SQL呢?
    就是where后面的条件不是确定的 根据用户的选择动态产生的sql就是动态sql。

    1.1 动态sql之查询 select

    <select id="selectlike" parameterType="map" resultType="app_dynamicSql.User">
    select * from t_user
    <where>
    <if test="pid!=null">
    and id = #{pid}
    </if>
    <if test="pname!=null">
    userName like #{pname}
    </if>
    </where>
    </select>
    ---------------------------------------------------------------------------------------------------------
    1.2动态sql之更新 update

    update t_user set name = ? password = ?;

    <update id="" parameterType="Map">
    update t_user
    <set>
    <if test="pid!=null">
    id = #{pid},
    </test>
    <if test="pname!=null">
    name = #{name},
    </test>
    </set>
    where id = #{pid}
    </update>
    ---------------------------------------------------------------------------------------------------------
    1.3 动态sql之删除 delete 批量删除

    foreach 属性详解
    collection 表示参数类型 比如是数组或者集合
    open 表示以神符号开始
    close 表示以什么符号结束
    separator 表示分隔符
    item 表示要遍历的名称

    <!-- 动态删除之集合版本 -->
    <delete id="dynaDeleteList">
    delete from t_user where id in
    <foreach collection="list" open="(" close=")" separator="," item="ids" >
    #{ids}
    </foreach>
    </delete>

    <!--动态删除之数组版本-->
    <delete id="dynaDeleteArray">
    delete from t_user where id in
    <foreach collection="参数类型" open="(" close=")" separator="," item="最好是形参名字">
    #{最好是形参的名字}
    </foreach>
    </delete>


    ---------------------------------------------------------------------------------------------------------

    1.4 动态sql之插入 inert
    <sql id="key">
    <trim suffixOverrides=",">
    <if test="id!=null">
    id,
    </if>
    ...
    </trim>
    </sql>
    <sql id="value">
    <trim suffixOverrides=",">
    <if test="id!=null">
    #{id},
    </if>
    ...
    </trim>
    </sql>

    <insert id="dynaInsert" parameterType="参数类型">
    insert into t_user(<include refid="key"></include>) values(<include refid="value"></include>)
    </insert>
    ---------------------------------------------------------------------------------------------------------

    XML配置文件

      1 <?xml version="1.0" encoding="UTF-8" ?>
      2 <!DOCTYPE mapper
      3   PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
      4   "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
      5   
      6   <mapper namespace="dyanmicUser">
      7     
      8     <resultMap type="app_dynamicSql.User" id="dynamic_userMap">
      9         <id property="id" column="id"/>
     10         
     11         <result property="userName" column="userName" />
     12         <result property="password" column="password" />
     13     </resultMap>
     14     
     15     <!-- 动态查询Sql -->
     16     <select id="selectlike" parameterType="map" resultType="app_dynamicSql.User"> 
     17             select * from t_user 
     18             <where>
     19                 <if test="pid!=null">
     20                     and id = #{pid}
     21                 </if>
     22                 <if test="pname!=null">
     23                     userName like #{pname}
     24                 </if>
     25             </where>
     26     </select>
     27     
     28     <!-- 动态sql之更新-->
     29     <update id="dynaUpdate" parameterType="Map">
     30         update t_user
     31             <set>
     32                 <if test="pname!=null">
     33                     userName = #{pname},
     34                 </if>
     35                 <if test="ppassword!=null">
     36                     password = #{ppassword},
     37                 </if>
     38             </set>
     39         where id = #{pid}
     40     </update>
     41 
     42     <!-- 动态删除之数组版本 -->
     43     <delete id="dynaDeleteArray">
     44         delete from t_user where id in
     45             <!-- 用于迭代数组元素的标签
     46                 collection表示类型
     47                 open表示开始的符号
     48                 close表示结束符号
     49                 separator表示元素之间的分隔符
     50                 item表示要迭代的数组 属性值可以随便写但是建议与形参名相同
     51                 #{ids} 表示数组中的元素
     52              -->
     53             <foreach collection="array" open="(" close=")" separator="," item="ids" >
     54                 #{ids}
     55             </foreach>
     56     </delete>
     57 
     58     <!-- 动态删除之集合版本 -->
     59     <delete id="dynaDeleteList">
     60         delete from t_user where id in
     61             <foreach collection="list" open="(" close=")" separator="," item="ids" >
     62                 #{ids}
     63             </foreach>
     64     </delete>
     65     
     66     
     67     
     68     <!-- 动态sql之插入 -->
     69     
     70     <!-- sql片段对应的是字段名称 -->
     71     <sql id="key">
     72         <trim suffixOverrides=",">
     73             <if test="id!=null">
     74                 id,
     75             </if>
     76             <if test="userName!=null">
     77                 userName,
     78             </if>
     79             <if test="password">
     80                 password,
     81             </if>
     82         </trim>
     83     </sql>
     84     <!-- sql片段对应的是值 -->
     85     <sql id="value">
     86     <!-- 去掉最后一个逗号 -->
     87         <trim suffixOverrides=",">
     88             <if test="id!=null">
     89                 #{id},
     90             </if>
     91             <if test="userName!=null">
     92                 #{userName},
     93             </if>
     94             <if test="password">
     95                 #{password},
     96             </if>
     97         </trim>
     98     </sql>
     99     
    100     
    101     <insert id="dynaInsert" parameterType="app_dynamicSql.User">
    102         <!-- 引用上面定义的sql片段 -->
    103         insert into t_user(<include refid="key"></include>) values(<include refid="value"></include>)
    104         
    105     </insert>
    106 
    107   </mapper>
    108   

    UserDao和测试代码实例

      1 package app_dynamicSql;
      2 
      3 import java.util.ArrayList;
      4 import java.util.LinkedHashMap;
      5 import java.util.List;
      6 import java.util.Map;
      7 
      8 import org.apache.ibatis.session.SqlSession;
      9 import org.junit.Test;
     10 
     11 import utils.mybatisUtils;
     12 
     13 public class UserDao {
     14     
     15     /**
     16      * 条件查询所有用户信息
     17      * @param start
     18      * @param size
     19      * @return
     20      * @throws Exception
     21      */
     22     public List<User> findByPage(Integer id,String userName) throws Exception{
     23         
     24         SqlSession sqlSession = null;
     25         List<User> list = new ArrayList<User>();
     26         
     27         try {
     28             
     29             sqlSession = mybatisUtils.getSqlSession();
     30             
     31             Map<String,Object> map = new LinkedHashMap<String,Object>();
     32             map.put("pid", id);
     33             map.put("pname", "%"+userName+"%");
     34             
     35             list = sqlSession.selectList("dyanmicUser.selectlike",map);
     36             
     37         } catch (Exception e) {
     38             e.printStackTrace();
     39         }finally{
     40             //关闭session 断开连接
     41             mybatisUtils.closerSqlSession();
     42         }
     43         return list;
     44     }
     45 
     46     /**
     47      * 条件更新用户信息
     48      * @param userName
     49      * @param password
     50      * @throws Exception
     51      */
     52     public void dynaUpdate(Integer id,String userName,String password) throws Exception{
     53             SqlSession sqlSession = null;
     54             try {
     55                 
     56                 sqlSession = mybatisUtils.getSqlSession();
     57                 
     58                 Map<String,Object> map = new LinkedHashMap<String,Object>();
     59                 map.put("pid", id);
     60                 map.put("pname", userName);
     61                 map.put("ppassword", password);
     62                 
     63                 int count = sqlSession.update("dyanmicUser.dynaUpdate",map);
     64                 
     65                 System.out.println("===========影响"+count+"行========");
     66                 
     67                 //提交事务
     68                 sqlSession.commit();
     69             } catch (Exception e) {
     70                 e.printStackTrace();
     71                 //事务回滚
     72                 sqlSession.rollback();
     73             }finally{
     74                 //关闭session 断开连接
     75                 mybatisUtils.closerSqlSession();
     76             }
     77         }
     78 
     79     
     80 
     81     /**
     82      * 根据ID批量删除  (数组的方式) 
     83      * @param ids
     84      * @throws Exception
     85      */
     86     public void dynaDelete(int... ids) throws Exception{
     87             SqlSession sqlSession = null;
     88             try {
     89                 
     90                 sqlSession = mybatisUtils.getSqlSession();
     91                 
     92                 int count = sqlSession.delete("dyanmicUser.dynaDeleteArray", ids);
     93                 
     94                 System.out.println("===========影响"+count+"行========");
     95                 
     96                 //提交事务
     97                 sqlSession.commit();
     98             } catch (Exception e) {
     99                 e.printStackTrace();
    100                 //事务回滚
    101                 sqlSession.rollback();
    102             }finally{
    103                 //关闭session 断开连接
    104                 mybatisUtils.closerSqlSession();
    105             }
    106         }
    107     
    108     /**
    109      * 根据ID批量删除  (集合的方式) 
    110      * @param ids
    111      * @throws Exception
    112      */
    113     public void dynaDeleteList(List<Integer> ids) throws Exception{
    114             SqlSession sqlSession = null;
    115             try {
    116                 
    117                 sqlSession = mybatisUtils.getSqlSession();
    118                 
    119                 int count = sqlSession.delete("dyanmicUser.dynaDeleteList", ids);
    120                 
    121                 System.out.println("===========影响"+count+"行========");
    122                 
    123                 //提交事务
    124                 sqlSession.commit();
    125             } catch (Exception e) {
    126                 e.printStackTrace();
    127                 //事务回滚
    128                 sqlSession.rollback();
    129             }finally{
    130                 //关闭session 断开连接
    131                 mybatisUtils.closerSqlSession();
    132             }
    133         }
    134     
    135     /**
    136      * 动态sql之插入
    137      * @param user
    138      * @throws Exception
    139      */
    140     public void dynaInsert(User user) throws Exception{
    141         SqlSession sqlSession = null;
    142         try {
    143             
    144             sqlSession = mybatisUtils.getSqlSession();
    145             int count = sqlSession.insert("dyanmicUser.dynaInsert", user);
    146             
    147             System.out.println("===========影响"+count+"行========");
    148             
    149             //提交事务
    150             sqlSession.commit();
    151         } catch (Exception e) {
    152             e.printStackTrace();
    153             //事务回滚
    154             sqlSession.rollback();
    155         }finally{
    156             //关闭session 断开连接
    157             mybatisUtils.closerSqlSession();
    158         }
    159     }
    160     
    161     
    162     
    163     
    164     @Test
    165     public void testFindByPage() throws Exception{
    166         UserDao userDao = new UserDao();
    167         
    168         List<User> list = userDao.findByPage(null,"测试");
    169         System.out.println("条件差询结果:");
    170         for(User user:list){
    171             System.out.println(user);
    172         }
    173         
    174     }
    175     
    176     @Test
    177     public void testDynaUpdate() throws Exception{
    178         UserDao userDao = new UserDao();
    179 //        userDao.dynaUpdate(1,"测试222","ceshi222");
    180         userDao.dynaUpdate(11,null,"222");
    181         
    182     }
    183     
    184     @Test
    185     public void testDynaDelete() throws Exception{
    186         UserDao userdao = new UserDao();
    187         userdao.dynaDelete(1,3,5,7,77);
    188     }
    189     
    190     @Test
    191     public void testDynaDeleteList() throws Exception{
    192         UserDao userdao = new UserDao();
    193         
    194         List<Integer> list = new ArrayList<Integer>();
    195         
    196         list.add(2);
    197         list.add(4);
    198         list.add(6);
    199         
    200         userdao.dynaDeleteList(list);
    201     
    202     }
    203     
    204     @Test
    205     public void testDynaInsert() throws Exception{
    206         UserDao userdao = new UserDao();
    207         userdao.dynaInsert(new User(11,null,null));
    208     }
    209     
    210 }
  • 相关阅读:
    springboot:springboot初识(相关概念、新建项目)
    ssm项目无法加载静态资源
    js:初识(相关概念、js代码的书写位置、注释方式、输入输出语句)
    lucene:索引维护(删除、更新、查询)
    数据库连接池:Durid(执行流程、工具类)
    redis:HyperLogLog&发布订阅(HyperLogLog的概念和命令、redis的发布订阅)
    redis:zset(赋值、取值、删除、修改分数)
    css:css3新特性(过渡)
    css:css3新特性(盒子模型的box-sizing属性、图片模糊处理、calc函数)
    css:css3新特性(属性选择器、结构伪类选择器)
  • 原文地址:https://www.cnblogs.com/panxinqi/p/7634785.html
Copyright © 2011-2022 走看看