JAVA Web学习笔记15 mybatis之查看详情 & 条件查询

12 篇文章 0 订阅

查看详情

在这里插入图片描述
1、编写接口方法
BrandMapper接口
在这里插入图片描述这里需要注意的是Brand selectById(int id);这里的id并没有与BrandMapper.xml的select方法里的id相对应,select id="selectById"的含义是这段select对应的是BrandMapper接口里的selectById方法,而这里的#{id}则不同。这也是后面多条件查询需要关注的问题。在这里插入图片描述

2、编写sql映射 BrandMapper.xml在这里插入图片描述参数占位符:
1、# {}:会将其替换为?,为了放在sql注入
2、$ {}:拼入sql,会参在sql注入的问题
传参的时候一定要选择#
表名或列名不固定的情况下才使用$

参数类型:parameterType:可以省略,因为在brandmapper接口里面的抽象方法就已经定义的参数类型了

特殊字符处理:
有时候我们要选择的是id小于或者大于多少的,但是在xml的语法中<是开始、>是结束,所以直接这样使用会报错在这里插入图片描述解决方案:
1、转义字符

在这里插入图片描述2、CDATA区
在这里插入图片描述tip:输入CD自动补齐CDATA区

条件查询

多条件查询

在这里插入图片描述①散装参数:如果方法中有多个参数,需要使用@Param(“SQL参数占位符名称”)
1、编写接口方法

//    多条件查询
//散装参数
    List<Brand> selectByCondition(@Param("status") int status,@Param("companyName") String companyName,@Param("brandName") String brandName);

2、编写BrandMapper.xml
在这里插入图片描述
3、执行test

@Test
    public void testSelectByCondition() throws IOException {
//        接收参数
        int status = 1;
        String companyName = "华为";
        String brandName = "华为";
//        为模糊匹配like处理参数
        companyName = "%" + companyName + "%";
        brandName = "%" + brandName + "%";
        //1、获取sqlSessionFactory
        String resource = "mybatis-config.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

        //2、获取sqlSession对象
        SqlSession sqlSession = sqlSessionFactory.openSession();
        //3、获取Mapper接口的代理对象
        BrandMapper brandMapper = sqlSession.getMapper(BrandMapper.class);
        //4、执行方法
        List<Brand> brands = brandMapper.selectByCondition(status,companyName,brandName);
        System.out.println(brands);

        //释放资源
        sqlSession.close();
    }

②封装对象作为参数
1、BrandMapper接口
在这里插入图片描述
2、BrandMapper.xml不改动
在这里插入图片描述
这里直接将接收到的brand对象的status,company、brandname属性给与对应的参数名上。

3、test修改

@Test
    public void testSelectByCondition() throws IOException {
//        接收参数
        int status = 1;
        String companyName = "华为";
        String brandName = "华为";
//        为模糊匹配like处理参数
        companyName = "%" + companyName + "%";
        brandName = "%" + brandName + "%";

        //封装对象
        Brand brand = new Brand();
        brand.setBrandName(brandName);
        brand.setCompanyName(companyName);
        brand.setStatus(status);

        //1、获取sqlSessionFactory
        String resource = "mybatis-config.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

        //2、获取sqlSession对象
        SqlSession sqlSession = sqlSessionFactory.openSession();
        //3、获取Mapper接口的代理对象
        BrandMapper brandMapper = sqlSession.getMapper(BrandMapper.class);
        //4、执行方法
        List<Brand> brands = brandMapper.selectByCondition(brand);
        System.out.println(brands);

        //释放资源
        sqlSession.close();
    }

将用户传来的参数封装为brand对象,再由brand对象传给sql语句,sql语句进行拆分后分别赋给同属性名的参数。

查询成功:
在这里插入图片描述
③map集合方法
1、brandMapper接口

List<Brand> selectByCondition(Map map);

2、BrandMapper.xml的sql语句不改动

3、test修改
保证map中的键的名称和sql语句中需要的参数名称一一对应。

@Test
    public void testSelectByCondition() throws IOException {
//        接收参数
        int status = 1;
        String companyName = "华为";
        String brandName = "华为";
//        为模糊匹配like处理参数
        companyName = "%" + companyName + "%";
        brandName = "%" + brandName + "%";

        //封装对象
        Map map = new HashMap();
        map.put("status",status);
        map.put("companyName",companyName);
        map.put("brandName",brandName);

        //1、获取sqlSessionFactory
        String resource = "mybatis-config.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

        //2、获取sqlSession对象
        SqlSession sqlSession = sqlSessionFactory.openSession();
        //3、获取Mapper接口的代理对象
        BrandMapper brandMapper = sqlSession.getMapper(BrandMapper.class);
        //4、执行方法
        List<Brand> brands = brandMapper.selectByCondition(map);
        System.out.println(brands);

        //释放资源
        sqlSession.close();
    }

这个方法其实就和封装对象类似,不过这里是封装为了map对象。
总结:
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值