mybatis传递参数到xml的几种where语句的写法

1.mybatis从jsp页面接到请求参数第一种传递直接接参数,参数名字和jsp页面的参数属性页面一致

   1)先写jsp页面目的是让看见jsp页面的属性值

<body>
<form action="${pageContext.request.contextPath }/login.action" method="post">
用户账号:<input type="text" name="username" /><br/>
用户密码 :<input type="password" name="password" /><br/>
<input type="submit" value="登陆"/>
</form>
</body>
页面属性值为:username  和password目的是把这这两个值传入xml拼接sql

   2)Controller层的写法

	/**
 	* ***************************************************************
	*Copyright (C), 2000-2025, 
	*作者: lch
	*版本: V1.0
	*日期: 2017
	*描述: 登陆直接传入参数,和form表单里面的参数一致
	*返回类型: String
	*<作者>               <时间>                  <描述>
	****************************************************************
	 */
	@RequestMapping("/login")
	public String login(HttpServletRequest request,HttpSession session, String username, String password)
			throws Exception {
				String  user= itemsService.queryForuser(username,password);
				if(user!=null){	
					session.setAttribute("username", username);
					return "redirect:/items/queryItems.action";
				}
				else{
					request.setAttribute("message", "登录密码错误或者用户不存在!");
					return "login";
				}
		
	}
说明:只要Controller接的参数名字和jsp属性一致就能接到,在这只写Controller和对应xml的写法,pojo和service层省略

 3)对应的xml的sql拼接

 <!-- 传入是直接是request里面从form表单过来的参数,返回是String -->
 <!-- where字句举例 user.username = #{0} -->
  	<select id="queryForuser" 
  		 resultType="String">
  		SELECT username FROM user  
  		<where>
  			<include refid="query_user_where"></include>
  		</where>
  	</select>

 <!-- 用参数传递#{0}对应username ,#{1}对应password-->
   <sql id="query_user_where">
   			user.username = #{0} and  user.password=#{1}
   </sql>

说明:#{0}和#{1}的值就是username和password,顺序记得别乱

2用@RequestParam写法

1)Controller层的写法

	/**
	 * ***************************************************************
	*Copyright (C), 2000-2025, 
	*方法名: loginparam
	*作者: lch
	*版本: V1.0
	*日期: 2017
	*描述:参数类型传入@RequestParam请求参数传入,required=true是必须传,必填项,false是不必填项
	*修改历史:
	*<作者>               <时间>                  <描述>
	****************************************************************
	 */
	@RequestMapping("/loginparam")
	public String loginparam(HttpServletRequest request,HttpSession session, 
			@RequestParam(value = "username", required = false) String username, 
			@RequestParam(value = "password", required = false) String password)
			throws Exception {
			System.out.println(password);
			Map<String, Object> map= new HashMap<String, Object>();
			map.put("username", username);
			map.put("password", password);
			List<Userlogin> Userlist= itemsService.queryForLogin(map);
			if(Userlist.size()>0&&Userlist!=null){
			    JSONObject result = new JSONObject();
		        JSONArray jsonArray = JSONArray.fromObject(Userlist);
		        result.put("rows", jsonArray);
		        session.setAttribute("username", username);
		        return "redirect:/items/queryItems.action";
			}
			else{
				request.setAttribute("message", "登录密码错误或者用户不存在!");
				return "login";
		}
		
	}

说明:方法接到参数时,放到hashmap里面,传入类型是map,返回类型是map

 2)对应的xml的sql拼接

<!-- 传入是map,返回是resultMap map -->
<!-- where字句举例    user.username= #{username,jdbcType=VARCHAR} -->
  	<select id="queryForLogin" 
  		 parameterType="Map" resultMap="UserResult" >
  		SELECT * FROM user  
  		<where>
  			<include refid="query_user_login"></include>
  		</where>
  	</select>
<!-- 用map传的参数,返回类型是resultMap-->
    <sql id="query_user_login">
   		 user.username = #{username,jdbcType=VARCHAR} and user.password=#{password,jdbcType=VARCHAR}
   </sql>

<!--返回是resultMap的写法 属性值和数据表字段对应  -->
    <resultMap type="cn.itcast.ssm.po.Userlogin" id="UserResult">
        <result property="id" column="id"/>
        <result property="username" column="username"/>
        <result property="birthday" column="birthday"/>
        <result property="sex" column="sex"/>
        <result property="address" column="address"/>
        <result property="password" column="password"/>
    </resultMap>
说明:返回类型属性和表字段记得对应准确

3.直接传入pojo类,返回类型也是pojo类

1)Controller层的写法

/**
		 * ***************************************************************
		*Copyright (C), 2000-2025, 
		*作者: lch
		*版本: V1.0
		*日期: 2017
		*描述: 根据username查询user的数据,如果没有username直接查整个表
		*返回类型: ModelAndView
		*<作者>               <时间>                  <描述>
		****************************************************************
		 */
		@RequestMapping("/queryUser")
		public ModelAndView queryUser(HttpServletRequest request,
				Userlogin userlogin) throws Exception {
			// 调用service查找 数据库,查询用户列表
			List<Userlogin> userList = itemsService.findUser(userlogin);
			// 返回ModelAndView
			ModelAndView modelAndView = new ModelAndView();
			// 相当 于request的setAttribut,在jsp页面中通过userList取数据
			modelAndView.addObject("userList", userList);
			// 指定视图
			// 下边的路径,如果在视图解析器中配置jsp路径的前缀和jsp路径的后缀,修改为
			// modelAndView.setViewName("/WEB-INF/jsp/user/userList.jsp");
			// 上边的路径配置可以不在程序中指定jsp路径的前缀和jsp路径的后缀
			modelAndView.setViewName("user/userList");
			return modelAndView;

		}

说明:userLogin是一个pojo普通类

 2)对应的xml的sql拼接

<!-- 传入是user pojo类,返回是user pojo类 -->
<!-- where字句举例   user.username= ${username} -->
  	<select id="findUser" 
  		 parameterType="cn.itcast.ssm.po.Userlogin" resultType="cn.itcast.ssm.po.Userlogin" >
  		SELECT * FROM user  
  		<where>
  			<include refid="query_user"></include>
  		</where>
  	</select>
 <!-- 使用动态sql,通过if判断,满足条件进行sql拼接 -->
 <!-- 要判断username是否为空 -->
 <!-- 要判断username是传入的pojo里面的属性值 -->
    <sql id="query_user">
	  	<if test="username!=null">
	  			  user.username LIKE '%${username}%' 
	  			  <!--  user.username = #{username} --> 
	  	</if>
   </sql>


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值