Mybatis 框架篇章十二

举报
兰舟千帆 发表于 2022/07/21 18:16:32 2022/07/21
【摘要】 Mybatis的参数传递简述简单说明一下参数传递的问题。其实之前的举例也有说明。 多个参数传递就直接说,比如查询的操作。我们可以传递字段值,然后我们就可以锁定一个对象。我们在接口当中写一个方法 Brand select(@Param("id") Integer id,@Param("brandName") String brandName);我们这个叫@Param注释。以后多参传递的话就这...

Mybatis的参数传递简述

简单说明一下参数传递的问题。其实之前的举例也有说明。

多个参数传递

就直接说,比如查询的操作。我们可以传递字段值,然后我们就可以锁定一个对象。

我们在接口当中写一个方法

 Brand select(@Param("id") Integer id,@Param("brandName") String brandName);

我们这个叫@Param注释。以后多参传递的话就这样写,对于代码的阅读性比较好。

()里面的参数要和映射文件中的参数占位符名称一样。这个是要求。
然后像定义的其他的类型可以认为作为对测试代码的传入值的接收。

这样写后,我们看映射文件

 <select id="select" resultMap="brandResultMap">
        select  * from tb_brand
        where id = #{id} and  brand_name = #{brandName};
    </select>

然后我们在测试类中这样写一个静态方法,静态方法就可以直接调用。

 public static void selectMore() throws IOException {
        Integer id = 5;
        String brandName = "波导";
        String resources = "mybatis-config.xml";
        InputStream resourceAsStream = Resources.getResourceAsStream(resources);
        SqlSessionFactory build = new SqlSessionFactoryBuilder().build(resourceAsStream);
        SqlSession sqlSession = build.openSession();
        BrandMapper mapper = sqlSession.getMapper(BrandMapper.class);
        Brand brand = mapper.select(id, brandName);
        System.out.println(brand);
        sqlSession.close();
    }

在这里插入图片描述

单个参数的传递

对于单个参数的传递,我们在之前的例子也有遇到过。之前的根据id来得到数据就是典型的一个单个参数的传递。我们可以传入一个普通的java对象,以及集合等数据结构。

将数据封装到对象,传递。
详见目录多条件查询,就不再多说。

简单的注解实现CRUD

注解当然还是在接口中写上
定义好方法,然后在上面写上注解以及相关的sql语句。

  @Select("select  * from tb_brand where id = #{id}")
   Brand selectByIdBrand(int id);

这样很简单,我们不需要再sql映射文件中写东西了。然后在测试代码中调用方法。

 public  static void selectById() throws IOException {
        Integer  id =5;
        String resources = "mybatis-config.xml";
        InputStream resourceAsStream = Resources.getResourceAsStream(resources);
        SqlSessionFactory build = new SqlSessionFactoryBuilder().build(resourceAsStream);
        SqlSession sqlSession = build.openSession();
        BrandMapper mapper = sqlSession.getMapper(BrandMapper.class);
        Brand brand = mapper.selectByIdBrand(id);
        System.out.println(brand);
        sqlSession.close();
    }

但是注解简单,但是只是对于简单的查询。有很多功能它完成不了。我们这个查询还会存在问题。之前我们提到过,当sql中的字段和和对象类类中属性不一致的时候,会返回空。之前我们做的事要么将字段重命名,要么就用一个标签。我们最终采用的标签类似于这样。

 <resultMap id="brandResultMap" type="brand">
        <!--        不一样的写这里-->
        <!--        id完成主键字段的映射
        -->
        <!--        result 完成一般字段的映射-->
        <result column="brand_name" property="brandName"/>
        <result column="company_name" property="companyName"/>
    </resultMap>

然后我们可以在下面这样写

<select id="selectOnly" resultMap="brandResultMap">-->
    select *-->
    from tb_brand-->
    where id <![CDATA[-->
    < #{id_1};-->
    ]]>-->
</select>-->

但是你使用注解的来代替的话就不是很方便。另外对于大量的sql语句的话,就不适用了。

ok简单介绍这么多。

【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。