mybatis复习2-特殊场景CRUD(模糊查询,保存自增值,封装多个pojo查询)

   日期:2020-09-27     浏览:90    评论:0    
核心提示:一、模糊查询mybatis模糊查询拼接正则字符有两种方式:1、手动拼接:直接在代码中拼接‘%’,优点是如此操作,系统将会sql预处理。2、利用like '%${value}%',系统自动拼接两端'%',优点是更方便,缺点是不进行sql预处理(1)、手动拼接mapper映射文件:<select id="findByName" resultType="com.shuai.pojo.Bookborrow" parameterType="string"> select *

一、模糊查询

mybatis模糊查询拼接正则字符有两种方式:
1、手动拼接:直接在代码中拼接‘%’,优点是如此操作,系统将会sql预处理。
2、利用like '%${value}%',系统自动拼接两端'%',优点是更方便,缺点是不进行sql预处理

(1)、手动拼接
mapper映射文件:

<select id="findByName" resultType="com.shuai.pojo.Bookborrow" parameterType="string">
        select * from bookborrow where stuName like #{name} 
        <!--进行预处理,但自己进行%拼接-->
  
</select>

测试类:

  @Test
    public void testByName() throws IOException { 
        //4得到DAO接口的代理对象
        init();
        mapper = sqlSession.getMapper(IBookborrow.class);//代理模式
        System.out.println(mapper.findByName("%shuai%"));
        sqlSession.commit();
        //5、释放资源
        destory();
    }

(2)mybatis自动拼接%
映射文件:

<select id="findByName" resultType="com.shuai.pojo.Bookborrow" parameterType="string">
        select * from bookborrow where stuName like '%${value}%' <!--不需要自己拼% , 但未使用预处理,而是直接拼接字符串-->
</select>

测试类:

  @Test
    public void testByName() throws IOException { 
        //4得到DAO接口的代理对象
        init();
        mapper = sqlSession.getMapper(IBookborrow.class);//代理模式
        System.out.println(mapper.findByName("shuai"));
        sqlSession.commit();
        //5、释放资源
        destory();
    }

二、新插入的数据保存到插入时的pojo类

如id自增,想获得刚刚插入的新数据的id。
利用selectKey标签实现

映射文件:

<!-- 新插入的数据保存到插入时的pojo类-->
    <insert id="saveUser" parameterType="com.shuai.pojo.Bookborrow">
        <selectKey keyProperty="id" keyColumn="id" resultType="int" order="AFTER">
    select last_insert_id();
        </selectKey>
        insert into user(name, pwd, permission) values (#{name},#{pwd},#{permission})
    </insert>

测试类:

   @Test
    public void testgetIdinsert() throws IOException { 
        //4得到DAO接口的代理对象
        init();
        mapper = sqlSession.getMapper(IBookborrow.class);//代理模式
        User u1 = new User("1","2","1");
        mapper.saveUser(u1);
        sqlSession.commit();
        System.out.println(u1);//可以保存u1自增的id
        //5、释放资源
        destory();
    }

三、封装pojo(多pojo类查询)

多个pojo类当作条件查询时,利用VO类封装多个pojo类,结合OGNL(object graphid navigation language,对象图导航语言)表达式

VO封装类:

package com.shuai.pojo;


public class QueryVo { 
    User user;//此例只封装一个pojo
    类作为演示,实际情况可封装多个pojo类

    public User getUser() { 
        return user;
    }

    public void setUser(User user) { 
        this.user = user;
    }
}

映射文件:

<!-- 参数深入:将多个pojo类封装到VO类,组成一个查询条件 -->
    <select id="getByVo" resultType="com.shuai.pojo.User" parameterType="com.shuai.pojo.QueryVo">
        select * from mybatis.user where name like #{user.name}
        <!--OGNL表达式:这里user.name,为VO封装类中的pojo类.属性-->
    </select>
//参数深入:pojo包装
    @Test
    public void testgetVO() throws IOException { 
        //4得到DAO接口的代理对象
        init();
        mapper = sqlSession.getMapper(IBookborrow.class);//代理模式
        QueryVo vo = new QueryVo();
        User u1 = new User();
        u1.setName("%ge%");
        vo.setUser(u1);
        List<User> byVo = mapper.getByVo(vo);
        for(User u : byVo){ 
            System.out.println(u);
        }
        sqlSession.commit();
        System.out.println(u1);//可以保存u1自增的id
        //5、释放资源
        destory();
    }

(如果帮到了你,请点个赞~)

 
打赏
 本文转载自:网络 
所有权利归属于原作者,如文章来源标示错误或侵犯了您的权利请联系微信13520258486
更多>最近资讯中心
更多>最新资讯中心
0相关评论

推荐图文
推荐资讯中心
点击排行
最新信息
新手指南
采购商服务
供应商服务
交易安全
关注我们
手机网站:
新浪微博:
微信关注:

13520258486

周一至周五 9:00-18:00
(其他时间联系在线客服)

24小时在线客服