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>