mybatis 动态SQL的使用

一、if的使用

持久层Dao接口

public interface IUserDao {
    /**
     * 根据条件查找
     * @param user
     * @return
     */
    List<User> findUserByCondition(User user);
}

持久层映射配置
当为多条件的时候 可以使用and
如: < if test="username != null and username != ‘老王’ ">
双引号“ 内使用单引号‘

<?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">
<mapper namespace="com.ect.dao.IUserDao">
    <select id="findUserByCondition" parameterType="com.ect.domain.User" resultType="com.ect.domain.User">
        SELECT * FROM user WHERE 1=1
        <if test="username != null">
            and username=#{username}
        </if>
    </select>
</mapper>

测试:

   @Test
    public void testFindUserByCondition(){
        User user = new User();
        user.setUsername("老王");
        List<User> userByCondition = this.userDao.findUserByCondition(user);
        for (User user1 : userByCondition) {
            System.out.println(user1);
        }
    }

二、where的使用

使用< where>< /where>标签后,就可以不使用 where 1=1了。

<?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">
<mapper namespace="com.ect.dao.IUserDao">
    <select id="findUserByCondition" parameterType="com.ect.domain.User" resultType="com.ect.domain.User">
        SELECT * FROM user
        <where>
            <if test="username != null">
                and username=#{username}
            </if>
            <if test="sex != null">
                and sex=#{sex}
            </if>
        </where>
    </select>
</mapper>

三、foreach的使用

QueryVo.java

public class QueryVo {
    private List<Integer> ids;

    public List<Integer> getIds() {
        return ids;
    }

    public void setIds(List<Integer> ids) {
        this.ids = ids;
    }
}

IUserDao.java

public interface IUserDao {
    /**
     * 根据Id查询
     * @param vo
     * @return
     */
    List<User> findUserByIds(QueryVo vo);
}

持久层Dao配置

    <select id="findUserByIds" resultType="com.ect.domain.User" parameterType="com.ect.domain.QueryVo">
        SELECT * FROM user
        <where>
            <if test="ids !=null and ids.size() > 0">
                <foreach collection="ids" open="id in (" close=")" item="id" separator=",">
                    #{id}
                </foreach>
            </if>
        </where>
    </select>

测试:

    @Test
    public void testFindUserByIds(){
        QueryVo vo = new QueryVo();
        List<Integer> ids = new ArrayList<Integer>();
        ids.add(61);
        ids.add(62);
        ids.add(63);
        vo.setIds(ids);

        List<User> userByIds = this.userDao.findUserByIds(vo);
        for (User user : userByIds) {
            System.out.println(user);

        }
    }

四、sql标签(了解就行)

主要是用于处理重复的sql语句
< sql>编写

  <sql id="defaultSql">
        SELECT * FROM user
    </sql>

< include>引入

  <include refid="defaultSql"></include>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值