mybaits 动态SQL语句

纵饮孤独 提交于 2019-12-01 12:29:52

-------------------------动态查询---------------------------------------
<select id="findAll" parameterType="map" resultMap="studentMap">
  select * from students
  <where>
   <if test="pid!=null">
    and students_id = #{pid}
   </if>
   <if test="pname!=null">
    and students_name = #{pname}
   </if>
   <if test="psal!=null">
    and students_sal = #{psal}
   </if>
  </where>
 </select>

 

public List<Student> findAll(Integer id,String name,Double sal) throws Exception{
  SqlSession sqlSession = null;
  try{
   sqlSession = MybatisUtil.getSqlSession();
    
   Map<String,Object> map = new LinkedHashMap<String,Object>();
   map.put("pid",id);
   map.put("pname",name);
   map.put("psal",sal);
   
   return sqlSession.selectList("studentNamespace.findAll",map);
  }catch(Exception e){
   e.printStackTrace();
   throw e;
  }finally{
   MybatisUtil.closeSqlSession();
  }
 }
-----------------------------------动态更新-----------------------------------------
<update id="dynaUpdate" parameterType="map">
  update students
  <set>
   <if test="pname!=null">
    students_name = #{pname},
   </if>
   <if test="psal!=null">
    students_sal = #{psal},   
   </if>
  </set>
  where students_id = #{pid}
 </update>

 

public void dynaUpdate(Integer id,String name,Double sal) throws Exception{
  SqlSession sqlSession = null;
  try{
   sqlSession = MybatisUtil.getSqlSession();
    
   Map<String,Object> map = new HashMap<String, Object>();
   map.put("pid",id);
   map.put("pname",name);
   map.put("psal",sal);
   sqlSession.update("studentNamespace.dynaUpdate",map);
   sqlSession.commit();
  }catch(Exception e){
   e.printStackTrace();
   sqlSession.rollback();
   throw e;
  }finally{
   MybatisUtil.closeSqlSession();
  }
 }
-----------------------------------动态删除----------------------------------------------
<delete id="dynaDeleteArray">
  delete from students where students_id in
  <!-- foreach用于迭代数组元素
    open表示开始符号
    close表示结束符合
    separator表示元素间的分隔符
    item表示迭代的数组,属性值可以任意,但提倡与方法的数组名相同
    #{ids}表示数组中的每个元素值
   -->
  <foreach collection="array" open="(" close=")" separator="," item="ids">
   #{ids}
  </foreach>
 </delete>

 


/**
  * 根据ID批量删除学生(数组版本)
  */
 public void dynaDeleteArray(int... ids) throws Exception{
  SqlSession sqlSession = null;
  try{
   sqlSession = MybatisUtil.getSqlSession();
   sqlSession.delete("studentNamespace.dynaDeleteArray",ids);
   sqlSession.commit();
  }catch(Exception e){
   e.printStackTrace();
   sqlSession.rollback();
   throw e;
  }finally{
   MybatisUtil.closeSqlSession();
  }
 }
 /**
  * 根据ID批量删除学生(集合版本)
  */
 public void dynaDeleteList(List<Integer> ids) throws Exception{
  SqlSession sqlSession = null;
  try{
   sqlSession = MybatisUtil.getSqlSession();
   sqlSession.delete("studentNamespace.dynaDeleteList",ids);
   sqlSession.commit();
  }catch(Exception e){
   e.printStackTrace();
   sqlSession.rollback();
   throw e;
  }finally{
   MybatisUtil.closeSqlSession();
  }
 }
------------------------------------动态插入----------------------------------------------
<!-- sql片段对应字段名,id属性值任意 -->
 <sql id="key">
  <!-- 去掉最后一个, -->
  <trim suffixOverrides=",">
   <if test="id!=null">
    students_id,
   </if>
   <if test="name!=null">
    students_name,
   </if>
   <if test="sal!=null">
    students_sal,
   </if>
  </trim>
 </sql> 
 
 <!-- sql片段对应?,id属性值任意 -->
 <sql id="value">
  <!-- 去掉最后一个, -->
  <trim suffixOverrides=",">
   <if test="id!=null">
    #{id},
   </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="cn.itcast.javaee.mybatis.app14.Student">
  insert into students(<include refid="key"/>) values(<include refid="value"/>)
 </insert>

 

public void dynaInsert(Student student) throws Exception{
  SqlSession sqlSession = null;
  try{
   sqlSession = MybatisUtil.getSqlSession();
   sqlSession.insert("studentNamespace.dynaInsert",student);
   sqlSession.commit();
  }catch(Exception e){
   e.printStackTrace();
   sqlSession.rollback();
   throw e;
  }finally{
   MybatisUtil.closeSqlSession();
  }
 }

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!