分页模糊查询与SQL动态标签

分页模糊查询与SQL动态标签

一、模糊分页查询

1、知识点总结:

1.1、模糊查询和分页查询:在本次的学习中,一共学习了四种模糊查询方法:String类型的通过name查询、JavaBean类型的通过pet类型参数查询(此方法中有两种模糊条件表达式,分别为#{}和${})、Map类型的通过map集查询。

其中,如果是string类型,则#{}中只能是value,如果是JavaBean类型,则#{}中只能是属性名。如果是Map类型,则#{}中只能是key。

在模糊条件表达式中,#{}类似于占位符“?”,KaTeX parse error: Expected 'EOF', got '#' at position 12: {}类似于形式参数,故#̲{}须在引号外面,而{}需在引号里面。

扩展:占位符预编译的2中方式:

①、concat("%",#{pname},"%") ②、concat("%",‘${pname}’,"%")

1.2、模糊分页查询:参数为JavaBean或者Map,limit直接接#{start},#{size},如:select * from pet where pname like “%”#{pname}"%" limit #{start},#{size}

1.3、动态SQL标签:if判断标签,有test属性,代表条件。trim标签,能去掉前缀或者后缀,prefix属性,代表前缀。suffix属性代表后缀。prefixOverride属性表示去掉第一个前缀,suffixOverride表示去掉最后一个后缀。where标签,表示SQL中的判断条件部分,该标签会自动的去掉前后缀,并且在条件都不满足的情况下回把自己干掉,where没有属性。

1.4批量操作:parameterType参数类型同核心配置文件中的别名,collection固定写法为五种,int[]、list、array、set和collection,不推荐map,因为无法循环map集合,key不可以重复。

其中foreach标签标示循环,有collection属性,表示集合或数组的类型,open属性填左括号,separator填每个循环的分隔符,close属性填右括号,items填定义的变量名。

2、代码

2.1、IPetDao接口中的抽象方法

   //模糊查询通过name
    List<Pet> selectLike1(String name);

    //模糊查询通过Pet
    List<Pet> selectLike2(Pet pet);


    //模糊查询通过Map
    List<Pet> selectLike3(Map map);

    //分页查询
    List<Pet> selectPage(Map map);


    //分页模糊查询
    List<Pet> selectLikePage(Map map);

   //动态sql标签之动态新增
    int insertActive(Pet pet);

    //动态修改
    int updateActive(Pet pet);

    //批量查询
    List<Pet> selectBach(List list);

    //批量删除
    List<Pet> deleteBach(int[] ids);

2.2、PetMapper.xml映射文件中的sql代码

 <select id="selectLike1" parameterType="string" resultType="pet">
        select * from pet where pname like "%${pname}%"
    </select>

    <select id="selectLike2" parameterType="pet" resultType="pet">
        select * from pet where pname like "%${pname}%"
    </select>

    <select id="selectLike3" parameterType="map" resultType="pet">
        select * from pet where pname like concat("%",'${pname}',"%")
    </select>

 <!--分页查询-->
    <select id="selectPage" parameterType="map" resultType="pet">
        select * from pet limit #{start},#{size}
    </select>

    <!--分页模糊查询-->
    <select id="selectLikePage" parameterType="map" resultType="pet">
        select * from pet where pname like "%"#{pname}"%" limit #{start},#{size}
    </select>


    <!--动态sql标签之动态新增——if+trim-->
    <insert id="insertActive" parameterType="pet">
        <trim prefix="insert into pet(" suffix=")" suffixOverrides=",">
            <if test="pname!=null">
                pname,
            </if>
            <if test="pbreed!=null">
                pbreed,
            </if>
            <if test="psex!=null">
                psex,
            </if>
            <if test="pbirthday!=null">
                pbirthday,
            </if>
        </trim>
        <trim prefix="values(" suffix=")" suffixOverrides=",">
            <if test="pname!=null">
                pname,
            </if>
            <if test="pbreed!=null">
                pbreed,
            </if>
            <if test="psex!=null">
                psex,
            </if>
            <if test="pbirthday!=null">
                pbirthday,
            </if>
        </trim>
    </insert>

    <!--动态修改-->
    <update id="updateActive" parameterType="pet">
        update pet
        <set>
            <if test="pname!=null">
                pname=#{pname},
            </if>
            <if test="pbreed!=null">
                pbreed=#{pbreed},
            </if>
            <if test="psex!=null">
                psex=#{psex},
            </if>
            <if test="pbirthday!=null">
                pbirthday=#{pbirthday},
            </if>
        </set>
        where pid=#{pid}
    </update>

    <!--批量查询-->
    <select id="selectBach" parameterType="list" resultType="pet">
        select * from pet
        <where>
            pid in
            <foreach collection="list" open="(" close=")" item="i" separator=",">
                #{i}
            </foreach>
        </where>
    </select>


    <!--//批量删除-->
    <select id="deleteBach" parameterType="int[]" resultType="pet">
        delete from pet
        <where>
            pid in
            <foreach collection="array" open="(" close=")" item="i" separator=",">
                #{i}
            </foreach>
        </where>
    </select>

2.3、测试类

 private SqlSession sqlSession;
    @Before
    public void init(){
        try {

            //读取核心配置文件
            InputStream is = Resources.getResourceAsStream("sqlMapConfig.xml");
            //找一个建筑者盖工厂
            SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
            //构建工厂
            SqlSessionFactory factory = builder.build(is);
            //工厂生产SQLSession对象
            sqlSession = factory.openSession();
            //SQLSession对象代理增删改查

        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    //模糊查询:通过name查询
    @Test
    public void selectLike1(){
        List<Pet> pet = sqlSession.getMapper(IPetDao.class).selectLike1("胖");
        System.out.println(pet);
    }
    //模糊查询:通过name查询
    @Test
    public void selectLike2(){
        Pet pet = new Pet();
        pet.setPname("阿");
        List<Pet> pets = sqlSession.getMapper(IPetDao.class).selectLike2(pet);
        System.out.println(pets);
    }
    //模糊查询:通过Map查询
    @Test
    public void selectLike3(){
        HashMap map = new HashMap();
        map.put("pname","胖花");
        List<Pet> pets = sqlSession.getMapper(IPetDao.class).selectLike3(map);
        System.out.println(pets);
    }
    //分页查询
    @Test
    public void selectPage(){
        HashMap map = new HashMap();
        map.put("start",0);
        map.put("size",3);
        List<Pet> pets = sqlSession.getMapper(IPetDao.class).selectPage(map);
        System.out.println(pets);
    }
    //分页模糊查询
    @Test
    public void selectLikePage(){
        HashMap map = new HashMap();
        map.put("pname","胖");
        map.put("start",0);
        map.put("size",2);
        List<Pet> pets = sqlSession.getMapper(IPetDao.class).selectLikePage(map);
        System.out.println(pets);

    }
    //动态sql标签
    @Test
    public void insertActive(){
        Pet pet = new Pet();
        pet.setPname("肥花花");
        pet.setPsex(1);
        pet.setPbreed(1);
        pet.setPbirthday(new Date());
        int i = sqlSession.getMapper(IPetDao.class).insertActive(pet);
        System.out.println(i);
    }
    //动态修改
    @Test
    public void updateActive(){
        Pet pet = new Pet();
        pet.setPid(2);
        pet.setPname("肿花花");
        pet.setPbreed(1);
        pet.setPbirthday(new Date());
        int i = sqlSession.getMapper(IPetDao.class).updateActive(pet);
        System.out.println(i);
    }
    //批量查询
    @Test
    public void selectBach(){
        ArrayList list = new ArrayList();
        list.add(1);
        list.add(2);
        list.add(3);
        list.add(4);
        List<Pet> pets = sqlSession.getMapper(IPetDao.class).selectBach(list);
        System.out.println(pets);
    }
    //批量删除
    @Test
    public void deleteBatch(){
        int[] array={1,3,5};
        List<Pet> pets = sqlSession.getMapper(IPetDao.class).deleteBach(array);
        System.out.println(pets);
    }
@After
    public void destroy(){
        try{
            sqlSession.commit();//提交
        }catch (Exception e){
            sqlSession.rollback();//回滚
        }finally {
            sqlSession.close();//关闭
        }
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值