之前写项目的时候就会遇到一次传好多的值,如果封装成一个实体(或者Model)的话还好,但是总会有都不满足的情况,这个时候map传参的话就大大解决了我们这个问题。因为大家都知道map是一对键值对,而且它可以put好多个键。下面我将贴出我写的代码,希望对大家有所帮助。
然后在dao访问数据库,执行sql语句
...
import com.wonders.common.entity.dao.JurassicBaseDao;
import com.wonders.usermanager.model.AuthUserModel;
@Component
@SuppressWarnings({"unchecked","rawtypes"})
public class AuthUserDao extends JurassicBaseDao<AuthUserModel, String>{
@Override
public Class getEntityClass() {
return AuthUserModel.class;
}
...
public void updateAuthUserByMD(HashMap<String, String> param){
this.getSqlSessionTemplate().update(this.getEntityClass().getName()+".updateAuthUserByMD",param);
}
....
}
在这边要说一下的是,如果不清楚,不好的方法,可以点Ctrl进入父类里看
然后是service(或者manager)里调用方法
@Component
public class AuthUserManager extends JurassicBaseManager<AuthUserModel, String>{
@Autowired
private AuthUserDao authUserDao;
...
...
/**
* 根据user的personid 同步账号
* @param id
* @param personid
*/
public void updateAuthUserByMD(String id,String personid){
HashMap<String, String> map = new HashMap<String, String>();
map.put("id", id);
map.put("personid", personid);
authUserDao.updateAuthUserByMD(map);
}
...
...
}
然后就是control里的调用了。相信大家都知道,实名一个实体(或者model),然后service调用方法就可以执行了。
AuthUserModel authuserModel =authUserManager.getById(userid);
authUserManager.updateAuthUserByMD(authuserModel.getPersonid(), authuserModel.getPersonid());
这就是Mabatis框架的map传参,简单的看完了,大家也会发现map传参也有局限性,就是如果几个参数的类型不一致,就没法满足,这个问题如果以后可以解决了,将再做补充,如果大家有什么可以解决的方法也可以私信我,谢谢~~希望大家能多交流交流 ~~
上面代码写的有点冗余,下面做了些优化,给大家参考一下:
dao里面没修改
Manager也就是service
...
public void updateAuthUserByMD(String personid){
HashMap<String, String> map = new HashMap<String, String>();
map.put("personid", personid);
authUserDao.updateAuthUserByMD(map);
}
...
Controller
...
@RequestMapping("/sync")
public ModelAndView sync(HttpServletRequest request, HttpServletResponse response) throws Exception {
ModelAndView result = new ModelAndView();
String userid = request.getParameter("userid");
try {
if(StringUtils.isNotBlank(userid) ){
AuthUserModel authuserModel = authUserManager.getById(userid);
if (authuserModel != null) {
authUserManager.updateAuthUserByMD(authuserModel.getPersonid());
result.addObject("msg","succ");
}
result.addObject("msg", "账号不存在或查找异常,请联系管理员!");
}else{
result.addObject("msg", "账号不存在或查找异常,请联系管理员!");
}
}catch (Exception e) {
result.addObject("msg", e.getMessage());
e.printStackTrace();
}
return result;
}
...
相信大家也看出来了,一个参数用了两次或多次,可以传那个参数就可以了,不需要对应没次都传一遍。其实这也涉及了#和$的区别~~后继会进行更新处理。