学习目标

  • (1)角色CRUD
  • (2)用户CRUD
  • (3)权限CRUD

单表CRUD- Xxx管理

Xxx管理后台

  • (1)TesXxxService
  • (2)IXxxService
  • (3)XxxServiceImpl
  • (4)IXxxDao
  • (5)XxxDaoImpl.xml

管理前台

  • (1)XxxController
  • (2)xxx-yyy.jsp
    Ajax删除
  • ​各位开发者需要找出一套适合自己的开发路径,更清析的思路,更少的bug​

Xxx管理分析

  • (1)查看页面
  • (2)与CRUD练习的相似度非常高
  • (3)新建相关的类与xml文件
  • (4)​​把业务类方法的增删改查编写出来​
  • (5)​​把控制器类方法编写出来​
  • (6)​​选中列的技巧:Alt+竖向选择​
  • (7)业务中,只有少数关联操作需要重点理解

查看页面RoleController

@Controller
@RequestMapping("/system/role")
public class RoleController {
private static final Logger l = LoggerFactory.getLogger(RoleController.class);

@RequestMapping(path="/toList",method ={ RequestMethod.GET, RequestMethod.POST})
public String toList(){
return "system/role/role-list";
}
@RequestMapping(path="/toAdd",method ={ RequestMethod.GET, RequestMethod.POST})
public String toAdd(){
return "system/role/role-add";
}
@RequestMapping(path="/toUpdate",method ={ RequestMethod.GET, RequestMethod.POST})
public String toUpdate(){
return "system/role/role-update";
}
@RequestMapping(path="/toRoleModule",method ={ RequestMethod.GET, RequestMethod.POST})
public String toRoleModule(){
return "system/role/role-module";
}
}

定义了Role类

