Mybatis的参数传递简述

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

多个参数传递

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

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

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

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

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

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

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

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

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

参数传递和注解开发 - 图1

单个参数的传递

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

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

简单的注解实现CRUD

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

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

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

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

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

  1. <resultMap id="brandResultMap" type="brand">
  2. <!-- 不一样的写这里-->
  3. <!-- id完成主键字段的映射
  4. -->
  5. <!-- result 完成一般字段的映射-->
  6. <result column="brand_name" property="brandName"/>
  7. <result column="company_name" property="companyName"/>
  8. </resultMap>

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

  1. <select id="selectOnly" resultMap="brandResultMap">-->
  2. select *-->
  3. from tb_brand-->
  4. where id <![CDATA[-->
  5. < #{id_1};-->
  6. ]]>-->
  7. </select>-->

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

ok简单介绍这么多。