1.实体类 package com.itheima.domain.system; public class Dept { private String id; private String deptName; private String parentId; private Integer state; private Dept parent; public Dept getParent() { return parent; } public void setParent(Dept parent) { this.parent = parent; } public String getId() { return id; } public void setId(String id) { this.id = id; } public String getDeptName() { return deptName; } public void setDeptName(String deptName) { this.deptName = deptName; } public String getParentId() { return parentId; } public void setParentId(String parentId) { this.parentId = parentId; } public Integer getState() { return state; } public void setState(Integer state) { this.state = state; } } 2.dao层 package com.itheima.dao.system; import com.itheima.domain.system.Dept; import java.util.List; public interface DeptDao { int save(Dept dept); int delete(Dept dept); int update(Dept dept); Dept findById(String id); List<Dept> findAll(); } 3.resources <?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.itheima.dao.system.DeptDao"> <!--配置实体类属性和数据库表中列的对应关系--> <resultMap id="BaseResultMap" type="com.itheima.domain.system.Dept"> <id column="dept_id" jdbcType="VARCHAR" property="id"/> <result column="dept_name" jdbcType="VARCHAR" property="deptName"/> <result column="parent_id" jdbcType="VARCHAR" property="parentId"/> <result column="state" jdbcType="DECIMAL" property="state"/> <!--关联关系--> <association property="parent" javaType="com.itheima.domain.system.Dept" column="parent_id" select="com.itheima.dao.system.DeptDao.findById" /> </resultMap> <!--配置查询的列名公共SQL语句--> <sql id="Base_Column_List"> dept_id, dept_name, parent_id, state </sql> <!--配置查询所有,带条件--> <select id="findAll" resultMap="BaseResultMap"> select <include refid="Base_Column_List"/> from ss_dept </select> <!--配置根据ID查询--> <select id="findById" parameterType="java.lang.String" resultMap="BaseResultMap"> select <include refid="Base_Column_List"/> from ss_dept where dept_id = #{id,jdbcType=VARCHAR} </select> <!--配置根据id删除--> <delete id="delete" parameterType="java.lang.String"> delete from ss_dept where dept_id = #{id,jdbcType=VARCHAR} </delete> <!--配置全字段插入,当某个字段没有值时,插入null--> <insert id="save" parameterType="com.itheima.domain.system.Dept"> insert into ss_dept (dept_id, dept_name, parent_id,state) values (#{id,jdbcType=VARCHAR}, #{deptName,jdbcType=VARCHAR}, #{parentId,jdbcType=VARCHAR},#{state,jdbcType=DECIMAL}) </insert> <!--配置全字段更新,当提供的数据为null时,数据库数据会被更新为null--> <update id="update" parameterType="com.itheima.domain.system.Dept"> update ss_dept set dept_name = #{deptName,jdbcType=VARCHAR}, parent_id = #{parentId,jdbcType=VARCHAR}, state = #{state,jdbcType=DECIMAL} where dept_id = #{id,jdbcType=VARCHAR} </update> </mapper> 4.service层 package com.itheima.service.system; import com.github.pagehelper.PageInfo; import com.itheima.domain.system.Dept; import java.util.List; public interface DeptService { /** * 添加 * @param dept * @return */ void save(Dept dept); /** * 删除 * @param dept * @return */ void delete(Dept dept); /** * 修改 * @param dept * @return */ void update(Dept dept); /** * 查询单个 * @param id 查询的条件(id) * @return 查询的结果,单个对象 */ Dept findById(String id); /** * 查询全部的数据 * @return 全部数据的列表对象 */ List<Dept> findAll(); /** * 分页查询数据 * @param page 页码 * @param size 每页显示的数据总量 * @return */ PageInfo findAll(int page, int size); } package com.itheima.service.system.impl; import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; import com.itheima.dao.system.DeptDao; import com.itheima.domain.system.Dept; import com.itheima.factory.MapperFactory; import com.itheima.service.system.DeptService; import com.itheima.utils.TransactionUtil; import org.apache.ibatis.session.SqlSession; import java.util.List; import java.util.UUID; public class DeptServiceImpl implements DeptService { @Override public void save(Dept dept) { SqlSession sqlSession = null; try{ //1.获取SqlSession sqlSession = MapperFactory.getSqlSession(); //2.获取Dao DeptDao deptDao = MapperFactory.getMapper(sqlSession,DeptDao.class); //id使用UUID的生成策略来获取 String id = UUID.randomUUID().toString(); dept.setId(id); //3.调用Dao层操作 deptDao.save(dept); //4.提交事务 TransactionUtil.commit(sqlSession); }catch (Exception e){ TransactionUtil.rollback(sqlSession); throw new RuntimeException(e); //记录日志 }finally { try { TransactionUtil.close(sqlSession); }catch (Exception e){ e.printStackTrace(); } } } @Override public void delete(Dept dept) { SqlSession sqlSession = null; try{ //1.获取SqlSession sqlSession = MapperFactory.getSqlSession(); //2.获取Dao DeptDao deptDao = MapperFactory.getMapper(sqlSession,DeptDao.class); //3.调用Dao层操作 deptDao.delete(dept); //4.提交事务 TransactionUtil.commit(sqlSession); }catch (Exception e){ TransactionUtil.rollback(sqlSession); throw new RuntimeException(e); //记录日志 }finally { try { TransactionUtil.close(sqlSession); }catch (Exception e){ e.printStackTrace(); } } } @Override public void update(Dept dept) { SqlSession sqlSession = null; try{ //1.获取SqlSession sqlSession = MapperFactory.getSqlSession(); //2.获取Dao DeptDao deptDao = MapperFactory.getMapper(sqlSession,DeptDao.class); //3.调用Dao层操作 deptDao.update(dept); //4.提交事务 TransactionUtil.commit(sqlSession); }catch (Exception e){ TransactionUtil.rollback(sqlSession); throw new RuntimeException(e); //记录日志 }finally { try { TransactionUtil.close(sqlSession); }catch (Exception e){ e.printStackTrace(); } } } @Override public Dept findById(String id) { SqlSession sqlSession = null; try{ //1.获取SqlSession sqlSession = MapperFactory.getSqlSession(); //2.获取Dao DeptDao deptDao = MapperFactory.getMapper(sqlSession,DeptDao.class); //3.调用Dao层操作 return deptDao.findById(id); }catch (Exception e){ throw new RuntimeException(e); //记录日志 }finally { try { TransactionUtil.close(sqlSession); }catch (Exception e){ e.printStackTrace(); } } } @Override public List<Dept> findAll() { SqlSession sqlSession = null; try{ //1.获取SqlSession sqlSession = MapperFactory.getSqlSession(); //2.获取Dao DeptDao deptDao = MapperFactory.getMapper(sqlSession,DeptDao.class); //3.调用Dao层操作 return deptDao.findAll(); }catch (Exception e){ throw new RuntimeException(e); //记录日志 }finally { try { TransactionUtil.close(sqlSession); }catch (Exception e){ e.printStackTrace(); } } } @Override public PageInfo findAll(int page, int size) { SqlSession sqlSession = null; try{ //1.获取SqlSession sqlSession = MapperFactory.getSqlSession(); //2.获取Dao DeptDao deptDao = MapperFactory.getMapper(sqlSession,DeptDao.class); //3.调用Dao层操作 PageHelper.startPage(page,size); List<Dept> all = deptDao.findAll(); PageInfo pageInfo = new PageInfo(all); return pageInfo; }catch (Exception e){ throw new RuntimeException(e); //记录日志 }finally { try { TransactionUtil.close(sqlSession); }catch (Exception e){ e.printStackTrace(); } } } } 5.Controller层 package com.itheima.web.controller.system; import com.github.pagehelper.PageInfo; import com.itheima.domain.system.Dept; import com.itheima.utils.BeanUtil; import com.itheima.web.controller.BaseServlet; import org.apache.commons.lang3.StringUtils; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.util.List; // uri:/system/dept?operation=list @WebServlet("/system/dept") public class DeptServlet extends BaseServlet { @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String operation = request.getParameter("operation"); if("list".equals(operation)){ this.list(request,response); }else if("toAdd".equals(operation)){ this.toAdd(request,response); }else if("save".equals(operation)){ this.save(request, response); }else if("toEdit".equals(operation)){ this.toEdit(request,response); }else if("edit".equals(operation)){ this.edit(request,response); }else if("delete".equals(operation)){ this.delete(request,response); } } private void list(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException { //进入列表页 //获取数据 int page = 1; int size = 5; if(StringUtils.isNotBlank(request.getParameter("page"))){ page = Integer.parseInt(request.getParameter("page")); } if(StringUtils.isNotBlank(request.getParameter("size"))){ size = Integer.parseInt(request.getParameter("size")); } PageInfo all = deptService.findAll(page, size); //将数据保存到指定的位置 request.setAttribute("page",all); //跳转页面 request.getRequestDispatcher("/WEB-INF/pages/system/dept/list.jsp").forward(request,response); } private void toAdd(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException { //加载所有的部门信息放入到deptList List<Dept> all = deptService.findAll(); request.setAttribute("deptList",all); //跳转页面 request.getRequestDispatcher("/WEB-INF/pages/system/dept/add.jsp").forward(request,response); } private void save(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException { //将数据获取到,封装成一个对象 Dept dept = BeanUtil.fillBean(request,Dept.class,"yyyy-MM-dd"); //调用业务层接口save // DeptService deptService = new DeptServiceImpl(); deptService.save(dept); //跳转回到页面list //list(request,response); response.sendRedirect(request.getContextPath()+"/system/dept?operation=list"); } private void toEdit(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //查询要修改的数据findById String id = request.getParameter("id"); // DeptService deptService = new DeptServiceImpl(); Dept dept = deptService.findById(id); //加载所有的部门信息放入到deptList List<Dept> all = deptService.findAll(); request.setAttribute("deptList",all); //将数据加载到指定区域,供页面获取 request.setAttribute("dept",dept); //跳转页面 request.getRequestDispatcher("/WEB-INF/pages/system/dept/update.jsp").forward(request,response); } private void edit(HttpServletRequest request, HttpServletResponse response) throws IOException { //将数据获取到,封装成一个对象 Dept dept = BeanUtil.fillBean(request,Dept.class,"yyyy-MM-dd"); //调用业务层接口save // DeptService deptService = new DeptServiceImpl(); deptService.update(dept); //跳转回到页面list //list(request,response); response.sendRedirect(request.getContextPath()+"/system/dept?operation=list"); } private void delete(HttpServletRequest request, HttpServletResponse response) throws IOException { //将数据获取到,封装成一个对象 Dept dept = BeanUtil.fillBean(request,Dept.class); //调用业务层接口save // DeptService deptService = new DeptServiceImpl(); deptService.delete(dept); //跳转回到页面list //list(request,response); response.sendRedirect(request.getContextPath()+"/system/dept?operation=list"); } @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { this.doGet(request,response); } } 6.表现层 <li id="sys-dept"> <a href="${ctx}/system/dept?operation=list" onclick="setSidebarActive(this)" target="iframe"> <i class="fa fa-circle-o"></i>部门管理 </a> </li>