mybatis的动态查询:if,where ,choose ,set,foreach,以及模糊查询的四种方法

在这里插入图片描述
动态sql -》if 、where

<!--    动态Sql-->
    <select id="selectSql" parameterType="com.zks.vo.Emp" resultType="com.zks.vo.Emp">
        select <include refid="empColumn"></include> from emp
<where>

and <if test="job!=null">
    job=#{job}
     </if>
and <if test="sal!=null">
    sal>#{sal}
</if>

</where>
 </select>

  /**
     *测试动态代码块,多条件查询
     */
    public void selectSql(){
        //获取数据库链接
        SqlSession sqlSession=MyBatiesUtils.getSqlSession();
        Emp emp=new Emp();
        emp.setJob("SALESMAN");
        emp.setSal(1000.0);
        //获取数据
        List<Emp>  empList=sqlSession.selectList("com.zks.dao.EmpMapper.selectSql",emp);
        empList.stream().forEach(System.out::println);
    }
    
情景:查询员工信息,用工号,和姓名,如果给工号了,就用工号查,如果给姓名了就用姓名查

```css
动态sql->choose when otherwise
<!--    二选一动态查询-->
    <select id="selectChoose" parameterType="com.zks.vo.Emp" resultType="com.zks.vo.Emp">
        select <include refid="empColumn"></include> from emp
<where>
    <choose>
        <when test="empname!=null">
            ename=#{empname}
        </when>
        <when test="empno!=null">
            empno=#{empno}
        </when>
        <otherwise>
            1!=1
        </otherwise>
    </choose>
</where>
    </select>

注意这里的动态sql:它会按照顺序查询,这里就会先按ename 查,再按empno查,只会二选1
/**
* 二选一查询
*/
public void selectChoose(){
//获取数据库链接
SqlSession sqlSession=MyBatiesUtils.getSqlSession();
Emp emp=new Emp();
// emp.setEmpname(“SMITH”);
emp.setEmpno(7499);
Emp result=sqlSession.selectOne(“com.zks.dao.EmpMapper.selectChoose”,emp);
System.out.println(result);
}

动态sql-》set,在需要update时候,不知道具体要set哪一个,这种情况和where 一样

    <update id="updateSql" parameterType="emp">
update emp
<set>
    <if test="empname!=null">
        ,ename=#{empname}
    </if>
    <if test="ename!=null">
        ,ename=#{ename}
    </if>
</set>
where empno=#{empno}
    </update>

foreach的使用
1.foreach做参数,参数是一个list

    <select id="selectForeach" parameterType="list" resultType="com.zks.vo.Emp">
        select * from emp where job in
        <foreach collection="list" item="item" open="(" close=")" separator=",">
            #{item}
        </foreach>
    </select>
    //获取数据库链接
    SqlSession sqlSession=MyBatiesUtils.getSqlSession();
    List<String> list=new ArrayList<>();
    list.add("CLERK");
    list.add("SALESMAN");
    List<Emp>  empList=sqlSession.selectList("com.zks.dao.EmpMapper.selectForeach",list);
    empList.stream().forEach(System.out::println);
    sqlSession.close();

2.foreach做批量插入

<!--    批量插入-->
    <insert id="insertSql" parameterType="list">
<foreach collection="list" item="item" open="begin" separator=";" close=";end;">
    insert into dept values(#{item.deptno},#{item.dname},#{item.loc})
</foreach>
    </insert>

/**
* foreach批量插入第一种方法
*/
public void insertSql(){
Listlist=new ArrayList<>();
for (int i = 50; i < 60; i++) {
Dept dept=new Dept();
dept.setDeptno(i);
dept.setDname(“dname”+i);
dept.setLoc(“loc”+i);
list.add(dept);
}
//获取数据库链接
SqlSession sqlSession= MyBatiesUtils.getSqlSession();
int count=sqlSession.insert(“com.zks.dao.DeptMapper.insertSql”,list);
System.out.println(count);
sqlSession.commit();
sqlSession.close();

}

foreach做批处理的第二种方式是利用伪表查询
在这里插入图片描述

在这里插入图片描述

模糊查询的四种方式

    <!--    模糊查询四种方式方法1,这种情况下,输入的ename需要在前后加上%-->
    <select id="selectLike1" parameterType="String">
        select * from emp where ename like #{ename}
    </select>
    <!--    模糊查询四种方式方法2,这种情况下直接输入查询的条件,用$符号是字符串的链接-->
    <select id="selectLike2" parameterType="String">
        select * from emp where ename like '%${ename}%'
    </select>
    <!--    模糊查询四种方式方法3,这种情况下直接输入查询的条件-->
    <select id="selectLike2" parameterType="String">
        select * from emp where ename like concat('%',#{ename},'%')
    </select>

    <!--    模糊查询四种方式方法3,这种情况下直接输入查询的条件-->
    <select id="selectLike2" parameterType="String">
       <bind name="enameLike" value="'%+#{ename}+%'"/>
        select * from emp where ename like #{enameLike}
    </select>
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值