MyBatis映射器(一)--多参数传递方式

参考自:https://www.cnblogs.com/hellowhy/p/9678245.html

在mybatis映射器的接口中,一般在查询时需要传递一些参数作为查询条件,有时候是一个,有时候是多个。当只有一个参数时,我们只要在sql中使用接口中的参数名称即可,但是如果是多个呢,就不能直接用参数名称了,mybatis中有以下四种

第一种:使用map传递

1??定义接口

1 // 使用map传递多个参数进行查询
2    public List<Product> getByMap(Map<String, Object> paramMap);

2??sql语句

1 <!--第一种:通过map传递 -->
2     <select id="getByMap" resultType="product" parameterType="map">
3         SELECT * FROM product
4         WHERE product_name LIKE concat(‘%‘,#{name},‘%‘) AND
5         CAST(product_price AS INT) > #{price}
6     </select>

需要注意的有:

1、parameterType参数类型为map(此处使用别名)

2、参数名称是map中的key

3??查询

 1 /**
 2      * 通过map传递多个参数
 3      *
 4      * @return
 5      */
 6     public void getProductsByMap() {
 7         System.out.println("使用map方式传递多个参数");
 8         List<Product> products = new ArrayList<>();
 9         Map<String, Object> paramMap = new HashMap<>();
10         paramMap.put("name", "恤");
11         paramMap.put("price", 200);
12         sqlSession = MybatisTool.getSqlSession();
13         productMapper = sqlSession.getMapper(ProductMapper.class);
14         products = productMapper.getByMap(paramMap);
15         printResult(products);
16     }

4??查看结果

1 使用map方式传递多个参数
2 T恤2的价格是230元
3 T恤3的价格是270元
4 T恤4的价格是270元

这种方式的缺点是:

1、map是一个键值对应的集合,使用者只有阅读了它的键才能知道其作用;

2、使用map不能限定其传递的数据类型,可读性差

所以一般不推荐使用这种方式。

第二种:使用注解传递

1??创建接口

1 // 使用注解传递多个参数进行查询
2     public List<Product> getByAnnotation(@Param("name") String name, @Param("price") int price);

2??定义sql

1 <!--第二种:通过注解传递 -->
2     <select id="getByAnnotation" resultType="product">
3         SELECT * FROM product
4         WHERE product_name LIKE concat(‘%‘,#{name},‘%‘) AND CAST(product_price
5         AS INT) >
6         #{price}
7     </select>

这种方式不需要设置参数类型 ,参数名称为注解定义的名称

3??查询

 1 /**
 2      * 通过注解传递多个参数
 3      */
 4     public void getProductByAnnotation() {
 5         System.out.println("使用注解方式传递多个参数");
 6         List<Product> products = new ArrayList<>();
 7         sqlSession = MybatisTool.getSqlSession();
 8         productMapper = sqlSession.getMapper(ProductMapper.class);
 9         products = productMapper.getByAnnotation("恤", 200);
10         printResult(products);
11     }

4??查看结果

1 使用注解方式传递多个参数
2 T恤2的价格是230元
3 T恤3的价格是270元
4 T恤4的价格是270元

这种方式能够大大提高可读性,但是只适合参数较少的情况,一般是少于5个用此方法,5个以上九要用其他方式了。

第三种:使用javabean传递

此中方式需要将传递的参数封装成一个javabean,然后将此javabean当作参数传递即可,为了方便,我这里只有两个参数封装javabean。

1??参数封装成javabean

 1 /**
 2  * 定义一个Javabean用来传递参数
 3  */
 4 public class ParamBean {
 5     public String name;
 6     public int price;
 7
 8     public ParamBean(String name, int price) {
 9         this.name = name;
10         this.price = price;
11     }
12
13     public String getName() {
14         return name;
15     }
16
17     public void setName(String name) {
18         this.name = name;
19     }
20
21     public int getPrice() {
22         return price;
23     }
24
25     public void setPrice(int price) {
26         this.price = price;
27     }
28 }

2??创建接口

1 // 使用JavaBean传递多个参数进行查询
2     public List<Product> getByJavabean(ParamBean paramBean); 

3??定义sql

1 <!--第三种:通过javabean传递 -->
2     <select id="getByJavabean" resultType="product" parameterType="paramBean">
3         SELECT * FROM product
4         WHERE product_name LIKE concat(‘%‘,#{name},‘%‘)
5         AND CAST(product_price AS INT) > #{price}
6     </select>

需要注意的是:

1、参数类型parameterType为前面定义的javabean的全限定名或别名;

2、sql中的参数名称是javabean中定义的属性;

4??查询

 1 /**
 2      * 通过javabean传递多个参数
 3      */
 4     public void getProductByJavabean() {
 5         System.out.println("使用javabean方式传递多个参数");
 6         List<Product> products = new ArrayList<>();
 7         sqlSession = MybatisTool.getSqlSession();
 8         productMapper = sqlSession.getMapper(ProductMapper.class);
 9         ParamBean paramBean = new ParamBean("恤", 200);
10         products = productMapper.getByJavabean(paramBean);
11         printResult(products);
12     }

5??查看结果

1 使用javabean方式传递多个参数
2 T恤2的价格是230元
3 T恤3的价格是270元
4 T恤4的价格是270元 

这种方式在参数多于5个的情况下比较实用。

第四种:使用混合方式传递

假设我要进行分页查询,那么我可以将分页参数单独封装成一个javabean进行传递,其他参数封装成上面的javabean,然后用注解传递这两个javabean,并在sql中获取。

1??封装分页参数javabean

 1 /*
 2  * 定义一个分页的javabean
 3  */
 4 public class PageParamBean {
 5     public int start;
 6     public int limit;
 7
 8     public PageParamBean(int start, int limit) {
 9         super();
10         this.start = start;
11         this.limit = limit;
12     }
13
14     public int getStart() {
15         return start;
16     }
17
18     public void setStart(int start) {
19         this.start = start;
20     }
21
22     public int getLimit() {
23         return limit;
24     }
25
26     public void setLimit(int limit) {
27         this.limit = limit;
28     }
29
30 }

2??创建接口

1 // 使用混合方式传递多个参数进行查询
2 public List<Product> getByMix(@Param("param") ParamBean paramBean, @Param("page") PageParamBean pageBean);

可以看出此处使用javabean+注解的方式传递参数

3??定义sql

1 <!--第四种:混合方式传递 -->
2     <select id="getByMix" resultType="product">
3         SELECT * FROM product WHERE
4         product_name LIKE concat(‘%‘,#{param.name},‘%‘) AND CAST(product_price
5         AS INT) >
6         #{param.price} LIMIT #{page.limit} OFFSET #{page.start}
7     </select>

只要是注解方式,就不需要定义参数类型。

4??查询

 1 /**
 2      * 通过混合方式传递多个参数
 3      */
 4     public void getProductByMix() {
 5         System.out.println("使用混合方式传递多个参数");
 6         List<Product> products = new ArrayList<>();
 7         sqlSession = MybatisTool.getSqlSession();
 8         productMapper = sqlSession.getMapper(ProductMapper.class);
 9         ParamBean paramBean = new ParamBean("恤", 200);
10         PageParamBean pageBean = new PageParamBean(0, 5);
11         products = productMapper.getByMix(paramBean, pageBean);
12         printResult(products);

5??查看结果

1 使用混合方式传递多个参数
2 T恤2的价格是230元
3 T恤3的价格是270元
4 T恤4的价格是270元

以上就是四种方式传递多个参数的实例。

原文地址:https://www.cnblogs.com/zhf123/p/12150664.html

时间: 2024-08-28 16:09:49

MyBatis映射器(一)--多参数传递方式的相关文章

MyBatis映射器总结

Mybatis映射器xml配置包含如下标签: select 查询语句,自定义参数返回结果集 insert 插入语句 update 更新语句 delete 删除语句 parameterMap 定义参数映射关系,不建议使用 sql 定义一段SQL,可以再其他部分引用 resultMap 结果集,提供映射规则 cache 给定命名空间的缓存配置 cache-ref 其他命名空间缓存配置的引用 1.select 1.1 select标签包含如下属性: 属性 说明 备注 id 它和Mybatis的命名空间

Mybatis映射器select

Mybatis映射器select 简单的select元素的应用 id 配合Mapper的全限定名,联合成为一个唯一的标示 parameterType 表示这条SQL接受的参数类型 resultType表示这条SQL返回的结果类型 #{firstName} 是被传递进去的参数 <select id="countUserByFirstName" parameterType="string" resultType="int"> select

mybatis 映射器

1 映射器 Mapper 是由java接口和 XML 文件共同组成.它的作用如下 1)定义参数类型 2)描述缓存 3)描述 SQL 语句 4)定义查询结果和POJO的映射关系 2 SqlSessionFactoryBuilder 主要作用是用来生成 SqlSessionFactory,生成以后就不用了,所以它的生命周期只存在于方法局部. 3 SqlSessionFactory 的作用是创建SqlSession,而 SqlSession 就是一个会话,相当于是JDBC的 Connection 对象

