文档章节

Mybatis传多个参数(三种解决方案)

李茂冉
 李茂冉
发布于 2016/05/16 01:25
字数 713
阅读 100
收藏 0
点赞 2
评论 0

Mybatis分页插件 - PageHelpe http://git.oschina.net/free/Mybatis_PageHelper

极其方便的使用Mybatis单表的增删改查 http://git.oschina.net/free/Mapper

Mybatis示例 http://blog.csdn.net/column/details/mybatis-sample.html

MyBatis官方文档 http://mybatis.github.io/mybatis-3/zh/dynamic-sql.html

##第一种方案

DAO层的函数方法

public User selectUser(String name,String area);

对应的Mapper.xml

<select id="selectUser" resultMap="BaseResultMap">
    select  *  from user_user_t   where user_name = #{0} and user_area=#{1}
</select>

其中,#{0}代表接收的是dao层中的第一个参数,#{1}代表dao层中第二参数,更多参数一致往后加即可。

##第二种方案 此方法采用Map传多参数.

Dao层的函数方法

public User selectUser(Map paramMap);

对应的Mapper.xml

<select id="selectUser" resultMap="BaseResultMap">
   select * from user_user_t where user_name = #{userName,jdbcType=VARCHAR} and user_area=#{userArea,jdbcType=VARCHAR}
</select>

Service层调用

private User xxxSelectUser(){
	Map paramMap=new hashMap();
	paramMap.put(“userName”,”对应具体的参数值”);
	paramMap.put(“userArea”,”对应具体的参数值”);
	User user=xxx. selectUser(paramMap);
}

个人认为此方法不够直观,见到接口方法不能直接的知道要传的参数是什么。

##第三种方案

Dao层的函数方法

public User selectUser(@param(“userName”)String name,@param(“userArea”)String area);

对应的Mapper.xml

<select id="selectUser" resultMap="BaseResultMap">
   select * from user_user_t  where user_name = #{userName,jdbcType=VARCHAR} and user_area=#{userArea,jdbcType=VARCHAR}
</select> 

个人觉得这种方法比较好,能让开发者看到dao层方法就知道该传什么样的参数,比较直观,个人推荐用此种方案。

##mybatis if标签判断的问题

细节可以参考XML代码:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" 
  "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> 
  <mapper namespace="com.lypaydb.mapper.Order_DayMapper">
	<resultMap type="com.lypaydb.pojo.Order_Day" id="odMap">
	  <id property="id" column="id" />
	  <result property="date" column="date" />
	  <result property="total" column="total" />
	  <result property="aisle" column="aisle" />
	  <result property="operators" column="operators" />
	  <result property="channelid" column="channelid" />
	  <result property="appid" column="appid" />
	  <result property="paycnt" column="paycnt" />
	</resultMap>
   
  <!-- /*sql -->
  <select id="findod" parameterType="java.util.Map" resultMap="odMap">
	  select * from order_day where 1 = 1 
	  <if test="${start} != null and ${start != ''}">
		and   date >= #{start} 
	  </if>
	  <if test="${end} != null and ${end} != ''">
		and #{end} > date  
	  </if>
	  <if test="appid != null and appid != ''">
		and  appid=${appid}
	  </if>
	  <if test="operators != null and operators != ''">
		and operators=${operators}  
	  </if>
	  limit ${Page.startPos},${Page.pageSize};
  </select>
   
  <select id="getAllCount" parameterType="java.util.Map" resultType="java.lang.Integer">
	 select count(*)  from order_day where 1=1 
	  <if test="${start} != null and ${start != ''}">
		and   date >= #{start} 
	  </if>
	  <if test="${end} != null and ${end} != ''">
		and #{end} > date  
	  </if>
	  <if test="appid != null and appid != ''">
		and  appid=${appid}
	  </if>
	  <if test="operators != null and operators != ''">
		and operators=${operators}  
	  </if>
  </select>
  <!-- sql*/ -->
</mapper>

这里是正确的写法:POJO

<select id="findod" parameterType="map" resultMap="odMap">
	select * from order_day where 1 = 1 
	<if test="start != null and start != ''">
	and   date >= #{start} 
	</if>
	<if test="end != null and end != ''">
	and #{end} > date  
	</if>
	<if test="appid != null and appid != ''">
	and  appid=${appid}
	</if>
	<if test="operators != null and operators != ''">
	and operators=${operators}  
	</if>
	limit ${Page.startPos},${Page.pageSize};
