mybatis添加方法可以传map吗_springMVC使用map接收入参 + mybatis使用map 传入查询参数...

测试例子:

controllel层 ,使用map接收请求参数,通过Debug可以看到,请求中的参数的值都是字符串形式,如果将这个接收参数的map直接传入service,mybatis接收参数时会报错,因此要先对请求中的参数进行预处理

1 packageorg.slsale.test;2

3 importjava.util.Date;4 importjava.util.HashMap;5 importjava.util.List;6 importjava.util.Map;7

8 importjavax.servlet.http.HttpServletRequest;9

10 import net.sf.json.JSONArray;

11 import net.sf.json.JsonConfig;12

13 importorg.slsale.common.JsonDateValueProcessor;14 importorg.slsale.dao.testmapper.TestUser;15 importorg.springframework.beans.factory.annotation.Autowired;16 importorg.springframework.stereotype.Controller;17 importorg.springframework.web.bind.annotation.RequestMapping;18 importorg.springframework.web.bind.annotation.RequestMethod;19 importorg.springframework.web.bind.annotation.RequestParam;20 importorg.springframework.web.bind.annotation.ResponseBody;21

22 @Controller23 @RequestMapping("/test")24 public classTestController {25

26 @Autowired27 privateTestService service;28

29 //返回页面的数据中有中文,用produces 处理乱码

30 @RequestMapping(value = "/getUsers", produces = { "text/html;charset=UTF-8" }, method =RequestMethod.GET)31 @ResponseBody32 publicString getUsers(HttpServletRequest request,33 @RequestParam Mapparams1) {34

35 Map params = new HashMap();36 //params1中的value值全部都是字符串,进行转换

37 params.put("isStart", Integer.valueOf(params1.get("isStart")));

38 params.put("startNum", Integer.valueOf(params1.get("startNum")));

39 params.put("pageSize", Integer.valueOf(params1.get("pageSize")));

40 params.put("userType", params1.get("userType")); //数据库中userType字段是varchar类型,isStart为int类型41 List users = service.getUsers(params);42 JsonConfig jsonConfig = newJsonConfig();43 //返回到前端的json数据中,User类里面有Date类型的数据,使用JsonConfig进行时间格式转换

44 jsonConfig.registerJsonValueProcessor(Date.class,new JsonDateValueProcessor());

45 JSONArray array = JSONArray.fromObject(users, jsonConfig);46 returnarray.toString();47 }48

49 }

自定义 JsonDateValueProcessor,对返回前端的json数据中的时间进行指定时间格式的转换,这里使用net.sf.json的JsonConfig类,要添加 json-lib-2.4-jdk15.jar 这个jar包

1 packageorg.slsale.common;2

3 importjava.text.SimpleDateFormat;4 importjava.util.Date;5 importjava.util.Locale;6

7 importnet.sf.json.JsonConfig;8 importnet.sf.json.processors.JsonValueProcessor;9

10 /**

11 * JsonDateValueProcessor JSON 日期格式处理(java转化为JSON)12 *13 *@author

14 * @date15 */

16 public class JsonDateValueProcessor implementsJsonValueProcessor {17

18

19 private String datePattern = "yyyy-MM-dd";20

21

22 publicJsonDateValueProcessor() {23 super();24 }25

26

27 publicJsonDateValueProcessor(String format) {28 super();29 this.datePattern =format;30 }31

32

33 publicObject processArrayValue(Object value, JsonConfig jsonConfig) {34 returnprocess(value);35 }36

37

38 publicObject processObjectValue(String key, Object value,JsonConfig jsonConfig) {39 returnprocess(value);40 }41

42

43 privateObject process(Object value) {44 try{45 if (value instanceofDate) {46 SimpleDateFormat sdf = newSimpleDateFormat(datePattern,Locale.US);47 returnsdf.format((Date) value);48 }49 return value == null ? "": value.toString();50 } catch(Exception e) {51 return "";52 }53

54 }55

56 publicString getDatePattern() {57 returndatePattern;58 }59

60

61 public voidsetDatePattern(String pDatePattern) {62 datePattern =pDatePattern;63 }64

65 }

2.service层

1 packageorg.slsale.test;2

3 importjava.util.List;4 importjava.util.Map;5

6 importorg.slsale.dao.testmapper.TestUser;7 importorg.slsale.dao.testmapper.TestUserMapper;8 importorg.springframework.beans.factory.annotation.Autowired;9 importorg.springframework.stereotype.Service;10

11 @Service12 public classTestService {13

14 @Autowired15 privateTestUserMapper mapper ;16

17 public List getUsers(Mapparams){18 returnmapper.getUserList1(params);19 }20

21 }

3.dao层,使用map做入参,在sqlMapper.xml中,查询的预编译参数名就是map的key,实际传递进去的查询参数值就是map的value,返回list

1 packageorg.slsale.dao.testmapper;2

3 importjava.util.List;4 importjava.util.Map;5

6

7 public interfaceTestUserMapper {8

9 public List getUserList1(Map map);10

11 }

sql映射mapper xml:

1 <?xml version="1.0" encoding="UTF-8"?>

2 "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

4

5

6

7

8

9 select u.userName ,u.loginCode,u.createTime,r.roleName10 from au_user u11 left join au_role r on r.id=u.roleId12

13 and u.userName like CONCAT('%', #{userName},'%')

14 and u.isStart=#{isStart}

15 and u.userType=#{userType}

16

17 order by createTime desc limit #{startNum},#{pageSize}18

19

20

21

22

23

24

25

26

27

28

联表查询,如果表名使用了别名,接收结果集必须 使用resultmap,resultmap中的column 是sql语句中的查询字段或者该查询字段的别名。sql中的参数名称就是controller中定义的入参map的key

User 类属性:

privateInteger id;privateString userName;privateString loginCode;privateString roleName;private Date createTime;

运行项目,在浏览器输入http://localhost:8080/slsys/test/getUsers?isStart=1&userType=1&startNum=0&pageSize=5 ,控制台打印的sql语句如下:

==> Preparing: select u.userName ,u.loginCode,u.createTime,r.roleName from au_user u left join au_role r on r.id=u.roleId WHERE u.isStart=? and u.userType=? order by createTime desc limit ?,?

==> Parameters: 1(Integer), 1(String), 0(Integer), 5(Integer)<==Columns: userName, loginCode, createTime, roleName<== Row: 李明亮, admin1234, 2018-07-07 18:31:43.0, 会员<== Row: 测试用户10, tes10, 2018-06-10 23:21:35.0, 会员<== Row: test08, test08, 2018-04-14 09:46:43.0, 会员<== Row: test07, test07, 2018-04-09 23:06:21.0, 会员<== Row: JBIT, JBIT, 2014-04-10 00:00:00.0, 会员

浏览器调试界面如下:

代码结构:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值