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

一、模糊查询

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;

/**
 * 可以存多个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();
    }

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

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值