</select>

MyBatis,数据库映射这一块。 <if test="end != null and end != ''">and #{end} > date </if>参数是你方法里面传过来参数的实体解析,或者键值对的解析。parameterType是参数类型。可以是map,也可以是你的实体类(完整的包名)

##foreach的使用

<insert id="insertUserList">
  INSERT INTO user(username,password)
  VALUES
  <foreach collection="userList" item="user" separator=",">
	(#{user.username},#{user.password})
  </foreach>
</insert>

对应的接口:

int insertUserList(@Param("userList")List<User> list);

© 著作权归作者所有

共有 人打赏支持
李茂冉
粉丝 5
博文 103
码字总数 59256
作品 0
东城
高级程序员

暂无相关文章

JavaScript零基础入门——(八)JavaScript的数组

JavaScript零基础入门——(八)JavaScript的数组 欢迎大家回到我们的JavaScript零基础入门,上一节课我们讲了有关JavaScript正则表达式的相关知识点,便于大家更好的对字符串进行处理。这一...

JandenMa ⋅ 今天 ⋅ 0

sbt网络问题解决方案

转自:http://dblab.xmu.edu.cn/blog/maven-network-problem/ cd ~/.sbt/launchers/0.13.9unzip -q ./sbt-launch.jar 修改 vi sbt/sbt.boot.properties 增加一个oschina库地址: [reposit......

狐狸老侠 ⋅ 今天 ⋅ 0

大数据,必须掌握的10项顶级安全技术

我们看到越来越多的数据泄漏事故、勒索软件和其他类型的网络攻击,这使得安全成为一个热门话题。 去年,企业IT面临的威胁仍然处于非常高的水平,每天都会看到媒体报道大量数据泄漏事故和攻击...

p柯西 ⋅ 今天 ⋅ 0

Linux下安装配置Hadoop2.7.6

前提 安装jdk 下载 wget http://mirrors.hust.edu.cn/apache/hadoop/common/hadoop-2.7.6/hadoop-2.7.6.tar.gz 解压 配置 vim /etc/profile # 配置java环境变量 export JAVA_HOME=/opt/jdk1......

晨猫 ⋅ 今天 ⋅ 0

crontab工具介绍

crontab crontab 是一个用于设置周期性被执行的任务工具。 周期性执行的任务列表称为Cron Table crontab(选项)(参数) -e:编辑该用户的计时器设置; -l:列出该用户的计时器设置; -r:删除该...

Linux学习笔记 ⋅ 今天 ⋅ 0

深入Java多线程——Java内存模型深入(2)

5. final域的内存语义 5.1 final域的重排序规则 1.对于final域,编译器和处理器要遵守两个重排序规则: (1)在构造函数内对一个final域的写入,与随后把这个被构造对象的引用赋值给一个引用...

江左煤郎 ⋅ 今天 ⋅ 0

面试-正向代理和反向代理

面试-正向代理和反向代理 Nginx 是一个高性能的反向代理服务器,但同时也支持正向代理方式的配置。

秋日芒草 ⋅ 今天 ⋅ 0

Spring 依赖注入(DI)

1、Setter方法注入: 通过设置方法注入依赖。这种方法既简单又常用。 类中定义set()方法: public class HelloWorldOutput{ HelloWorld helloWorld; public void setHelloWorld...

霍淇滨 ⋅ 昨天 ⋅ 0

马氏距离与欧氏距离

马氏距离 马氏距离也可以定义为两个服从同一分布并且其协方差矩阵为Σ的随机变量之间的差异程度。 如果协方差矩阵为单位矩阵,那么马氏距离就简化为欧氏距离,如果协方差矩阵为对角阵,则其也...

漫步当下 ⋅ 昨天 ⋅ 0

聊聊spring cloud的RequestRateLimiterGatewayFilter

序 本文主要研究一下spring cloud的RequestRateLimiterGatewayFilter GatewayAutoConfiguration @Configuration@ConditionalOnProperty(name = "spring.cloud.gateway.enabled", matchIfMi......

go4it ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部