第一步:在实体entity包里创建Role.java
package com.ischoolbar.programmer.entity.admin;
import org.springframework.stereotype.Component;
/**
* 角色role实体
* @author llq
*
*/
@Component
public class Role {
private Long id;
private String name;
private String remark;//角色备注
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getRemark() {
return remark;
}
public void setRemark(String remark) {
this.remark = remark;
}
}
@RequestMapping的用法:
RequestMapping是一个用来处理请求地址映射的注解,可用于类或方法上。用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径。
RequestMapping注解有六个属性,下面进行说明。
value: 指定请求的实际地址,指定的地址可以是URI Template 模式(后面将会说明);
method: 指定请求的method类型, GET、POST、PUT、DELETE等;
produces: 指定返回的内容类型
还有一个注意的,@RequestMapping的默认属性为value,所以@RequestMapping(value="/example")和@RequestMapping("/example")是等价的。
第二步:在controller中创建RoleController.java
@RequestMapping("/admin/role")
@Controller
public class RoleController {
/**
* 角色列表页面
* @param model
* @return
*/
@RequestMapping(value="/list",method=RequestMethod.GET)
public ModelAndView list(ModelAndView model){
model.setViewName("/role/list");
return model;
}
}
代码中的MdelAndView函数作用,向用户返回页面,可以指定返回页面的名称名称后面不需要加.jsp后缀,modelAndView返回的是json字符串
/**
* 获取角色列表
* @param page
* @param name
* @return
*/
@RequestMapping(value="/list",method=RequestMethod.POST)
@ResponseBody
public Map<String, Object> getList(Page page,
@RequestParam(name="name",required=false,defaultValue="") String name
){
Map<String, Object> ret = new HashMap<String, Object>();
//下面这段此时并没有写,后面才加
/*Map<String, Object> queryMap = new HashMap<String, Object>();
*queryMap.put("name", name);
*queryMap.put("offset", page.getOffset());
*queryMap.put("pageSize", page.getRows());
*ret.put("rows", roleService.findList(queryMap));
*ret.put("total", roleService.getTotal(queryMap));
*/
return ret;
}
这个代码相比于上面那个ModAndView,使用的是@ResponseBody方式返回Json字符串,直接给用户展示数据
第三步:在service中定义RoleService接口,里面实现了增删改查功能
/**
* 角色role service
* @author llq
*
*/
@Service
public interface RoleService {
public int add(Role role);
public int edit(Role role);
public int delete(Long id);
public List<Role> findList(Map<String, Object> queryMap);
public int getTotal(Map<String, Object> queryMap);
public Role find(Long id);
}
第四步:在Dao里面创建一个RoleDao,直接把service中的方法复制过来的,注意Dao里面用的类的注解是@Repository
/**
* 角色role dao
* @author llq
*
*/
@Repository
public interface RoleDao {
public int add(Role role);
public int edit(Role role);
public int delete(Long id);
public List<Role> findList(Map<String, Object> queryMap);
public int getTotal(Map<String, Object> queryMap);
public Role find(Long id);
}
第五步:在service包里新建一个RoleServiceImpl,实现roleservice接口,用的类的注解是@Service
然后将RoleDao注解进来@Autowired,然后调用roleDao的方法
@Override是伪代码,表示重写。(当然不写@Override也可以),不过写上有如下好处:
1、可以当注释用,方便阅读;
2、编译器可以给你验证@Override下面的方法名是否是你父类中所有的,如果没有则报错。例如,你如果没写@Override,而你下面的方法名又写错了,这时你的编译器是可以编译通过的,因为编译器以为这个方法是你的子类中自己增加的方法。
package com.ischoolbar.programmer.service.admin.impl;
/**
* 角色role的实现类
*/
import java.util.List;
import java.util.Map;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.ischoolbar.programmer.dao.admin.RoleDao;
import com.ischoolbar.programmer.entity.admin.Role;
import com.ischoolbar.programmer.service.admin.RoleService;
@Service
public class RoleServiceImpl implements RoleService {
@Autowired
private RoleDao roleDao;
@Override
public int add(Role role) {
// TODO Auto-generated method stub
return roleDao.add(role);
}
@Override
public int edit(Role role) {
// TODO Auto-generated method stub
return roleDao.edit(role);
}
@Override
public int delete(Long id) {
// TODO Auto-generated method stub
return roleDao.delete(id);
}
@Override
public List<Role> findList(Map<String, Object> queryMap) {
// TODO Auto-generated method stub
return roleDao.findList(queryMap);
}
@Override
public int getTotal(Map<String, Object> queryMap) {
// TODO Auto-generated method stub
return roleDao.getTotal(queryMap);
}
@Override
public Role find(Long id) {
// TODO Auto-generated method stub
return roleDao.find(id);
}
}
第六步:接下来写Mapper文件,创建一个RoleMapper.xml,里面是一些对数据库的操作,主要是增删改查的功能。<mapper namespace 中定义的namespace作用是绑定Dao接口。当你的namespace绑定接口后,你可以不用写接口实现类,mybatis会通过该绑定自动帮你找到对应要执行的SQL语句
parameterType:即将传入的语句参数的完全限定类名(或者别名)
<?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.programmer.dao.admin.RoleDao">
<!-- 角色插入操作 -->
<insert id="add" parameterType="Role">
insert into role(id,name,remark) values(null,#{name},#{remark})
</insert>
<!-- 角色信息模糊分页搜索查询 -->
<select id="findList" parameterType="Map" resultType="role">
//下面这行最后面一定要有空格,否则报错
select * from role
<if test="name != null">
//下面这行最后面一定要有空格,否则报错
where name like '%${name}%'
</if>
<if test="offset != null and pageSize != null">
limit #{offset},#{pageSize}
</if>
</select>
<!-- 角色信息模糊分页搜索查询总记录数 -->
<select id="getTotal" parameterType="Map" resultType="Integer">
select count(*) from role
<if test="name != null">
//下面这行最后面一定要有空格,否则报错
where name like '%${name}%'
</if>
</select>
<!-- 根据id获取角色 -->
<select id="find" parameterType="Long" resultType="Role">
select * from role where id = #{id}
</select>
<!-- 修改角色信息 -->
<update id="edit" parameterType="Role">
update role set name = #{name},remark = #{remark} where id = #{id}
</update>
<!-- 删除角色信息 -->
<delete id="delete" parameterType="Long">
delete from role where id = #{id}
</delete>
</mapper>
第七步:然后在RoleController文件中,使用@Autowired注解RoleService
public class RoleController {
@Autowired
private RoleService roleService;
/**
* 获取角色列表
* @param page
* @param name
* @return
*/
@RequestMapping(value="/list",method=RequestMethod.POST)
@ResponseBody
public Map<String, Object> getList(Page page,
@RequestParam(name="name",required=false,defaultValue="") String name
){
Map<String, Object> ret = new HashMap<String, Object>();
Map<String, Object> queryMap = new HashMap<String, Object>();
queryMap.put("name", name);
queryMap.put("offset", page.getOffset());
queryMap.put("pageSize", page.getRows());
ret.put("rows", roleService.findList(queryMap));
ret.put("total", roleService.getTotal(queryMap));
return ret;
}
在数据库里还要添加Role表