public class Role {
private String roleId ;
private String name ;
private String remark ;
private long orderNo ;
private String createBy ;
private String createDept ;
private Date createTime ;
private String updateBy ;
private Date updateTime ;
private String companyId ; //不同的公司使用不同的角色,但都放在同一表里面,怎么区分?
private String companyName ;//每条记录 通过companyId,companyName指定所属

设置字段与变量的映射

<!-- resultType 指定一个java类型,要求表的字段与变量的名称一致
resultMap 适用不一致的情况-->
<resultMap id="roleMap" type="role">
<id column="role_id" property="roleId" />
<result column="name" property="name" />
<result column="remark" property="remark" />
<result column="order_no" property="orderNo" />
<result column="create_by" property="createBy" />
<result column="create_dept" property="createDept" />
<result column="create_time" property="createTime" />
<result column="update_by" property="updateBy" />
<result column="update_time" property="updateTime" />
<result column="company_id" property="companyId" />
<result column="company_name" property="companyName" />
</resultMap>

把业务类方法的增删改查编写出来

TestRoleService

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath*:spring/applicationContext-*.xml")
public class TestRoleService {
private static final Logger l = LoggerFactory.getLogger(TestRoleService.class);

@Autowired
IRoleService iRoleService;
//增*删改查*
@Test
public void test01(){
//分页列表
//页面上显示分页列表,就要求业务方法中提供查询PageInfo的方法
PageInfo<Role> pi= iRoleService.findByPage(1,3,"1");
l.info("pi = "+pi);
}
@Test
public void test02(){
//
//将一个表单数据保存在javaBean中,再将javaBean存到数据库
Role role = new Role();
role.setName("角色1");
role.setRemark("角色1的备注");
role.setCompanyId("1");
role.setCompanyName("吉首大学");
iRoleService.saveRole(role);

}

@Test
public void test03(){
//
//更新业务 先根据id查找出对应的一条记录,编辑它的值,再将记录保存到数据库中

String roleId="c77751fa-b6a5-45a6-a2b1-704f358e1bee";
Role role = iRoleService.findById(roleId);
l.info("role="+role);
//修改
role.setName("角色2");
role.setRemark("角色2备注");
//保存
iRoleService.updateRole(role);

}
@Test
public void test04(){
//
//删除业务,就是根据指定的id,删除数据库中的记录
String roleId="33";
//删除
iRoleService.deleteRole(roleId);

}
}

IRoleService

public interface IRoleService {
PageInfo<Role> findByPage(int curr, int pageSize, String companyId);

void saveRole(Role role);

Role findById(String roleId);
void updateRole(Role role);

void deleteRole(String roleId);
}

RoleServiceImpl

@Service
public class RoleServiceImpl implements IRoleService {
//service调用dao
@Autowired
IRoleDao iRoleDao;
@Override
public PageInfo<Role> findByPage(int curr, int pageSize, String companyId) {
//设置参数
PageHelper.startPage(curr,pageSize);
//调用全查
List<Role> list = iRoleDao.findAll(companyId);
//包装成PageInfo
PageInfo<Role> pi = new PageInfo<>(list);
return pi;
}

@Override
public void saveRole(Role role) {
String uuid= UUID.randomUUID().toString();
role.setRoleId(uuid);
iRoleDao.save(role);
}

@Override
public Role findById(String roleId) {
return iRoleDao.findById(roleId);
}

@Override
public void updateRole(Role role) {
iRoleDao.update(role);
}

@Override
public void deleteRole(String roleId) {
iRoleDao.deleteById(roleId);
}
}

IRoleDao

public interface IRoleDao {
List<Role> findAll(String companyId);

void save(Role role);

Role findById(String roleId);
void update(Role role);

void deleteById(String roleId);
}

IRoleDao.xml

<?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" >
<!--namespace: 需要映射的Dao接口类型-->
<mapper namespace="com.wzx.dao.system.role.IRoleDao">

<!-- resultType 指定一个java类型,要求表的字段与变量的名称一致
resultMap 适用不一致的情况-->
<resultMap id="roleMap" type="role">
<id column="role_id" property="roleId" />
<result column="name" property="name" />
<result column="remark" property="remark" />
<result column="order_no" property="orderNo" />
<result column="create_by" property="createBy" />
<result column="create_dept" property="createDept" />
<result column="create_time" property="createTime" />
<result column="update_by" property="updateBy" />
<result column="update_time" property="updateTime" />
<result column="company_id" property="companyId" />
<result column="company_name" property="companyName" />
</resultMap>

<select id="findAll" parameterType="string" resultMap="roleMap">
select * from pe_role where company_id=#{companyId} order by order_no
</select>


<insert id="save" parameterType="role">
insert into pe_role
(
role_id ,
name ,
remark ,
order_no ,
create_by ,
create_dept ,
create_time ,
update_by ,
update_time ,
company_id ,
company_name
)
values
(
#{roleId },
#{name },
#{remark },
#{orderNo },
#{createBy },
#{createDept },
#{createTime },
#{updateBy },
#{updateTime },
#{companyId },
#{companyName }

)

</insert>


<select id="findById" parameterType="string" resultMap="roleMap">
select * from pe_role where role_id=#{roleId}
</select>

<update id="update" parameterType="role">
update pe_role set

name = #{name },
remark = #{remark },
order_no = #{orderNo },
create_by = #{createBy },
create_dept = #{createDept },
create_time = #{createTime },
update_by = #{updateBy },
update_time = #{updateTime },
company_id = #{companyId },
company_name = #{companyName}

where role_id = #{roleId}
</update>

<delete id="deleteById" parameterType="string">
delete from pe_role where role_id=#{roleId}
</delete>
</mapper>

Service与Dao方法命名区别