Mybatis 映射器接口代理对象的方式 运行过程debug分析

查询一张表的所有数据. 环境: 使用工具IntelliJ IDEA 2018.2版本. 创建Maven工程不用骨架 1 <?xml version="1.0" encoding="UTF-8"?> 2 <project xmlns="http://maven.apache.org/POM/4.0.0" 3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

MyBatis拦截器:给参数对象属性赋值

1 package com.development; 2 3 import java.lang.reflect.InvocationTargetException; 4 import java.util.Date; 5 import java.util.Map; 6 import java.util.Properties; 7 8 import org.apache.commons.beanutils.BeanUtils; 9 import org.apache.ibatis.executor.

Mybatis映射器(一)

XML查询参数: parameterType:可以给出类别名,全名等. resultType:查询结果,可以为 int,float,map等不可以与resultMap同时使用. resultMap: 映射集的引用可以配置映射规则,级联,typeHandler等,是mybatis最复杂的元素. 本文返回是resultType. 查询方法可以在parameterType设置为单个参数XML设置为int,string等,多个参数可以设置为map <select id="getRoleUseRes

SQL映射器Mapper接口(MyBatis)

SQL映射器Mapper接口 MyBatis基于代理机制,可以让我们无需再写Dao的实现.直接把以前的dao接口定义成符合规则的Mapper. 注意事项: 1.接口必须以Mapper结尾,名字是DomainMapper 2.mapper.xml文件要和Mapper接口建立关系,通过namespace:要能连接到Mapper接口   3.mapper.xml中写查询语句的标签的传入参数类型(parameterType).返回结果类型(resultType)必须和mapper接口中对应方法的传入参数

