mybaits 动态SQL语句

本文详细介绍了使用动态SQL进行数据库操作的方法,包括查询、更新、删除和插入数据。通过配置参数,动态SQL允许在不修改代码的情况下实现对数据库的灵活操作。

-------------------------动态查询---------------------------------------
<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();
  }
 }

转载于:https://my.oschina.net/chenliyong/blog/673603

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值