之前搭得SSM框架包括后来的使用json的都是使用实体类的,这次尝试用Map代替实体类来返回数据,经过替换后,现在的包结构成了这样,是不是更加清晰了,同时完善了mybatis的增删改查方法,不过对于动态sql目前感觉看一眼就会,就没写,整个项目的地址在文章末尾,需要的可以下载。
接下来看下代码
UserMapper.xml
这个文件原本我是直接用之前的mybatis-generator生成的,原来它是用ResultMap来作为返回值的,我直接将里面的值改为hashMap,很遗憾,报错了,改成ResultType就可以,后来查了资料发现
1、esultType是直接表示返回类型的(对应着我们的model对象中的实体)。
2、resultMap是对外部ResultMap的引用(提前定义了db和model之间的隐射key value关系)。
3、resultType跟resultMap不能同时存在。
<?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.tu.dao.UserDao">
<!-- 查询所有 -->
<select id="getAll" resultType="hashmap">
select * from user
</select>
<!-- 根据主键查询 -->
<select id="selectByPrimaryKey" resultType="java.util.HashMap" parameterType="java.lang.Integer">
select * from user where id = #{id}
</select>
<!-- 插入 -->
<insert id="addUser" parameterType="java.util.HashMap">
<!-- 返回主键 -->
<selectKey keyProperty="id" order="AFTER" resultType="java.lang.Integer">
select LAST_INSERT_ID() as id
</selectKey>
insert into user (name,password,age,male) value(#{name},#{password},#{age},#{male})
</insert>
<!-- 删除 -->
<delete id="delete" parameterType="java.util.HashMap">
delete from user where id=#{id}
</delete>
<!-- 修改 -->
<update id="update" parameterType="java.util.HashMap">
update user set name=#{name} where id=#{id}
</update>
</mapper>
UserController
public class UserController {
@Resource
private UserService userService;
@RequestMapping("/home")
private ModelAndView init(HttpServletRequest request){
ModelAndView mv = new ModelAndView();
List<Map<String,Object>> user = userService.getAll();
mv.addObject("user",user);
mv.setViewName("index");
return mv;
}
@RequestMapping("/index/load")
private @ResponseBody List<Map<String,Object>> requestJson(@RequestBody Map<String, Object> map){
List<Map<String,Object>> list = userService.getAll();
return list;
}
@RequestMapping("/register")
private @ResponseBody Map<String,Object> register(@RequestBody Map<String, Object> map){
return userService.addUser(map);
}
@RequestMapping("/deleteuser")
private @ResponseBody Map<String,Object> delete(@RequestBody Map<String, Object> map){
int num = userService.delete(map);
Map<String, Object> state = new HashMap<String, Object>();
state.put("result", num);
return state;
}
@RequestMapping("/update")
private @ResponseBody Map<String,Object> update(@RequestBody Map<String, Object> map){
int num = userService.update(map);
Map<String, Object> state = new HashMap<String, Object>();
state.put("result", num);
return state;
}
其他代码比较简单,我这边就不贴了,如果有需要,可以点击这里下载
页面中的修改,采用的是原来的html代码,输入姓名和id,就可以根据id来修改姓名。