Java Persistence with MyBatis 3(中文版) 第四章 使用注解配置SQL映射器

在上一章,我们看到了我们是怎样在映射器Mapper XML配置文件中配置映射语句的.MyBatis也支持使用注解来配置映射语句.当我们使用基于注解的映射器接口时,我们不再需要在XML配置文件中配置了.如果你愿意,你也可以同时使用基于XML和基于注解的映射语句. 本章将涵盖以下话题: l 在映射器Mapper接口上使用注解 l 映射语句 @Insert,@Update,@Delete,@SeelctStatements l 结果映射 一对一映射 一对多映射 l 动态SQL @SelectProvi

Java Persistence with MyBatis 3(中文版) 第三章 使用XML配置SQL映射器

关系型数据库和SQL是经受时间考验和验证的数据存储机制.和其他的ORM 框架如Hibernate不同,MyBatis鼓励开发者可以直接使用数据库,而不是将其对开发者隐藏,因为这样可以充分发挥数据库服务器所提供的SQL语句的巨大威力.与此同时,MyBaits消除了书写大量冗余代码的痛苦,它使使用SQL更容易. 在代码里直接嵌套SQL语句是很差的编码实践,并且维护起来困难.MyBaits使用了映射器配置文件或注解来配置SQL语句.在本章中,我们会看到具体怎样使用映射器配置文件来配置映射SQL语句.