MyBatis映射器(一)--多参数传递方式
在mybatis映射器的接口中,一般在查询时需要传递一些参数作为查询条件,有时候是一个,有时候是多个。当只有一个参数时,我们只要在sql中使用接口中的参数名称即可,但是如果是多个呢,就不能直接用参数名称了,mybatis中有以下四种
第一种:使用map传递
1⃣️定义接口
1 // 使用map传递多个参数进行查询 2 public ListgetByMap(MapparamMap);
2⃣️sql语句
1
23 SELECT * FROM product
4 WHERE product_name LIKE concat('%',#{name},'%') AND
5 CAST(product_price AS INT) > #{price}
6
需要注意的有:
1、parameterType参数类型为map(此处使用别名)
2、参数名称是map中的key
3⃣️查询
1 /**
2 * 通过map传递多个参数
3 *
4 * @return
5 */
6 public void getProductsByMap() {
7 System.out.println("使用map方式传递多个参数");
8 Listproducts = new ArrayList<>();
9 MapparamMap = 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 ListgetByAnnotation(@Param("name") String name, @Param("price") int price);
2⃣️定义sql
1
23 SELECT * FROM product
4 WHERE product_name LIKE concat('%',#{name},'%') AND CAST(product_price
5 AS INT) >
6 #{price}
7
这种方式不需要设置参数类型 ,参数名称为注解定义的名称
3⃣️查询
1 /**
2 * 通过注解传递多个参数
3 */
4 public void getProductByAnnotation() {
5 System.out.println("使用注解方式传递多个参数");
6 Listproducts = 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 ListgetByJavabean(ParamBean paramBean);
3⃣️定义sql
1
23 SELECT * FROM product
4 WHERE product_name LIKE concat('%',#{name},'%')
5 AND CAST(product_price AS INT) > #{price}
6
需要注意的是:
1、参数类型parameterType为前面定义的javabean的全限定名或别名;
2、sql中的参数名称是javabean中定义的属性;
4⃣️查询
1 /**
2 * 通过javabean传递多个参数
3 */
4 public void getProductByJavabean() {
5 System.out.println("使用javabean方式传递多个参数");
6 Listproducts = 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 ListgetByMix(@Param("param") ParamBean paramBean, @Param("page") PageParamBean pageBean);
可以看出此处使用javabean+注解的方式传递参数
3⃣️定义sql
1
23 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
只要是注解方式,就不需要定义参数类型。
4⃣️查询
1 /**
2 * 通过混合方式传递多个参数
3 */
4 public void getProductByMix() {
5 System.out.println("使用混合方式传递多个参数");
6 Listproducts = 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元
以上就是四种方式传递多个参数的实例。
关注公众号
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
-
上一篇
如果云是水滴,Kubernetes就是水滴管理平台
摘要:云是由很多小水滴组成的,把每一个计算机想象成小水滴,联合起来就形成了云。一般水滴先出现,然后出现管理水滴的平台(如OpenStack,Kubernetes)。 一、云计算–独立宇宙 1.云是由很多小水滴组成的,把每一个计算机想象成小水滴,联合起来就形成了云;传统的水滴就是VM;Docker的出现,改变了小水滴的粒度 2.水滴独立可运行,内部完整 (如 VM,Docker容器) 3.一般水滴先出现,然后出现管理水滴的平台(如OpenStack,Kubernetes) 二、Kubernetes简介 1.Kubernetes是一个开源的,用于管理云平台中多个主机上的容器化的应用,Kubernetes的目标是让部署容器化的应用简单并且高效(powerful),Kubernetes提供了应用部署,规划,更新,维护的一种机制 2.Kubernetes一个核心的特点就是能够自主的管理容器来保证云平台中的容器按照用户的期望状态运行着(比如用户想让dlcatalog一直运行,用户不需要关心怎么去做,Kubernetes会自动去监控,然后去重启,新建,总之,让dlcatalog一直提供服务) 3.在...
-
下一篇
时空之门前端代码生成器 4.6.0 Beta2 发布,支持数据导出和图片功能
时空之门前端代码生成器4.6.0 Beta2发布。支持数据导出和图片功能。 时空之门前端代码生成器4.6.0 Beta2发布。功能等同与光2.2.0 Beta6后端的功能,支持数据导出和图片功能。 新版新增了对Excel,PDF,Word数据格式导出的6个动词。并一键支持图片功能。您只需要将字段定义为image类型。即可得到全套的图片功能。现在,新版时空之门的代码生成物是和最新版的光生成的后端代码是配套的,功能上是等同的。 项目图片: 图片功能截图: 前端PDF导出截图: 前端Word导出截图: 本代码生成器是可以运行的jar包。 项目地址:https://gitee.com/jerryshensjf/GatesCore 二进制发布版下载地址:https://gitee.com/jerryshensjf/GatesCore/attach_files
相关文章
文章评论
共有0条评论来说两句吧...


微信收款码
支付宝收款码