  • dao的方法通常 update() save() deleteByXxx() findByXxx
  • service 的方法通常 updateXxx() saveXxx() deleteXxxByXxx() findXxxByXxx

把控制器类方法编写出来

page.jsp修改

<%--<form id="pageForm" action="${param.pageUrl}" method="post">--%>
<%-- <input type="hidden" name="curr" id="curr">--%>
<%-- <input type="hidden" name="pageSize" id="pageSize">--%>
<%--</form>--%>
<script>function goPage(page) {
<%--document.getElementById("curr").value = page //curr=2--%>
<%--document.getElementById("pageSize").value = ${pi.pageSize} //pageSize=3--%>
<%--document.getElementById("pageForm").submit()--%>
//get 修改地址的数据
window.location='${param.pageUrl}?curr='+page+'&pageSize='+ ${pi.pageSize}
}</script>

RoleController

@Controller
@RequestMapping("/system/role")
public class RoleController extends BaseController {
private static final Logger l = LoggerFactory.getLogger(RoleController.class);

@Autowired
IRoleService iRoleService;
@RequestMapping(path="/toList",method ={ RequestMethod.GET, RequestMethod.POST})
public String toList(@RequestParam(defaultValue = "1") int curr, @RequestParam(defaultValue = "3")int pageSize){
//调查询分页列表的方法
PageInfo<Role> pi = iRoleService.findByPage(curr, pageSize, getLoginCompanyId());
//将pi添加到页面
request.setAttribute("pi",pi);
return "system/role/role-list";
}
@RequestMapping(path="/toAdd",method ={ RequestMethod.GET, RequestMethod.POST})
public String toAdd(){
return "system/role/role-add";
}
@RequestMapping(path="/add",method ={ RequestMethod.GET, RequestMethod.POST})
public String add(Role role){//接收页面提交过来的表单
l.info("add role="+role);
role.setCompanyId(getLoginCompanyId());
role.setCompanyName(getLoginCompanyName());
iRoleService.saveRole(role);
return "redirect:/system/role/toList.do";
}
//${path}/system/role/toUpdate.do?roleId=${o.roleId}
@RequestMapping(path="/toUpdate",method ={ RequestMethod.GET, RequestMethod.POST})
public String toUpdate(String roleId){//需要使用参数接收提交的 roleId
Role role = iRoleService.findById(roleId);
l.info("toUpdate role="+role);

//回显到页面
request.setAttribute("role",role);
return "system/role/role-update";
}

//action="${path}/system/role/update.do"
@RequestMapping(path="/update",method ={ RequestMethod.GET, RequestMethod.POST})
public String update(Role role){//需要接收编辑页面提交的表单数据
l.info("update role="+role);
//更新
//重新设置companyId companyName
role.setCompanyId(getLoginCompanyId());
role.setCompanyName(getLoginCompanyName());

iRoleService.updateRole(role);
return "redirect:/system/role/toList.do";
}

//${path}/system/role/delete.do?roleId='+id;
//{code:200,msg:'删除成功',data:null}
@RequestMapping(path="/delete",method ={ RequestMethod.GET, RequestMethod.POST})
public @ResponseBody
Object delete(String roleId){//参数接收页面js提交过来的roleId
try {
iRoleService.deleteRole(roleId);
//成功
return Result.init(200,"删除成功",null);
} catch (Exception e) {
e.printStackTrace();
//失败
return Result.init(-200,"删除失败",null);
}
}

@RequestMapping(path="/toRoleModule",method ={ RequestMethod.GET, RequestMethod.POST})
public String toRoleModule(){
return "system/role/role-module";
}
}

页面总结

  • 就做以下几件事
  • 修改地址
  • 修改表单
  • 写写el
  • 写if标签 foreach标签
  • 写ajax请求
<script>
function deleteById() {
var id = getCheckId()
if(id) {
if(confirm("你确认要删除此条记录吗?")) {
// location.href="/system/role/delete.do?id="+id;
//使用ajax请求
var url= '${path}/system/role/delete.do?roleId='+id;
var fn = function(result){ //{code:200,msg:'删除成功',data:null}
//弹出提示
alert(result.msg)
window.location.reload() //重新加载
}
$.get(url,fn,'json')
}
}else{
alert("请勾选待处理的记录,且每次只能勾选一个")
}
}

function findModuleByRoleId(){
var id = getCheckId();
if(id) {
location.href="/system/role/roleModule.do?roleid="+id;
}else{
alert("请勾选待处理的记录,且每次只能勾选一个")
}
}
</script>