第一个SSM项目

时间:2024-03-14 21:03:21

具体项目组成:

第一个SSM项目

第一个SSM项目

第一个SSM项目

第一个SSM项目

第一个SSM项目

第一个SSM项目

第一个SSM项目

 

数据库:

第一个SSM项目

1、CREATE TABLE `employee` (

  `id` bigint(20) NOT NULL AUTO_INCREMENT,

  `username` varchar(50) DEFAULT NULL,

  `realname` varchar(50) DEFAULT NULL,

  `password` varchar(100) DEFAULT NULL,

  `tel` varchar(13) DEFAULT NULL,

  `email` varchar(100) DEFAULT NULL,

  `dept_id` bigint(20) DEFAULT NULL,

  `inputtime` date DEFAULT NULL,

  `state` tinyint(1) DEFAULT NULL,

  `admin` tinyint(1) DEFAULT NULL,

  PRIMARY KEY (`id`),

  KEY `FK_dept` (`dept_id`),

  CONSTRAINT `FK_dept` FOREIGN KEY (`dept_id`) REFERENCES `department` (`id`)

) ENGINE=InnoDB AUTO_INCREMENT=46 DEFAULT CHARSET=utf8;

 

2.CREATE TABLE `department` (

  `id` bigint(20) NOT NULL AUTO_INCREMENT,

  `sn` varchar(50) DEFAULT NULL,

  `name` varchar(50) DEFAULT NULL,

  `manager_id` bigint(20) DEFAULT NULL,

  `parent_id` bigint(20) DEFAULT NULL,

  `state` tinyint(1) DEFAULT NULL,

  PRIMARY KEY (`id`)

) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;

 

3.CREATE TABLE `log` (

  `id` bigint(20) NOT NULL AUTO_INCREMENT,

  `opUser_id` bigint(20) DEFAULT NULL,

  `opTime` datetime DEFAULT NULL,

  `opIp` varchar(255) DEFAULT NULL,

  `function` varchar(255) DEFAULT NULL,

  `params` varchar(500) DEFAULT NULL,

  PRIMARY KEY (`id`),

  KEY `FK_emp` (`opUser_id`),

  CONSTRAINT `FK_emp` FOREIGN KEY (`opUser_id`) REFERENCES `employee` (`id`)

) ENGINE=InnoDB AUTO_INCREMENT=1025 DEFAULT CHARSET=utf8;

 

 

4.CREATE TABLE `role_permission` (

  `r_id` bigint(20) DEFAULT NULL,

  `p_id` bigint(20) DEFAULT NULL,

  KEY `FK_role` (`r_id`),

  KEY `FK_permission` (`p_id`),

  CONSTRAINT `FK_permission` FOREIGN KEY (`p_id`) REFERENCES `permission` (`id`),

  CONSTRAINT `FK_role` FOREIGN KEY (`r_id`) REFERENCES `role` (`id`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

 

5.CREATE TABLE `role` (

  `id` bigint(20) NOT NULL AUTO_INCREMENT,

  `name` varchar(50) DEFAULT NULL,

  `sn` varchar(50) DEFAULT NULL,

  PRIMARY KEY (`id`)

) ENGINE=InnoDB AUTO_INCREMENT=12 DEFAULT CHARSET=utf8;

 

6.CREATE TABLE `permission` (

  `id` bigint(20) NOT NULL AUTO_INCREMENT,

  `name` varchar(50) DEFAULT NULL,

  `resource` varchar(100) DEFAULT NULL,

  PRIMARY KEY (`id`)

) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8;

 

7.CREATE TABLE `emp_role` (

  `e_id` bigint(20) NOT NULL,

  `r_id` bigint(20) NOT NULL,

  KEY `FK_m_emp` (`e_id`),

  KEY `FK_m_role` (`r_id`),

  CONSTRAINT `FK_m_emp` FOREIGN KEY (`e_id`) REFERENCES `employee` (`id`),

  CONSTRAINT `FK_m_role` FOREIGN KEY (`r_id`) REFERENCES `role` (`id`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

 

8.CREATE TABLE `menu` (

  `id` bigint(20) NOT NULL AUTO_INCREMENT,

  `text` varchar(100) DEFAULT NULL,

  `iconCls` varchar(100) DEFAULT NULL,

  `checked` tinyint(1) DEFAULT NULL,

  `state` varchar(10) DEFAULT NULL,

  `attributes` varchar(500) DEFAULT NULL,

  `parent_id` bigint(20) DEFAULT NULL,

  `function` varchar(100) DEFAULT NULL,

  PRIMARY KEY (`id`),

  KEY `FK_parent` (`parent_id`),

  CONSTRAINT `FK_parent` FOREIGN KEY (`parent_id`) REFERENCES `menu` (`id`)

) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8;

 

 

 

 

第一个SSM项目

首先代码生成器的使用,与视屏上讲的不一样(这一点debug很久)

第一个SSM项目

<plugin>

<groupId>org.mybatis.generator</groupId>

<artifactId>mybatis-generator-maven-plugin</artifactId>

<version>1.3.2</version>

<configuration>

<configurationFile>src/main/resources/generatorConfig.xml

</configurationFile>

<verbose>true</verbose>

<overwrite>false</overwrite>

</configuration>

<dependencies>

<dependency>

<groupId>mysql</groupId>

<artifactId>mysql-connector-java</artifactId>

<version>5.1.38</version>

<scope>runtime</scope>

</dependency>

</dependencies>

</plugin>

 

第一天

 

第一个SSM项目

 

第二天

第一个SSM项目

 

第三天

第一个SSM项目

 

 

 

 

 

 

 

收获:1.Ajax请求之框架的编写

          2.Url权限控制

第一个SSM项目

                                                    第一个SSM项目

                                                   第一个SSM项目

                           第一个SSM项目

3字典明细

 

具体代码:

domain文件:(由代码生成器生成)

Department类:

package CRM.domain;

 

import lombok.Getter;

import lombok.Setter;

 

@[email protected]

public class Department {

private Long id;

private String sn;

private String name;

private Employee manager;

private Department parent;

private Boolean state;

 

 

}

 

Employee类

package CRM.domain;

 

import com.fasterxml.jackson.annotation.JsonFormat;

import lombok.Getter;

import lombok.Setter;

import lombok.ToString;

import org.springframework.format.annotation.DateTimeFormat;

 

import java.util.ArrayList;

import java.util.Date;

import java.util.List;

 

@[email protected]@ToString

public class Employee {

private Long id;

private String username;

private String realname;

private String password;

private String tel;

private String email;

private Department dept;

@JsonFormat(pattern = "yyyy-MM-dd",timezone = "GMT+8")

@DateTimeFormat(pattern = "yyyy-MM-dd")

private Date inputtime;

private Boolean state;

private Boolean admin;

private List<Role>list=new ArrayList<>();

 

}

Log类

package CRM.domain;

 

import lombok.Getter;

import lombok.Setter;

 

import java.util.Date;

@[email protected]

public class Log {

private Long id;

 

private Employee opuser;

 

private Date optime;

 

private String opip;

 

private String function;

 

private String params;

 

}

 

Menu类

package CRM.domain;

 

import com.fasterxml.jackson.annotation.JsonIgnoreProperties;

import lombok.Getter;

import lombok.Setter;

 

import java.util.List;

 

@[email protected]

@JsonIgnoreProperties(value = {"handler"})

public class Menu {

private Long id;

 

private String text;

 

private String iconCls;

 

private Boolean checked;

 

private String state;

 

private String attributes;

 

private List<Menu> children;

 

private String function;

}

 

Permission类

package CRM.domain;

 

import lombok.Getter;

import lombok.Setter;

 

@[email protected]

public class Permission {

private Long id;

 

private String name;

 

private String resource;

 

}

 

Role类

package CRM.domain;

 

import lombok.Getter;

import lombok.Setter;

import sun.swing.BakedArrayList;

 

import java.util.ArrayList;

import java.util.List;

 

@[email protected]

public class Role {

private Long id;

 

private String name;

 

private String sn;

 

private List<Permission>list=new ArrayList<>();

}

 

 

 

 

 

mapper接口文件夹:(由代码生成器生成)

DepartmentMapper接口

package CRM.mapper;

 

import CRM.domain.Department;

import java.util.List;

 

public interface DepartmentMapper {

int deleteByPrimaryKey(Long id);

 

int insert(Department record);

 

Department selectByPrimaryKey(Long id);

 

List<Department> selectAll();

 

int updateByPrimaryKey(Department record);

 

List queryforEmp();

}

 

EmployeeMapper接口

package CRM.mapper;

 

import CRM.domain.Employee;

import CRM.query.queryobject;

import org.apache.ibatis.annotations.Param;

 

import java.util.List;

 

public interface EmployeeMapper {

int deleteByPrimaryKey(Long id);

 

int insert(Employee record);

 

Employee selectByPrimaryKey(Long id);

 

List<Employee> selectAll();

 

int updateByPrimaryKey(Employee record);

 

Employee getElemployee(@Param("username") String username,@Param("password") String password);

 

Integer queryforpagecount(queryobject go);

 

List<Employee>queryforpage(queryobject go);

 

Integer updateState(Long id);

void insertRelation(@Param("eid")Long eid,@Param("rid")Long rid);

 

List<Long> queryByeid(Long eid);

void deleteRelation(Long eid);

}

 

LogMapper接口

package CRM.mapper;

 

import CRM.domain.Log;

import java.util.List;

 

public interface LogMapper {

int deleteByPrimaryKey(Long id);

 

int insert(Log record);

 

Log selectByPrimaryKey(Long id);

 

List<Log> selectAll();

 

int updateByPrimaryKey(Log record);

}

 

MenuMapper接口

package CRM.mapper;

 

import CRM.domain.Menu;

import java.util.List;

 

public interface MenuMapper {

int deleteByPrimaryKey(Long id);

 

int insert(Menu record);

 

Menu selectByPrimaryKey(Long id);

 

List<Menu> selectAll();

 

int updateByPrimaryKey(Menu record);

List<Menu>queryforroot();

}

 

PermissionMapper接口

package CRM.mapper;

 

import CRM.domain.Permission;

import CRM.query.permissionquery;

 

import java.util.List;

 

public interface PermissionMapper {

int deleteByPrimaryKey(Long id);

 

int insert(Permission record);

 

Permission selectByPrimaryKey(Long id);

 

List<Permission> selectAll();

 

int updateByPrimaryKey(Permission record);

Long querypageCount(permissionquery qo);

List<Permission>querypage(permissionquery qo);

 

void deleterecord(Long rid);

List<String> queryByEid(Long id);

}

 

RoleMapper接口

package CRM.mapper;

 

import CRM.domain.Role;

import CRM.query.rolequery;

import org.apache.ibatis.annotations.Param;

 

import java.util.List;

 

public interface RoleMapper {

int deleteByPrimaryKey(Long id);

 

int insert(Role record);

 

Role selectByPrimaryKey(Long id);

 

List<Role> selectAll();

 

int updateByPrimaryKey(Role record);

 

void insertRelation(@Param("rid") Long rid,@Param("pid") Long pid);

 

Long querypageCount(rolequery qo);

 

List querypage(rolequery qo);

 

void deleterecord(Long rid);

}

 

 

 

 

page分页文件

pageResult分页类

package CRM.page;

 

import lombok.Getter;

import lombok.Setter;

 

import java.util.List;

@[email protected]

public class pageResult {

private Integer total;

private List rows;

 

public pageResult(Integer total, List rows) {

this.total = total;

this.rows = rows;

}

}

query文件夹:

query父类(用于给后面子类的继承,减少代码量):

package CRM.query;

 

import lombok.Getter;

import lombok.Setter;

 

@[email protected]

public class query {

private Integer page;

private Integer rows;

public Integer getStart(){

return this.page==null?0:(this.page-1)*this.rows;

}

}

queryobject类

package CRM.query;

 

import lombok.Getter;

import lombok.Setter;

 

@[email protected]

public class queryobject extends query{

 

private String keyword;

 

}

permissionquery类

package CRM.query;

 

import lombok.Getter;

import lombok.Setter;

 

@[email protected]

public class permissionquery extends query {

private Long rid;

}

rolequery类

package CRM.query;

 

import lombok.Getter;

import lombok.Setter;

 

@[email protected]

public class rolequery extends query{

private String keyword;

}

service接口

IDepartmentService接口

package CRM.service;

 

import CRM.domain.Department;

 

import java.util.List;

 

public interface IDepartmentService {

int deleteByPrimaryKey(Long id);

 

int insert(Department record);

 

Department selectByPrimaryKey(Long id);

 

List<Department> selectAll();

 

int updateByPrimaryKey(Department record);

 

List queryforEmp();

}

IEmployeeService接口

package CRM.service;

 

import CRM.domain.Employee;

import CRM.domain.Role;

import CRM.page.pageResult;

import CRM.query.queryobject;

import CRM.util.AjaxResult;

import CRM.web.controller.employeeController;

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.ResponseBody;

 

import java.util.List;

 

public interface IEmployeeService {

int deleteByPrimaryKey(Long id);

 

int insert(Employee record);

 

Employee selectByPrimaryKey(Long id);

 

List<Employee> selectAll();

 

int updateByPrimaryKey(Employee record);

 

Employee getElemployee(String username, String password);

 

pageResult pageforpage(queryobject go);

 

Integer updateState(Long id);

 

 

 

 

List<Long> queryByeid(Long eid);

}

ILogService接口

package CRM.service;

 

import CRM.domain.Log;

import CRM.domain.Department;

 

import java.util.List;

 

public interface ILogService {

int deleteByPrimaryKey(Long id);

 

int insert(Log record);

 

Log selectByPrimaryKey(Long id);

 

List<Log> selectAll();

 

int updateByPrimaryKey(Log record);

 

 

}

IMenuService接口

package CRM.service;

 

import CRM.domain.Menu;

 

import java.util.List;

 

public interface IMenuService {

List<Menu> queryforroot();

}

IPermissionService接口

package CRM.service;

 

 

 

import CRM.domain.Permission;

import CRM.page.pageResult;

import CRM.query.permissionquery;

import CRM.query.queryobject;

 

import java.util.List;

 

public interface IPermissionService {

int deleteByPrimaryKey(Long id);

 

int insert(Permission record);

 

Permission selectByPrimaryKey(Long id);

 

List<Permission> selectAll();

 

int updateByPrimaryKey(Permission record);

 

 

 

pageResult pageforpage(permissionquery qo);

 

 

List<String> queryByEid(Long id);

}

IRoleService接口

package CRM.service;

 

 

 

import CRM.domain.Role;

import CRM.page.pageResult;

import CRM.query.permissionquery;

import CRM.query.rolequery;

 

import java.util.List;

 

public interface IRoleService {

int deleteByPrimaryKey(Long id);

 

int insert(Role record);

 

Role selectByPrimaryKey(Long id);

 

List<Role> selectAll();

 

int updateByPrimaryKey(Role record);

 

 

 

pageResult pageforpage(rolequery qo);

 

 

}

service下的impl实现类

DepartmentServiceImpl实现类

package CRM.service.impl;

 

import CRM.domain.Department;

import CRM.mapper.DepartmentMapper;

import CRM.service.IDepartmentService;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.stereotype.Service;

 

import java.util.List;

@Service

public class DepartmentServiceImpl implements IDepartmentService {

@Autowired

private DepartmentMapper mapper;

@Override

public int deleteByPrimaryKey(Long id) {

return mapper.deleteByPrimaryKey(id);

}

 

@Override

public int insert(Department record) {

return mapper.insert(record);

}

 

@Override

public Department selectByPrimaryKey(Long id) {

return mapper.selectByPrimaryKey(id);

}

 

@Override

public List<Department> selectAll() {

return mapper.selectAll();

}

 

@Override

public int updateByPrimaryKey(Department record) {

return mapper.updateByPrimaryKey(record);

}

 

@Override

public List queryforEmp() {

return mapper.queryforEmp();

}

}

EmployeeServiceImpl实现类

package CRM.service.impl;

 

import CRM.domain.Employee;

import CRM.domain.Role;

import CRM.mapper.EmployeeMapper;

import CRM.page.pageResult;

import CRM.query.queryobject;

import CRM.service.IEmployeeService;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.stereotype.Service;

 

import java.util.Collection;

import java.util.Collections;

import java.util.List;

@Service

public class EmployeeServiceImpl implements IEmployeeService {

@Autowired

private EmployeeMapper employeeMapper;

@Override

public int deleteByPrimaryKey(Long id) {

return employeeMapper.deleteByPrimaryKey(id);

}

 

@Override

public int insert(Employee record) {

int effort=employeeMapper.insert(record);

for (Role role : record.getList()) {

employeeMapper.insertRelation(record.getId(),role.getId());

}

return effort;

}

 

@Override

public Employee selectByPrimaryKey(Long id) {

return employeeMapper.selectByPrimaryKey(id);

}

 

@Override

public List<Employee> selectAll() {

return employeeMapper.selectAll();

}

 

@Override

public int updateByPrimaryKey(Employee record) {

int effort=employeeMapper.updateByPrimaryKey(record);

employeeMapper.deleteRelation(record.getId());

for (Role role : record.getList()) {

employeeMapper.insertRelation(record.getId(),role.getId());

}

return effort;

}

 

@Override

public Employee getElemployee(String username, String password) {

return employeeMapper.getElemployee(username,password);

}

 

@Override

public pageResult pageforpage(queryobject go) {

Integer count=employeeMapper.queryforpagecount(go);

if(count==0)

return new pageResult(0, Collections.EMPTY_LIST);

else{

List result=employeeMapper.queryforpage(go);

 

return new pageResult(count,result);

}

}

 

@Override

public Integer updateState(Long id) {

return employeeMapper.updateState(id);

}

 

@Override

public List<Long> queryByeid(Long eid) {

return employeeMapper.queryByeid(eid);

}

}

LogServiceImpl实现类

package CRM.service.impl;

 

import CRM.domain.Department;

import CRM.domain.Log;

import CRM.mapper.LogMapper;

import CRM.service.ILogService;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.stereotype.Service;

 

import java.util.List;

@Service

public class LogServiceImpl implements ILogService {

@Autowired

private LogMapper mapper;

@Override

public int deleteByPrimaryKey(Long id) {

return mapper.deleteByPrimaryKey(id);

}

 

@Override

public int insert(Log record) {

return mapper.insert(record);

}

 

@Override

public Log selectByPrimaryKey(Long id) {

return mapper.selectByPrimaryKey(id);

}

 

@Override

public List<Log> selectAll() {

return mapper.selectAll();

}

 

@Override

public int updateByPrimaryKey(Log record) {

return mapper.updateByPrimaryKey(record);

}

}

MenuServiceImpl实现类

package CRM.service.impl;

 

import CRM.domain.Menu;

import CRM.mapper.MenuMapper;

import CRM.service.IMenuService;

import com.fasterxml.jackson.annotation.JsonIgnoreProperties;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.stereotype.Service;

 

import java.util.List;

@Service

 

public class MenuServiceImpl implements IMenuService {

@Autowired

private MenuMapper mapper;

@Override

public List<Menu> queryforroot() {

return mapper.queryforroot();

}

}

PermissionServiceImpl实现类

package CRM.service.impl;

 

import CRM.domain.Permission;

import CRM.mapper.PermissionMapper;

import CRM.page.pageResult;

import CRM.query.permissionquery;

import CRM.service.IPermissionService;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.stereotype.Service;

 

import java.util.Collections;

import java.util.List;

@Service

public class PermissionServiceImpl implements IPermissionService {

@Autowired

private PermissionMapper mapper;

@Override

public int deleteByPrimaryKey(Long id) {

return mapper.deleteByPrimaryKey(id);

}

 

@Override

public int insert(Permission record) {

return mapper.insert(record);

}

 

@Override

public Permission selectByPrimaryKey(Long id) {

return mapper.selectByPrimaryKey(id);

}

 

@Override

public List<Permission> selectAll() {

return mapper.selectAll();

}

 

@Override

public int updateByPrimaryKey(Permission record) {

 

 

int effort=mapper.updateByPrimaryKey(record);

return effort;

}

 

@Override

public pageResult pageforpage(permissionquery qo) {

Long count=mapper.querypageCount(qo);

if(count==0)

return new pageResult(0, Collections.EMPTY_LIST);

else{

List result=mapper.querypage(qo);

 

return new pageResult(count.intValue(),result);

}

}

 

@Override

public List<String> queryByEid(Long id) {

return mapper.queryByEid(id);

}

}

RoleServiceImpl实现类

package CRM.service.impl;

 

import CRM.domain.Permission;

import CRM.domain.Role;

import CRM.mapper.RoleMapper;

import CRM.page.pageResult;

import CRM.query.rolequery;

import CRM.service.IRoleService;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.stereotype.Service;

 

import java.util.Collections;

import java.util.List;

@Service

public class RoleServiceimpl implements IRoleService {

@Autowired

private RoleMapper mapper;

@Override

public int deleteByPrimaryKey(Long id) {

mapper.deleterecord(id);

return mapper.deleteByPrimaryKey(id);

}

 

@Override

public int insert(Role record) {

int effort=mapper.insert(record);

 

for (Permission per : record.getList()) {

 

mapper.insertRelation(record.getId(),per.getId());

}

return effort;

}

 

@Override

public Role selectByPrimaryKey(Long id) {

return mapper.selectByPrimaryKey(id);

}

 

@Override

public List<Role> selectAll() {

return mapper.selectAll();

}

 

@Override

public int updateByPrimaryKey(Role record) {

int effort =mapper.updateByPrimaryKey(record);

mapper.deleterecord(record.getId());

for (Permission permission : record.getList()) {

mapper.insertRelation(record.getId(),permission.getId());

}

 

return effort;

}

 

@Override

public pageResult pageforpage(rolequery qo) {

Long count=mapper.querypageCount(qo);

if(count==0L)

return new pageResult(0, Collections.EMPTY_LIST);

else{

List result=mapper.querypage(qo);

 

return new pageResult(count.intValue(),result);

}

}

 

 

}

 

 

 

util工具类文件夹

AjaxResult类

package CRM.util;

 

import lombok.Getter;

import lombok.Setter;

 

@[email protected]

public class AjaxResult {

private Boolean success;

private String msg;

 

public AjaxResult(String msg) {

this.msg = msg;

}

 

public AjaxResult(Boolean success, String msg) {

this.success = success;

this.msg = msg;

}

}

 

CommonUtil类

package CRM.util;

 

import java.util.ArrayList;

import java.util.List;

 

public class CommonUtil {

//所有的权限表达式

public static List<String> allpermission=new ArrayList<>();

}

 

EmployeeContext类

package CRM.util;

 

import com.sun.org.apache.bcel.internal.generic.NEW;

 

import javax.servlet.http.HttpServletRequest;

 

public class EmployeeContext {

public static final String SESSION="EMPLOYEE IN SESSION";

public static final String PERSSIONSESSION="PERMISSION IN SESSION";

public static final String MENUSESSION="MENU IN SESSION";

// 创建当前线程对象

private static ThreadLocal<HttpServletRequest>local=new ThreadLocal<>();

// 把请求加入当前线程中

public static void set(HttpServletRequest request){

local.set(request);

}

// 获取当前线程

public static HttpServletRequest get(){

return local.get();

}

 

 

}

 

Logutil类

package CRM.util;

 

import CRM.domain.Employee;

import CRM.domain.Log;

import CRM.service.ILogService;

import com.fasterxml.jackson.core.JsonProcessingException;

import com.fasterxml.jackson.databind.ObjectMapper;

import org.aspectj.lang.JoinPoint;

import org.springframework.beans.factory.annotation.Autowired;

 

import javax.servlet.http.HttpServletRequest;

import java.util.Date;

 

public class Logutils {

//JoinPoint joinPoint获取连接点的信息

@Autowired

private ILogService service;

public void writelog(JoinPoint joinPoint){

if(joinPoint.getTarget() instanceof ILogService)

return;//防止自己切自己

Log log=new Log();

log.setOptime(new Date());

HttpServletRequest req=EmployeeContext.get();

Employee currentemployee=(Employee) req.getSession().getAttribute(EmployeeContext.SESSION);//获取当前用户

log.setOpuser(currentemployee);

String ip=req.getRemoteAddr();//获取IP地址

log.setOpip(ip);

String point=joinPoint.getTarget().getClass().getName();//目标对象

String name=joinPoint.getSignature().getName();//方法签名

String function=point+":"+name;

log.setFunction(function);

 

ObjectMapper mapper=new ObjectMapper();

String params=null;//从用户那里获取参数

try {

params=mapper.writeValueAsString(joinPoint.getArgs());

log.setParams(params);

} catch (JsonProcessingException e) {

e.printStackTrace();

}

service.insert(log);

}

}

 

PermissionUtil类

package CRM.util;

 

import CRM.domain.Employee;

import CRM.domain.Menu;

import CRM.domain.Permission;

import CRM.service.IPermissionService;

import com.alibaba.druid.sql.visitor.functions.If;

import org.apache.commons.lang.StringUtils;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.stereotype.Component;

 

import javax.servlet.http.HttpSession;

import java.util.List;

 

@Component

public class Permissionutil {

 

private static IPermissionService service;

//如果用户没有的菜单将从列表中删除

 

 

@Autowired

public void setService(IPermissionService service) {

Permissionutil.service = service;

}

 

public static Boolean checkPermission(String function) {

HttpSession session=EmployeeContext.get().getSession();

Employee currentuser=(Employee) session.getAttribute(EmployeeContext.SESSION);

if(currentuser.getAdmin()){

return true;

}

if(!currentuser.getState()){

return false;

}

//拿到function去所有权限中查询

//先获取所有的权限信息

if(CommonUtil.allpermission.size()==0){

//从数据库中查询所有的权限匹配到allpermission

List<Permission>list=service.selectAll();

for (Permission permission : list) {

CommonUtil.allpermission.add(permission.getResource());

}

}

//判断表达式是否需要权限控制

if(CommonUtil.allpermission.contains(function)){

//如果有,需要进行权限控制

//先拿用户的权限集合,从session获取

List<String>userPermission=(List<String>) EmployeeContext.get().getSession().getAttribute(EmployeeContext.PERSSIONSESSION);

//进行完全匹配

if(userPermission.contains(function)){

return true;

}else{

//ALL权限匹配

String allPermission=function.split(":")[0]+":ALL";

if(userPermission.contains(allPermission)){

return true;

}else {

 

return false;

}

}

 

}else{

//如果没有,不需要权限控制,放行

return true;

}

 

 

}

public static void checkMenuPermission(List<Menu> queryforroot) {

Menu menu;

//遍历第一层,看第一层哪些元素需要权限控制

for (int i=queryforroot.size()-1;i>=0;i--){

menu=queryforroot.get(i);

if(StringUtils.isNotBlank(menu.getFunction())){

//拿到用户的权限集合

List<String>userPermission=(List<String>) EmployeeContext.get().getSession().getAttribute(EmployeeContext.PERSSIONSESSION);

if(!userPermission.contains(menu.getFunction())){

queryforroot.remove(i);

}

}

//判断是否有子节点

if(menu.getChildren()!=null&&menu.getChildren().size()>0){

checkMenuPermission(menu.getChildren());

}

}

 

}

}

 

Controller层

departmentcontroller

package CRM.web.controller;

 

import CRM.domain.Department;

import CRM.service.IDepartmentService;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.stereotype.Controller;

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.ResponseBody;

 

import java.util.List;

 

@Controller

public class departmentcontroller {

@Autowired

private IDepartmentService service;

@RequestMapping("/department_queryForEmp")

@ResponseBody

public List<Department>queryForEmp(){

List result=null;

result=service.queryforEmp();

return result;

}

}

 

employeeController

package CRM.web.controller;

 

import CRM.domain.Employee;

import CRM.domain.Menu;

import CRM.domain.Permission;

import CRM.page.pageResult;

import CRM.query.queryobject;

import CRM.service.IEmployeeService;

import CRM.service.IMenuService;

import CRM.service.IPermissionService;

import CRM.util.AjaxResult;

import CRM.util.EmployeeContext;

import CRM.util.Permissionutil;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.stereotype.Controller;

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.ResponseBody;

 

import javax.servlet.http.HttpServletRequest;

import java.util.ArrayList;

import java.util.List;

 

@Controller

public class employeeController {

@Autowired

private IEmployeeService service;

@Autowired

private IPermissionService perservice;

@Autowired

private IMenuService menuService;

@RequestMapping("/employee")

public String employee(){

return "employee";

}

@RequestMapping("/login")

@ResponseBody

public AjaxResult getforlogin(String username, String password, HttpServletRequest req){

AjaxResult result=null;

EmployeeContext.set(req);

Employee emp=service.getElemployee(username,password);

 

if (emp!=null){

req.getSession().setAttribute(EmployeeContext.SESSION,emp);

//根据用户ID来查询来查询员工的所有权限集合放入到List<String>,放入到session

List<String>userPermission=perservice.queryByEid(emp.getId());

 

req.getSession().setAttribute(EmployeeContext.PERSSIONSESSION,userPermission);

// List<Menu>menu=menuService.queryforroot();

// req.getSession().setAttribute(EmployeeContext.MENUSESSION,menu);

//对系统菜单进行控制

List<Menu>menu=menuService.queryforroot();

if(emp.getAdmin()){

req.getSession().setAttribute(EmployeeContext.MENUSESSION,menu);

}else{

 

Permissionutil.checkMenuPermission(menu);

req.getSession().setAttribute(EmployeeContext.MENUSESSION,menu);

}

 

result=new AjaxResult(true,"登录成功");

}else {

 

result=new AjaxResult("用户名或者账号错误");

}

return result;

}

@RequestMapping("/employee_list")

@ResponseBody

public pageResult list(queryobject go){

pageResult result=null;

 

result=service.pageforpage(go);

 

return result;

}

 

@RequestMapping("/employee_update")

@ResponseBody

public AjaxResult update(Employee emp){

AjaxResult result=null;

try{

 

service.updateByPrimaryKey(emp);

 

result=new AjaxResult(true,"编辑成功");

}catch (Exception e){

 

result=new AjaxResult("编辑异常,请联系管理员");

}

return result;

}

@RequestMapping("/employee_delete")

@ResponseBody

public AjaxResult delete(Long id){

AjaxResult result=null;

try{

//service.deleteByPrimaryKey(id);

service.updateState(id);

 

result=new AjaxResult(true,"离职成功");

}catch (Exception e){

 

result=new AjaxResult("修改异常,请联系管理员");

}

return result;

}

@RequestMapping("/employee_save")

@ResponseBody

public AjaxResult save(Employee emp){

AjaxResult result=null;

try{

emp.setState(true);

emp.setPassword("888888");

emp.setAdmin(false);

service.insert(emp);

 

result=new AjaxResult(true,"保存成功");

}catch (Exception e){

 

result=new AjaxResult("保存异常,请联系管理员");

}

return result;

}

@RequestMapping("/role_queryByeid")

@ResponseBody

public List<Long>list(Long eid){

List<Long>result=null;

result=service.queryByeid(eid);

return result;

}

}

 

indexController

package CRM.web.controller;

 

import CRM.domain.Menu;

import CRM.service.IMenuService;

import CRM.util.EmployeeContext;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.stereotype.Controller;

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.ResponseBody;

 

import java.util.List;

 

@Controller

public class indexController {

@Autowired

private IMenuService service;

@RequestMapping("/index")

public String index(){

return "index";

}

@RequestMapping("/queryforoot")

@ResponseBody

public List<Menu>queryforoot(){

List<Menu>result=null;

// result=service.queryforroot();

//用户登录时就把菜单保存到session中,从session中进行获取

result=(List<Menu>) EmployeeContext.get().getSession().getAttribute(EmployeeContext.MENUSESSION);

return result;

}

}

 

PermissionController

package CRM.web.controller;

 

import CRM.page.pageResult;

import CRM.query.permissionquery;

import CRM.service.IPermissionService;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.stereotype.Controller;

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.ResponseBody;

 

@Controller

public class PermissionController {

@Autowired

private IPermissionService service;

@RequestMapping("/permission_list")

@ResponseBody

public pageResult list(permissionquery qo){

pageResult result=null;

result=service.pageforpage(qo);

return result;

}

@RequestMapping("/permission_queryByrid")

@ResponseBody

public pageResult queryByrid(permissionquery qo){

 

pageResult result=null;

result=service.pageforpage(qo);

return result;

}

}

 

RoleController

package CRM.web.controller;

 

import CRM.domain.Role;

import CRM.page.pageResult;

import CRM.query.rolequery;

import CRM.service.IRoleService;

import CRM.util.AjaxResult;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.stereotype.Controller;

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.ResponseBody;

 

import java.util.List;

 

@Controller

public class RoleController {

@Autowired

private IRoleService service;

@RequestMapping("/role_save")

@ResponseBody

public AjaxResult save(Role role){

AjaxResult result=null;

service.insert(role);

try{

result=new AjaxResult(true,"保存成功");

}catch (Exception e){

result=new AjaxResult("保存失败,请联系管理员");

}

return result;

}

@RequestMapping("/role")

 

public String index(){

return "role";

}

@RequestMapping("/role_list")

@ResponseBody

public pageResult list(rolequery qo){

pageResult result=null;

result=service.pageforpage(qo);

return result;

}

@RequestMapping("/role_update")

@ResponseBody

public AjaxResult update(Role role){

AjaxResult result=null;

service.updateByPrimaryKey(role);

try{

result=new AjaxResult(true,"更新成功");

}catch (Exception e){

result=new AjaxResult("更新失败,请联系管理员");

}

return result;

}

@RequestMapping("/role_delete")

@ResponseBody

public AjaxResult del(Long id){

 

AjaxResult result=null;

service.deleteByPrimaryKey(id);

try{

result=new AjaxResult(true,"删除成功");

}catch (Exception e){

result=new AjaxResult("删除失败失败,请联系管理员");

}

return result;

}

@RequestMapping("/role_queryForEmp")

@ResponseBody

public List<Role>list(){

List<Role> query=service.selectAll();

return query;

}

}

 

Intercepter拦截器文件夹

LoginIncepter

package CRM.web.intercepter;

 

import CRM.domain.Employee;

import CRM.util.EmployeeContext;

import CRM.util.Permissionutil;

import org.springframework.web.bind.annotation.ResponseBody;

import org.springframework.web.method.HandlerMethod;

import org.springframework.web.servlet.HandlerInterceptor;

import org.springframework.web.servlet.ModelAndView;

 

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

 

public class LoginIncepter implements HandlerInterceptor {

@Override

public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)throws Exception {

EmployeeContext.set(request);

Employee emp= (Employee) request.getSession().getAttribute(EmployeeContext.SESSION);

 

if(emp==null) {

response.sendRedirect("/login.jsp");

return false;

}

//已经登录了,再经权限检查

if(handler instanceof HandlerMethod){

HandlerMethod handlerobj=(HandlerMethod)handler;

//获取各个方法名

String function=handlerobj.getBean().getClass().getName()+":"+handlerobj.getMethod().getName();

//根据用户表达式查询用户是否有该权限

System.out.println(function);

Boolean flag= Permissionutil.checkPermission(function);

if(flag){

return true;

}else {

System.out.println("您被拦截了");

 

if(handlerobj.getMethod().isAnnotationPresent(ResponseBody.class)){

//如果是ajax请求

response.sendRedirect("/noPermission.json");

}else{

//如果是页面

response.sendRedirect("/noPermission.jsp");

}

 

return false;

}

}

 

 

return true;

}

 

@Override

public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception{

 

}

 

@Override

public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) {

 

}

}

resources资源文件夹

applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xmlns="http://www.springframework.org/schema/beans"

xmlns:context="http://www.springframework.org/schema/context"

xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"

xsi:schemaLocation="http://www.springframework.org/schema/beans

http://www.springframework.org/schema/beans/spring-beans.xsd

http://www.springframework.org/schema/context

http://www.springframework.org/schema/context/spring-context.xsd

http://www.springframework.org/schema/aop

http://www.springframework.org/schema/aop/spring-aop.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd">

<!--0.导入数据库连接-->

<!--组件注解解析器-->

<context:annotation-config></context:annotation-config>

<!--扫描包-->

<context:component-scan base-package="CRM"></context:component-scan>

<!--AOP自动代理-->

<aop:aspectj-autoproxy></aop:aspectj-autoproxy>

 

<!--1.配置数据库连接池-->

<context:property-placeholder location="classpath:db.properties" ></context:property-placeholder>

 

<bean id="datasource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close">

<property name="driverClassName" value="${jdbc.driverClassName}"></property>

<property name="url" value="${jdbc.url}"></property>

<property name="username" value="${jdbc.username}"></property>

<property name="password" value="${jdbc.password}"></property>

<property name="maxActive" value="${jdbc.maxActive}"></property>

</bean>

<!--2.sessionFactory-->

<bean id="sessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">

<!--2.1数据源引用-->

<property name="dataSource" ref="datasource"></property>

<!--2.2mybatis配置文件-->

<property name="configLocation" value="classpath:mybatis-config.xml"></property>

<!--2.3引用映射文件-->

<property name="mapperLocations" value="classpath:mapper/*Mapper.xml"></property>

 

</bean>

<!--3.事务管理器-->

<!--what:事务管理器的配置-->

<bean id="txmanager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">

<property name="dataSource" ref="datasource"></property>

</bean>

<!--4.事务模板-->

<!--when:事务增强的时机-->

<tx:advice id="txadvice" transaction-manager="txmanager">

<tx:attributes>

<tx:method name="query*" read-only="true" propagation="SUPPORTS"/>

<tx:method name="get*" read-only="true" propagation="SUPPORTS"/>

<tx:method name="list*" read-only="true" propagation="SUPPORTS"/>

<tx:method name="*" propagation="REQUIRED"></tx:method>

</tx:attributes>

</tx:advice>

<!--5.AOP相关配置-->

<bean id="logutils" class="CRM.util.Logutils"></bean>

<!--在哪些包下的哪些类进行增强-->

<aop:config>

<!--切入点-->

<aop:pointcut id="txpoint" expression="execution(* CRM.service.*.*(..))"></aop:pointcut>

<!--关联-->

<aop:advisor advice-ref="txadvice" pointcut-ref="txpoint"></aop:advisor>

<aop:aspect ref="logutils">

<aop:after method="writelog" pointcut="execution(* CRM.service.*.*(..))"></aop:after>

</aop:aspect>

</aop:config>

<!--6.开启扫描注解-->

<!--7.mapper接口的扫描器-->

<bean id="mapperscanner" class="org.mybatis.spring.mapper.MapperScannerConfigurer">

<property name="basePackage" value="CRM.mapper"></property>

</bean>

</beans>

db.properties

#key=value

jdbc.driverClassName=com.mysql.jdbc.Driver

jdbc.url=jdbc:mysql://localhost:3306/crm?rewriteBatchedStatements=true

jdbc.username=root

jdbc.password=123456

jdbc.maxActive=5

generatorConfig.xml(代码生成器)

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE generatorConfiguration

PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"

"http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">

<!-- 配置生成器 -->

<generatorConfiguration>

<properties resource="db.properties"></properties>

 

<context id="mysql" defaultModelType="hierarchical"

targetRuntime="MyBatis3Simple">

 

<!-- 自动识别数据库关键字,默认false,如果设置为true,根据SqlReservedWords中定义的关键字列表; 一般保留默认值,遇到数据库关键字(Java关键字),使用columnOverride覆盖 -->

<property name="autoDelimitKeywords" value="false" />

<!-- 生成的Java文件的编码 -->

<property name="javaFileEncoding" value="UTF-8" />

<!-- 格式化java代码 -->

<property name="javaFormatter"

value="org.mybatis.generator.api.dom.DefaultJavaFormatter" />

<!-- 格式化XML代码 -->

<property name="xmlFormatter"

value="org.mybatis.generator.api.dom.DefaultXmlFormatter" />

 

<!-- beginningDelimiterendingDelimiter:指明数据库的用于标记数据库对象名的符号,比如ORACLE就是双引号,MYSQL默认是`反引号; -->

<property name="beginningDelimiter" value="`" />

<property name="endingDelimiter" value="`" />

 

<commentGenerator>

<property name="suppressDate" value="true" />

<property name="suppressAllComments" value="true" />

</commentGenerator>

 

<!-- 必须要有的,使用这个配置链接数据库 @TODO:是否可以扩展 -->

<jdbcConnection driverClass="${jdbc.driverClassName}"

connectionURL="${jdbc.url}"

userId="${jdbc.username}"

password="${jdbc.password}">

</jdbcConnection>

 

<!-- 这里面可以设置property属性,每一个property属性都设置到配置的Driver -->

 

 

<!-- java类型处理器 用于处理DB中的类型到Java中的类型,默认使用JavaTypeResolverDefaultImpl; 注意一点,默认会先尝试使用IntegerLongShort等来对应DECIMAL

NUMERIC数据类型; -->

<javaTypeResolver

type="org.mybatis.generator.internal.types.JavaTypeResolverDefaultImpl">

<!-- true:使用BigDecimal对应DECIMAL NUMERIC数据类型 false:默认, scale>0;length>18:使用BigDecimal;

scale=0;length[10,18]:使用Long scale=0;length[5,9]:使用Integer scale=0;length<5:使用Short -->

<property name="forceBigDecimals" value="false" />

</javaTypeResolver>

 

 

<!-- java模型创建器,是必须要的元素 负责:1key类(见contextdefaultModelType);2java类;3,查询类

targetPackage:生成的类要放的包,真实的包受enableSubPackages属性控制; targetProject:目标项目,指定一个存在的目录下,生成的内容会放到指定目录中,如果目录不存在,MBG不会自动建目录 -->

<javaModelGenerator targetPackage="CRM.domain"

targetProject="src/main/java">

<!-- for MyBatis3/MyBatis3Simple 自动为每一个生成的类创建一个构造方法,构造方法包含了所有的field;而不是使用setter -->

<property name="constructorBased" value="false" />

 

<!-- for MyBatis3 / MyBatis3Simple 是否创建一个不可变的类,如果为true, 那么MBG会创建一个没有setter方法的类,取而代之的是类似constructorBased的类 -->

<property name="immutable" value="false" />

 

<!-- 设置是否在getter方法中,对String类型字段调用trim()方法 -->

<property name="trimStrings" value="true" />

</javaModelGenerator>

 

<!-- 生成SQL mapXML文件生成器, 注意,在Mybatis3之后,我们可以使用mapper.xml文件+Mapper接口(或者不用mapper接口),

或者只使用Mapper接口+Annotation,所以,如果 javaClientGenerator配置中配置了需要生成XML的话,这个元素就必须配置

targetPackage/targetProject:javaModelGenerator -->

<sqlMapGenerator targetPackage="mapper"

targetProject="src/main/resources">

<!-- targetPackage的基础上,根据数据库的schema再生成一层package,最终生成的类放在这个package下,默认为false -->

<property name="enableSubPackages" value="true" />

</sqlMapGenerator>

 

 

<!-- 对于mybatis来说,即生成Mapper接口,注意,如果没有配置该元素,那么默认不会生成Mapper接口 targetPackage/targetProject:javaModelGenerator

type:选择怎么生成mapper接口(在MyBatis3/MyBatis3Simple下): 1ANNOTATEDMAPPER:会生成使用Mapper接口+Annotation的方式创建(SQL生成在annotation中),不会生成对应的XML

2MIXEDMAPPER:使用混合配置,会生成Mapper接口,并适当添加合适的Annotation,但是XML会生成在XML中; 3XMLMAPPER:会生成Mapper接口,接口完全依赖XML

注意,如果contextMyBatis3Simple:只支持ANNOTATEDMAPPERXMLMAPPER -->

<javaClientGenerator targetPackage="CRM.mapper"

type="XMLMAPPER" targetProject="src/main/java">

<!-- targetPackage的基础上,根据数据库的schema再生成一层package,最终生成的类放在这个package下,默认为false -->

<property name="enableSubPackages" value="true" />

 

<!-- 可以为所有生成的接口添加一个父接口,但是MBG只负责生成,不负责检查 <property name="rootInterface"

value=""/> -->

</javaClientGenerator>

 

<table tableName="menu">

<!-- 参考 javaModelGenerator constructorBased属性 -->

<property name="constructorBased" value="false" />

<generatedKey column="id" sqlStatement="JDBC" />

</table>

</context>

</generatorConfiguration>

log4j.properties

# Global logging configuration

log4j.rootLogger=ERROR, stdout

# MyBatis logging configuration... //为具体操作数据库的那个xml所在的路径

log4j.logger.CRM.mapper=TRACE

# Console output...

log4j.appender.stdout=org.apache.log4j.ConsoleAppender

log4j.appender.stdout.layout=org.apache.log4j.PatternLayout

log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n

mvc.xml

<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xmlns:p="http://www.springframework.org/schema/p"

xmlns:context="http://www.springframework.org/schema/context"

xmlns:aop="http://www.springframework.org/schema/aop"

xmlns:jee="http://www.springframework.org/schema/jee"

xmlns:mvc="http://www.springframework.org/schema/mvc"

xsi:schemaLocation="

http://www.springframework.org/schema/beans

http://www.springframework.org/schema/beans/spring-beans.xsd

http://www.springframework.org/schema/context

http://www.springframework.org/schema/context/spring-context.xsd

http://www.springframework.org/schema/jee

http://www.springframework.org/schema/jee/spring-jee.xsd

http://www.springframework.org/schema/aop

http://www.springframework.org/schema/aop/spring-aop.xsd

http://www.springframework.org/schema/mvc

http://www.springframework.org/schema/mvc/spring-mvc.xsd">

<!--1.开启注解扫描-->

<context:component-scan base-package="CRM"></context:component-scan>

<!--2.支持注解驱动-->

<mvc:annotation-driven></mvc:annotation-driven>

<!--3.配置视图解析器-->

<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">

<property name="prefix" value="/WEB-INF/views/"></property>

<property name="suffix" value=".jsp"></property>

</bean>

<!--4.处理静态资源-->

<mvc:default-servlet-handler></mvc:default-servlet-handler>

<!--5.加载appicationContext.xml文件-->

<import resource="classpath:applicationContext.xml"></import>

 

<!--6 登录拦截-->

<mvc:interceptors>

<mvc:interceptor>

<mvc:mapping path="/**"></mvc:mapping>

 

<mvc:exclude-mapping path="/login"></mvc:exclude-mapping>

<bean class= "CRM.web.intercepter.LoginIncepter"></bean>

</mvc:interceptor>

</mvc:interceptors>

</beans>

mybatis-config.xml

<?xml version="1.0" encoding="UTF-8" ?>

<!DOCTYPE configuration

PUBLIC "-//mybatis.org//DTD Config 3.0//EN"

"http://mybatis.org/dtd/mybatis-3-config.dtd">

<configuration>

<settings>

<!--启用延迟加载-->

<setting name="lazyLoadingEnabled" value="true"/>

<!--禁用积极延迟加载-->

<setting name="aggressiveLazyLoading" value="false"/>

<!--延迟加载触发的方法-->

<setting name="lazyLoadTriggerMethods" value="clone"/>

<!--日志管理-->

<setting name="logImpl" value="LOG4J"/>

</settings>

</configuration>

 

 

 

 

mapper资源文件夹

DepartmentMapper.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" >

<mapper namespace="CRM.mapper.DepartmentMapper" >

<resultMap id="BaseResultMap" type="CRM.domain.Department" >

<id column="id" property="id" jdbcType="BIGINT" />

<result column="sn" property="sn" jdbcType="VARCHAR" />

<result column="name" property="name" jdbcType="VARCHAR" />

 

<result column="state" property="state" jdbcType="BIT" />

</resultMap>

<delete id="deleteByPrimaryKey" parameterType="java.lang.Long" >

delete from department

where id = #{id,jdbcType=BIGINT}

</delete>

<insert id="insert" parameterType="CRM.domain.Department" useGeneratedKeys="true" keyProperty="id" >

insert into department (sn, name, state)

values (#{sn,jdbcType=VARCHAR}, #{name,jdbcType=VARCHAR}, #{state,jdbcType=BIT})

</insert>

<update id="updateByPrimaryKey" parameterType="CRM.domain.Department" >

update department

set sn = #{sn,jdbcType=VARCHAR},

name = #{name,jdbcType=VARCHAR},

manager_id = #{managerId,jdbcType=BIGINT},

parent_id = #{parentId,jdbcType=BIGINT},

state = #{state,jdbcType=BIT}

where id = #{id,jdbcType=BIGINT}

</update>

<select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.Long" >

select id, sn, name, manager_id, parent_id, state

from department

where id = #{id,jdbcType=BIGINT}

</select>

<select id="selectAll" resultMap="BaseResultMap" >

select id, sn, name, manager_id, parent_id, state

from department

</select>

<select id="queryforEmp" resultType="CRM.domain.Department">

select id,name from department

</select>

</mapper>

 

EmployeeMapper.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" >

<mapper namespace="CRM.mapper.EmployeeMapper" >

<resultMap id="BaseResultMap" type="CRM.domain.Employee" >

<id column="id" property="id" jdbcType="BIGINT" />

<result column="username" property="username" jdbcType="VARCHAR" />

<result column="realname" property="realname" jdbcType="VARCHAR"></result>

<result column="password" property="password" jdbcType="VARCHAR" />

<result column="tel" property="tel" jdbcType="VARCHAR" />

<result column="email" property="email" jdbcType="VARCHAR" />

<result column="inputtime" property="inputtime" jdbcType="DATE" />

<result column="state" property="state" jdbcType="BIT" />

<result column="admin" property="admin" jdbcType="BIT" />

<association property="dept" javaType="CRM.domain.Department">

<id column="d_id" property="id"></id>

<result column="d_name" property="name"></result>

</association>

<!--<result column="dept_id" property="dept_id"></result>-->

</resultMap>

<delete id="deleteByPrimaryKey" parameterType="java.lang.Long" >

delete from employee

where id = #{id,jdbcType=BIGINT}

</delete>

<insert id="insert" parameterType="CRM.domain.Employee" useGeneratedKeys="true" keyProperty="id" >

insert into employee (username, realname, password, tel, email,dept_id,inputtime,

state, admin)

values (#{username,jdbcType=VARCHAR}, #{realname,jdbcType=VARCHAR}, #{password,jdbcType=VARCHAR},

#{tel,jdbcType=VARCHAR}, #{email,jdbcType=VARCHAR},#{dept.id},#{inputtime,jdbcType=DATE},

#{state,jdbcType=BIT}, #{admin,jdbcType=BIT})

</insert>

<update id="updateByPrimaryKey" parameterType="CRM.domain.Employee" >

update employee

set username = #{username,jdbcType=VARCHAR},

realname = #{realname,jdbcType=VARCHAR},

 

tel = #{tel,jdbcType=VARCHAR},

email = #{email,jdbcType=VARCHAR},

dept_id=#{dept.id},

inputtime = #{inputtime,jdbcType=DATE}

 

where id = #{id,jdbcType=BIGINT}

</update>

<update id="updateState" parameterType="long">

update employee set state=false WHERE id=#{id}

</update>

<select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.Long" >

select id, username, realname, password, tel, email, dept_id, inputtime, state, admin

from employee

where id = #{id,jdbcType=BIGINT}

</select>

<select id="selectAll" resultMap="BaseResultMap" >

select id, username, realname, password, tel, email, dept_id, inputtime, state, admin

from employee

</select>

<select id="getElemployee" resultType="CRM.domain.Employee">

SELECT *FROM employee WHERE username=#{username} AND password=#{password}

</select>

<sql id="search_sql">

<where>

<if test="keyword!=null">

(

e.username LIKE CONCAT('%',#{keyword},'%')

OR e.tel LIKE CONCAT('%',#{keyword},'%')

OR e.email LIKE CONCAT('%',#{keyword},'%')

OR e.realname LIKE CONCAT('%',#{keyword},'%')

)

</if>

</where>

</sql>

<select id="queryforpagecount" resultType="int">

SELECT COUNT(*) FROM employee e

<include refid="search_sql"></include>

</select>

<select id="queryforpage" resultMap="BaseResultMap">

SELECT e.id,e.realname,e.username, e.tel,e.email,

e.inputtime,e.state,e.admin,d.id as d_id,d.name as d_name

from employee e LEFT JOIN department d on (d.id=e.dept_id)

<include refid="search_sql"></include>

<if test="page!=null">

LIMIT #{start},#{rows}

</if>

</select>

<insert id="insertRelation">

INSERT INTO emp_role(r_id,e_id)VALUES (#{rid},#{eid})

</insert>

<select id="queryByeid" resultType="long">

SELECT r_id FROM emp_role WHERE e_id=#{eid}

</select>

<delete id="deleteRelation">

DELETE FROM emp_role WHERE e_id=#{eid}

</delete>

</mapper>

 

LogMapper.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" >

<mapper namespace="CRM.mapper.LogMapper" >

<resultMap id="BaseResultMap" type="CRM.domain.Log" >

<id column="id" property="id" jdbcType="BIGINT" />

 

<result column="opTime" property="optime" jdbcType="TIMESTAMP" />

<result column="opIp" property="opip" jdbcType="VARCHAR" />

<result column="function" property="function" jdbcType="VARCHAR" />

<result column="params" property="params" jdbcType="VARCHAR" />

<!--<association property="opuser" javaType="CRM.domain.Employee" columnPrefix="e_">-->

<!--<id column="id" property="id" jdbcType="BIGINT" />-->

<!--<result column="realname" property="realname"></result>-->

<!--</association>-->

</resultMap>

<delete id="deleteByPrimaryKey" parameterType="java.lang.Long" >

delete from log

where id = #{id,jdbcType=BIGINT}

</delete>

<insert id="insert" parameterType="CRM.domain.Log" useGeneratedKeys="true" keyProperty="id" keyColumn="id">

insert into log (opUser_id, opTime, opIp,

function, params)

values (#{opuser.id,jdbcType=BIGINT}, #{optime,jdbcType=TIMESTAMP}, #{opip,jdbcType=VARCHAR},

#{function,jdbcType=VARCHAR}, #{params,jdbcType=VARCHAR})

</insert>

<update id="updateByPrimaryKey" parameterType="CRM.domain.Log" >

update log

set opUser_id = #{opuser.id,jdbcType=BIGINT},

opTime = #{optime,jdbcType=TIMESTAMP},

opIp = #{opip,jdbcType=VARCHAR},

function = #{function,jdbcType=VARCHAR},

params = #{params,jdbcType=VARCHAR}

where id = #{id,jdbcType=BIGINT}

</update>

<select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.Long" >

select id, opUser_id, opTime, opIp, function, params

from log

where id = #{id,jdbcType=BIGINT}

</select>

<select id="selectAll" resultMap="BaseResultMap" >

select id, opUser_id, opTime, opIp, function, params

from log

</select>

</mapper>

 

MenuMapper.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" >

<mapper namespace="CRM.mapper.MenuMapper" >

<resultMap id="BaseResultMap" type="CRM.domain.Menu" >

<id column="id" property="id" jdbcType="BIGINT" />

<result column="text" property="text" jdbcType="VARCHAR" />

<result column="iconCls" property="iconCls" jdbcType="VARCHAR" />

<result column="checked" property="checked" jdbcType="BIT" />

<result column="state" property="state" jdbcType="VARCHAR" />

<result column="function" property="function"></result>

<result column="attributes" property="attributes" jdbcType="VARCHAR" />

<collection property="children" ofType="CRM.domain.Menu" column="id" select="CRM.mapper.MenuMapper.queryBymid"></collection>

</resultMap>

<delete id="deleteByPrimaryKey" parameterType="java.lang.Long" >

delete from menu

where id = #{id,jdbcType=BIGINT}

</delete>

<insert id="insert" parameterType="CRM.domain.Menu" useGeneratedKeys="true" keyProperty="id" >

insert into menu (text, iconCls, checked,

state, attributes, parent_id

)

values (#{text,jdbcType=VARCHAR}, #{iconcls,jdbcType=VARCHAR}, #{checked,jdbcType=BIT},

#{state,jdbcType=VARCHAR}, #{attributes,jdbcType=VARCHAR}, #{parentId,jdbcType=BIGINT}

)

</insert>

<update id="updateByPrimaryKey" parameterType="CRM.domain.Menu" >

update menu

set text = #{text,jdbcType=VARCHAR},

iconCls = #{iconcls,jdbcType=VARCHAR},

checked = #{checked,jdbcType=BIT},

state = #{state,jdbcType=VARCHAR},

attributes = #{attributes,jdbcType=VARCHAR},

parent_id = #{parentId,jdbcType=BIGINT}

where id = #{id,jdbcType=BIGINT}

</update>

<select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.Long" >

select id, text, iconCls, checked, state, attributes, parent_id

from menu

where id = #{id,jdbcType=BIGINT}

</select>

<select id="selectAll" resultMap="BaseResultMap" >

select id, text, iconCls, checked, state, attributes, parent_id

from menu

</select>

<select id="queryforroot" resultMap="BaseResultMap">

SELECT *FROM menu WHERE parent_id is null

</select>

<select id="queryBymid" resultMap="BaseResultMap">

SELECT *FROM menu WHERE parent_id=#{pid}

</select>

</mapper>

 

PermissionMapper.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" >

<mapper namespace="CRM.mapper.PermissionMapper" >

<resultMap id="BaseResultMap" type="CRM.domain.Permission" >

<id column="id" property="id" jdbcType="BIGINT" />

<result column="name" property="name" jdbcType="VARCHAR" />

<result column="resource" property="resource" jdbcType="VARCHAR" />

</resultMap>

<delete id="deleteByPrimaryKey" parameterType="java.lang.Long" >

delete from permission

where id = #{id,jdbcType=BIGINT}

</delete>

<insert id="insert" parameterType="CRM.domain.Permission" useGeneratedKeys="true" keyProperty="id" >

insert into permission (name, resource)

values (#{name,jdbcType=VARCHAR}, #{resource,jdbcType=VARCHAR})

</insert>

<update id="updateByPrimaryKey" parameterType="CRM.domain.Permission" >

update permission

set name = #{name,jdbcType=VARCHAR},

resource = #{resource,jdbcType=VARCHAR}

where id = #{id,jdbcType=BIGINT}

</update>

<select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.Long" >

select id, name, resource

from permission

where id = #{id,jdbcType=BIGINT}

</select>

<select id="selectAll" resultMap="BaseResultMap" >

select id, name, resource

from permission

</select>

<sql id="where_sql">

<where>

<if test="rid!=null">

id in (SELECT p_id FROM role_permission WHERE r_id=#{rid})

</if>

</where>

</sql>

<select id="querypageCount" resultType="long">

SELECT COUNT(*) FROM permission

<include refid="where_sql"></include>

</select>

<select id="querypage" resultMap="BaseResultMap">

SELECT *FROM permission

<include refid="where_sql"></include>

<if test="page!=null">

LIMIT #{start},#{rows}

</if>

</select>

<delete id="deleterecord">

DELETE from role_permission WHERE r_id=#{rid}

</delete>

<select id="queryByEid" resultType="string">

SELECT resource FROM permission p LEFT JOIN role_permission mid ON(p.id=mid.p_id) LEFT JOIN role r ON (r.id=mid.r_id) WHERE r.id in(SELECT r_id FROM emp_role WHERE e_id=#{id})

</select>

</mapper>

 

RoleMapper.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" >

<mapper namespace="CRM.mapper.RoleMapper" >

<resultMap id="BaseResultMap" type="CRM.domain.Role" >

<id column="id" property="id" jdbcType="BIGINT" />

<result column="name" property="name" jdbcType="VARCHAR" />

<result column="sn" property="sn" jdbcType="VARCHAR" />

</resultMap>

<delete id="deleteByPrimaryKey" parameterType="java.lang.Long" >

delete from role

where id = #{id,jdbcType=BIGINT}

</delete>

<insert id="insert" parameterType="CRM.domain.Role" useGeneratedKeys="true" keyProperty="id" >

insert into role (name, sn)

values (#{name,jdbcType=VARCHAR}, #{sn,jdbcType=VARCHAR})

</insert>

<insert id="insertRelation">

INSERT INTO role_permission(r_id,p_id)VALUES (#{rid},#{pid})

</insert>

<update id="updateByPrimaryKey" parameterType="CRM.domain.Role" >

update role

set name = #{name,jdbcType=VARCHAR},

sn = #{sn,jdbcType=VARCHAR}

where id = #{id,jdbcType=BIGINT}

</update>

<select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.Long" >

select id, name, sn

from role

where id = #{id,jdbcType=BIGINT}

</select>

<select id="selectAll" resultMap="BaseResultMap" >

select id, name, sn

from role

</select>

<sql id="where_sql">

<where>

<if test="keyword!=null">

(

name LIKE CONCAT('%',#{keyword},'%')

OR sn LIKE CONCAT('%',#{keyword},'%')

OR id LIKE CONCAT('%',#{keyword},'%')

 

)

</if>

</where>

</sql>

<select id="querypageCount" resultType="long">

SELECT COUNT(*) FROM role

<include refid="where_sql"></include>

</select>

<select id="querypage" resultMap="BaseResultMap">

SELECT *FROM role

<include refid="where_sql"></include>

<if test="page!=null">

LIMIT #{start},#{rows}

</if>

</select>

<delete id="deleterecord">

DELETE from role_permission WHERE r_id=#{rid}

</delete>

</mapper>

 

 

 

 

前端页面

style.css

html, body, div, span, applet, object, iframe,

h1, h2, h3, h4, h5, h6, p, blockquote, pre,

a, abbr, acronym, address, big, cite, code,

del, dfn, em, img, ins, kbd, q, s, samp,

small, strike, strong, sub, sup, tt, var,

b, u, i, center,

dl, dt, dd, ol, ul, li,

fieldset, form, label, legend,

table, caption, tbody, tfoot, thead, tr, th, td,

article, aside, canvas, details, embed,

figure, figcaption, footer, header, hgroup,

menu, nav, output, ruby, section, summary,

time, mark, audio, video {

margin: 0;

padding: 0;

border: 0;

font-size: 100%;

font: inherit;

vertical-align: baseline;

}

 

article, aside, details, figcaption, figure,

footer, header, hgroup, menu, nav, section {

display: block;

}

 

body {

line-height: 1;

}

 

ol, ul {

list-style: none;

}

 

blockquote, q {

quotes: none;

}

 

blockquote:before, blockquote:after,

q:before, q:after {

content: '';

content: none;

}

 

table {

border-collapse: collapse;

border-spacing: 0;

}

/*

* Copyright (c) 2012-2013 Thibaut Courouble

* http://www.cssflow.com

*

* Licensed under the MIT License:

* http://www.opensource.org/licenses/mit-license.php

*/

body {

font: 13px/20px 'Lucida Grande', Tahoma, Verdana, sans-serif;

color: #404040;

background: #0ca3d2;

}

 

.container {

margin: 80px auto;

width: 640px;

}

 

.login {

position: relative;

margin: 0 auto;

padding: 20px 20px 20px;

width: 310px;

background: white;

border-radius: 3px;

-webkit-box-shadow: 0 0 200px rgba(255, 255, 255, 0.5), 0 1px 2px rgba(0, 0, 0, 0.3);

box-shadow: 0 0 200px rgba(255, 255, 255, 0.5), 0 1px 2px rgba(0, 0, 0, 0.3);

}

.login:before {

content: '';

position: absolute;

top: -8px;

right: -8px;

bottom: -8px;

left: -8px;

z-index: -1;

background: rgba(0, 0, 0, 0.08);

border-radius: 4px;

}

h1 {

margin: -20px -20px 21px;

line-height: 40px;

font-size: 15px;

font-weight: bold;

color: #555;

text-align: center;

text-shadow: 0 1px white;

background: #f3f3f3;

border-bottom: 1px solid #cfcfcf;

border-radius: 3px 3px 0 0;

/*background-image: -webkit-linear-gradient(top, whiteffd, #eef2f5);*/

/*background-image: -moz-linear-gradient(top, whiteffd, #eef2f5);*/

/*background-image: -o-linear-gradient(top, whiteffd, #eef2f5);*/

/*background-image: linear-gradient(to bottom, whiteffd, #eef2f5);*/

-webkit-box-shadow: 0 1px whitesmoke;

box-shadow: 0 1px whitesmoke;

}

.login p {

margin: 20px 0 0;

}

.login p:first-child {

margin-top: 0;

}

.login input[type=text], .login input[type=password] {

width: 278px;

}

.login p.remember_me {

float: left;

line-height: 31px;

}

.login p.remember_me label {

font-size: 12px;

color: #777;

cursor: pointer;

}

.login p.remember_me input {

position: relative;

bottom: 1px;

margin-right: 4px;

vertical-align: middle;

}

.login p.submit {

text-align: center;

}

 

.login-help {

margin: 20px 0;

font-size: 11px;

color: white;

text-align: center;

text-shadow: 0 1px #2a85a1;

font-size:12px;

}

.login-help a {

color: #cce7fa;

text-decoration: none;

}

.login-help a:hover {

text-decoration: underline;

}

 

:-moz-placeholder {

color: #c9c9c9 !important;

font-size: 13px;

}

 

::-webkit-input-placeholder {

color: #ccc;

font-size: 13px;

}

 

input {

font-family: 'Lucida Grande', Tahoma, Verdana, sans-serif;

font-size: 14px;

}

 

input[type=text], input[type=password] {

margin: 5px;

padding: 0 10px;

width: 200px;

height: 34px;

color: #404040;

background: white;

border: 1px solid;

border-color: #c4c4c4 #d1d1d1 #d4d4d4;

border-radius: 2px;

outline: 5px solid #eff4f7;

-moz-outline-radius: 3px;

-webkit-box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.12);

box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.12);

}

input[type=text]:focus, input[type=password]:focus {

border-color: #7dc9e2;

outline-color: #dceefc;

outline-offset: 0;

}

 

input[type=button] {

margin-left:15px;

margin-right:15px;

padding: 0 18px;

height: 29px;

font-size: 12px;

font-weight: bold;

color: #527881;

text-shadow: 0 1px #e3f1f1;

background: #cde5ef;

border: 1px solid;

border-color: #b4ccce #b3c0c8 #9eb9c2;

border-radius: 16px;

outline: 0;

-webkit-box-sizing: content-box;

-moz-box-sizing: content-box;

box-sizing: content-box;

background-image: -webkit-linear-gradient(top, #edf5f8, #cde5ef);

background-image: -moz-linear-gradient(top, #edf5f8, #cde5ef);

background-image: -o-linear-gradient(top, #edf5f8, #cde5ef);

background-image: linear-gradient(to bottom, #edf5f8, #cde5ef);

-webkit-box-shadow: inset 0 1px white, 0 1px 2px rgba(0, 0, 0, 0.15);

box-shadow: inset 0 1px white, 0 1px 2px rgba(0, 0, 0, 0.15);

}

input[type=button]:active {

background: #cde5ef;

border-color: #9eb9c2 #b3c0c8 #b4ccce;

-webkit-box-shadow: inset 0 0 3px rgba(0, 0, 0, 0.2);

box-shadow: inset 0 0 3px rgba(0, 0, 0, 0.2);

}

 

.lt-ie9 input[type=text], .lt-ie9 input[type=password] {

line-height: 34px;

}

 

 

employee.js

$(function () {

//1.抽取变量

var empDatagrid,editAnddel,empDialog,empForm,empFormId;

empDatagrid=$("#emp_datagrid");

editAnddel=$("#edit,#del");

empDialog=$("#emp_dialog");

empForm=$("#emp_form");

empFormId=$("#emp_form [name='id']");

//2.将所有方法统一的管理

var cmdway={

add:function () {

empDialog.dialog("open")

empDialog.dialog("setTitle","新增")

empForm.form("clear")

},

save:function () {

//空格是子孙后代

//大于是父亲儿子关系

var id=empFormId.val()

var url;

if(id){

url="/employee_update"

}else{

url="/employee_save"

}

//发送异步请求

empForm.form("submit",{

 

url:url,

onSubmit:function(param){

var ids=$("#role").combobox("getValues");

for (var i=0;i<ids.length;i++)

param["list["+i+"].id"]=ids[i];

},

success:function (data) {

data=$.parseJSON(data)

if (data.success){

$.messager.alert("温馨提示",data.msg,"info",function () {

//关闭对话框

empDialog.dialog("close");

//刷新数据表格

empDatagrid.datagrid("load");

});

}else{

$.messager.alert("温馨提示",data.msg,"info")

}

}

})

},

edit:function() {

//获取选中的数据

var rowdata=empDatagrid.datagrid("getSelected")

if(rowdata){

empDialog.dialog("open")

empDialog.dialog("setTitle","编辑")

empForm.form("clear")

var html=$.ajax({

url:"/role_queryByeid?eid="+rowdata.id,

async:false

}).responseText

//转化为字符串格式

html=$.parseJSON(html)

//回显角色

$("#role").combobox("setValues",html)

//特殊属性的获取(基于同名匹配规则)

if(rowdata.dept){

rowdata["dept.id"]=rowdata.dept.id;

}

empForm.form("load",rowdata)

}else{

$.messager.alert("温馨提示,","请选中一条数据","info")

}

 

},

del:function () {

//获取选中的数据

var rowdata=empDatagrid.datagrid("getSelected")

if(rowdata){

$.messager.confirm("温馨提示","您确定要修改这条数据的状态吗",function (yes) {

if(yes){

$.get("/employee_delete?id="+rowdata.id,function (data) {

if(data.success) {

$.messager.alert("温馨提示", data.msg, "info", function () {

empDatagrid.datagrid("reload")

})

}else {

$.messager.alert("温馨提示,",data.msg,"info")

}

},"json")

}

})

 

}

else{

$.messager.alert("温馨提示,","请选中一条数据","info")

}

},

refresh:function (){

empDatagrid.datagrid("reload");

 

},

cancel:function () {

empDialog.dialog("close");

},

searchBtn:function () {

var value=$("[name='keyword']").val();

empDatagrid.datagrid("load",{

keyword:value

})

}

}

//3.对按钮进行统一的监听

$('a').on("click",function () {

var cmd=$(this).data("cmd");

 

switch(cmd){

case "save":cmdway.save();break;

case "edit":cmdway.edit();break;

case "refresh":cmdway.refresh();break;

case "searchBtn":cmdway.searchBtn();break;

case "add":cmdway.add();break;

case "del":cmdway.del();break;

case "cancel":cmdway.cancel();break;

}

 

})

empDatagrid.datagrid({

fit:true,

url:'/employee_list',

fitColumns:true,

rownumbers:true,

pagination:true,

toolbar:"#emp_datagrid_tb",

pageList:[1,2,3,5,10,20,30,40,50],

singleSelect:true,

onClickRow:function(rowIndex,rowData){

if(!rowData.state){

editAnddel.linkbutton("disable")

 

}else {

editAnddel.linkbutton("enable")

}

},

columns:[

[

{field:"username",align:'center',title:'用户名' ,width:1},

{field:"realname",align:'center',title:'真实名称',width:1},

{field:"tel",align:'center',title:'电话',width:1},

{field:"email",align:'center',title:'邮箱',width:1},

{field:"dept",align:'center',title:'部门',width:1,formatter:deptformatter},

{field:"inputtime",align:'center',title:'入职时间',width:1},

{field:"state",align:'center',title:'状态',width:1,formatter:stateformatter},

{field:"admin",align:'center',title:'是否超级管理员',width:1,formatter:adminformatter},

]

],

})

empDialog.dialog({

width:280,

height:290,

buttons:"#emp_dialog_bt",

closed:true

})

 

})

function deptformatter(value,record,index) {

return value?value.name:"";

}

function stateformatter(value,record,index) {

if(value){return "<font color='#7fffd4'>在职</font>";}

 

else {return "<font color='#663399'>离职</font>";}

}

function adminformatter(value,record,index) {

if(value){ return "<font color='#7fffd4'></font>";}

 

else {return "<font color='#663399'></font>";}

}

index.js

$(function(){

$(document).keyup(function (event) {

if(event.keyCode==13)

submitWay()

})

$("#menuTree").tree({

url:'/queryforoot',

onClick:function(node){

if(node.attributes){

node.attributes=$.parseJSON(node.attributes)

}

//在选项中添加新面板

var myTab = $("#myTabs");

//在选项卡中是否已经有该节点的面板.

if(myTab.tabs("exists",node.text)){

//选中面板

myTab.tabs("select",node.text);

}else{

myTab.tabs("add",{

title:node.text,

closable:true,

//href:node.attributes.url

content:"<iframe src='"+node.attributes.url+"' style='width:100%;height:100%' frameborder=0></iframe>"

});

}

}

});

 

});

 

function resetWay(){

$("form input[name]").val("");

}

function submitWay(){

 

$.post("/login",$("form").serialize(),function (data) {

 

if(data.success){

alert(data.msg)

window.location.href="/index"

}else {

alert(data.msg)

}

},"json")

}

 

 

 

role.js

$(function () {

//1.抽取变量

var roleDatagrid,editAnddel,roleDialog,roleForm,roleFormId,allpermission,selfpermission;

roleDatagrid=$("#role_datagrid");

editAnddel=$("#edit,#del");

roleDialog=$("#role_dialog");

roleForm=$("#role_form");

roleFormId=$("#role_form [name='id']");

allpermission=$("#allpermission");

selfpermission=$("#selfpermission");

//2.将所有方法统一的管理

var cmdway={

add:function () {

roleDialog.dialog("open")

roleDialog.dialog("setTitle","新增")

$("[name='id'],[name='sn'],[name='name']").val("");

//加载本地空数据

selfpermission.datagrid("loadData",{rows:[]})

},

save:function () {

//空格是子孙后代

//大于是父亲儿子关系

var id=roleFormId.val()

var url;

if(id){

url="/role_update"

}else{

url="/role_save"

}

//发送异步请求

roleForm.form("submit",{

 

url:url,

//可以给表单添加额外的参数

onSubmit:function (param) {

var rows=selfpermission.datagrid("getRows");

for(var i=0;i<rows.length;i++){

param["list["+i+"].id"]=rows[i].id;

 

}

},

success:function (data) {

data=$.parseJSON(data)

if (data.success){

$.messager.alert("温馨提示",data.msg,"info",function () {

//关闭对话框

roleDialog.dialog("close");

//刷新数据表格

roleDatagrid.datagrid("load");

});

}else{

$.messager.alert("温馨提示",data.msg,"info")

}

}

})

},

edit:function() {

//获取选中的数据

var rowdata=roleDatagrid.datagrid("getSelected")

if(rowdata){

roleDialog.dialog("open")

roleDialog.dialog("setTitle","编辑")

$("[name='id'],[name='sn'],[name='name']").val("");

//特殊属性的获取(基于同名匹配规则)

if(rowdata.dept){

rowdata["dept.id"]=rowdata.dept.id;

}

var options=selfpermission.datagrid("options")

 

 

selfpermission.datagrid("load",{

 

rid:rowdata.id

});

options.url="/permission_queryByrid";

roleForm.form("load",rowdata)

}else{

$.messager.alert("温馨提示,","请选中一条数据","info")

}

 

},

del:function () {

//获取选中的数据

var rowdata=roleDatagrid.datagrid("getSelected")

if(rowdata){

$.messager.confirm("温馨提示","您确定要删除这条数据的状态吗",function (yes) {

if(yes){

$.get("/role_delete?id="+rowdata.id,function (data) {

 

if(data.success) {

$.messager.alert("温馨提示", data.msg, "info", function () {

roleDatagrid.datagrid("reload")

})

}else {

$.messager.alert("温馨提示,",data.msg,"info")

}

},"json")

}

})

 

}

else{

$.messager.alert("温馨提示,","请选中一条数据","info")

}

},

refresh:function (){

roleDatagrid.datagrid("reload");

 

},

cancel:function () {

roleDialog.dialog("close");

},

searchBtn:function () {

var value=$("[name='keyword']").val();

roleDatagrid.datagrid("load",{

keyword:value

})

}

}

//3.对按钮进行统一的监听

$('a').on("click",function () {

var cmd=$(this).data("cmd");

 

switch(cmd){

case "save":cmdway.save();break;

case "edit":cmdway.edit();break;

case "refresh":cmdway.refresh();break;

case "searchBtn":cmdway.searchBtn();break;

case "add":cmdway.add();break;

case "del":cmdway.del();break;

case "cancel":cmdway.cancel();break;

}

 

})

 

roleDatagrid.datagrid({

fit:true,

url:'/role_list',

fitColumns:true,

rownumbers:true,

pagination:true,

toolbar:"#role_datagrid_tb",

pageList:[1,2,3,5,10,20,30,40,50],

singleSelect:true,

 

columns:[

[

{field:"sn",align:'center',title:'角色编号' ,width:1},

{field:"name",align:'center',title:'角色名称',width:1}

 

]

],

})

roleDialog.dialog({

width:700,

height:430,

buttons:"#role_dialog_bt",

closed:true

})

allpermission.datagrid({

width:300,

height:300,

title:"所有权限",

pagination:true,

url:'/permission_list',

 

fitColumns:true,

rownumbers:true,

 

singleSelect:true,

onDblClickRow:function(rowIndex,rowData){

 

//拿到selfpermission所有的记录

var rows=selfpermission.datagrid("getRows")

 

var flag=true;

var index=-1;

//遍历selfpermission里的记录

for(var i=0;i<rows.length;i++){

if(rowData.id==rows[i].id)

{

 

flag=false;

index=i;

break;

}}

 

//flag=false---->表示已经存在一条这样的记录

//flag=true----->表示不存在然后新增

 

if(flag){

selfpermission.datagrid("appendRow",rowData);

}

else{

selfpermission.datagrid("selectRow",index);

}

 

 

},

columns:[[

{title:"权限名",field:"name",width:1,align:"center"}

]]

})

var pager=allpermission.datagrid("getPager");

pager.pagination({

showPageList:false,

showRefresh:false,

displayMsg: ''

})

 

selfpermission.datagrid({

width:300,

height:300,

title:"已有权限",

fitColumns:true,

rownumbers:true,

onDblClickRow:function(rowIndex,rowData){

selfpermission.datagrid("deleteRow",rowIndex)

},

 

columns:[[

{title:"权限名",field:"name",width:1,align:"center"}

]]

})

})

function deptformatter(value,record,index) {

return value?value.name:"";

}

function stateformatter(value,record,index) {

 

if(value)

return "<font color='#7fffd4'>在职</font>";

else return "<font color='#663399'>离职</font>";

}

function adminformatter(value,record,index) {

if(value)

return "<font color='#7fffd4'></font>";

else return "<font color='#663399'></font>";

}

web.xml

<?xml version="1.0" encoding="UTF-8"?>

<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">

 

<display-name>Archetype Created Web Application</display-name>

 

<servlet>

<servlet-name>springMVC</servlet-name>

<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>

<init-param>

<param-name>contextConfigLocation</param-name>

<param-value>classpath:mvc.xml</param-value>

</init-param>

<load-on-startup>1</load-on-startup>

</servlet>

<servlet-mapping>

<servlet-name>springMVC</servlet-name>

<url-pattern>/</url-pattern>

</servlet-mapping>

<servlet-mapping>

<servlet-name>default</servlet-name>

<url-pattern>*.js</url-pattern>

<url-pattern>*.css</url-pattern>

 

<url-pattern>*.png</url-pattern>

</servlet-mapping>

<!--定义编码-->

<filter>

<filter-name>Spring</filter-name>

<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>

<init-param>

<param-name>encoding</param-name>

<param-value>utf-8</param-value>

</init-param>

</filter>

<filter-mapping>

<filter-name>Spring</filter-name>

<url-pattern>/*</url-pattern>

</filter-mapping>

 

</web-app>

 

myFn.tld

<?xml version="1.0" encoding="UTF-8" ?>

 

<taglib xmlns="http://java.sun.com/xml/ns/j2ee"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"

version="2.0">

 

<description>CRM的函数库</description>

<display-name>客户关系管理系统</display-name>

<tlib-version>1.0</tlib-version>

<short-name>myFn</short-name>

<uri>http://www.zhouzhou.com/crm/permission</uri>

 

<function>

<description>

用于权限控制

</description>

<name>checkPermission</name>

<function-class>CRM.util.Permissionutil</function-class>

<function-signature>java.lang.Boolean checkPermission(java.lang.String)</function-signature>

<example>

&lt;c:if test="${myFn:checkPermission('CRM.web.controller.employeeController:save')}">

</example>

</function>

 

 

 

</taglib>

 

common.jsp

<link rel="stylesheet" type="text/css" href="/js/jquery-easyui/themes/default/easyui.css"><!-- 样式文件 -->

<link rel="stylesheet" type="text/css" href="/js/jquery-easyui/themes/icon.css"> <!--图标样式 -->

<script type="text/javascript" src="/js/jquery-easyui/jquery.min.js"></script> <!-- jQuery核心库 -->

<script type="text/javascript" src="/js/jquery-easyui/jquery.easyui.min.js"></script> <!-- EasyUI核心库 -->

<script type="text/javascript" src="/js/jquery-easyui/locale/easyui-lang-zh_CN.js"></script><!--语言包-->

 

 

employee.jsp

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

<%@taglib uri="http://www.zhouzhou.com/crm/permission" prefix="myFn"%>

<%@ page contentType="text/html;charset=UTF-8" language="java" %>

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

<title>员工管理</title>

<%@ include file="common.jsp"%>

<script type="text/javascript" src="/js/views/employee.js"></script>

</head>

<html>

<body>

<table id="emp_datagrid"></table>

<!--数据表格顶部按钮-->

<div id="emp_datagrid_tb">

<div>

<c:if test="${myFn:checkPermission('CRM.web.controller.employeeController:save')}">

<a class="easyui-linkbutton" iconCls="icon-add" plain="true" data-cmd="add">新增</a>

</c:if>

<c:if test="${myFn:checkPermission('CRM.web.controller.employeeController:update')}">

<a id="edit" class="easyui-linkbutton" iconCls="icon-edit" plain="true" data-cmd="edit">编辑</a>

</c:if>

<c:if test="${myFn:checkPermission('CRM.web.controller.employeeController:del')}">

<a id="del" class="easyui-linkbutton" iconCls="icon-remove" plain="true" data-cmd="del">离职</a>

</c:if>

<a class="easyui-linkbutton" iconCls="icon-reload" plain="true" data-cmd="refresh">刷新</a>

</div>

<div>

关键字查询<input type="text" name="keyword"/><a class="easyui-linkbutton" iconCls="icon-search" data-cmd="searchBtn"></a>

</div>

</div>

<!--新增/更新对话框-->

<div id="emp_dialog">

<form id="emp_form" method="post" action="#">

<table align="center" style="margin-top: 15px">

<!--隐藏域-->

<input type="hidden" name="id"/>

<tr>

<td>账号:</td>

<td><input type="text" name="username"/></td>

</tr>

<tr>

<td>真实姓名:</td>

<td><input type="text" name="realname"/></td>

</tr>

<tr>

<td>联系方式:</td>

<td><input type="text" name="tel"/></td>

</tr>

<tr>

<td>邮箱:</td>

<td><input type="text" name="email"/></td>

</tr>

<tr>

<td>部门:</td>

<td><input type="text" name="dept.id" class="easyui-combobox" data-options="valueField:'id',textField:'name',url:'/department_queryForEmp'"/></td>

</tr>

<tr>

<td>入职时间:</td>

<td><input type="text" name="inputtime" class="easyui-datebox"/></td>

</tr>

<tr>

<td>角色</td>

<td><input type="text" id="role" class="easyui-combobox" data-options="valueField:'id',textField:'name',url:'/role_queryForEmp',multiple:true"/></td>

</tr>

</table>

</form>

</div>

<!--对话框底部的按钮-->

<div id="emp_dialog_bt">

<a class="easyui-linkbutton" iconCls="icon-save" plain="true" data-cmd="save">保存</a>

<a class="easyui-linkbutton" iconCls="icon-cancel" plain="true" data-cmd="cancel">取消</a>

 

</div>

</body>

</html>

 

 

index.jsp

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

 

<%@ page contentType="text/html;charset=UTF-8" language="java" %>

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

<title>Insert title here</title>

<%@ include file="common.jsp"%>

 

<script type="text/javascript" src="/js/views/index.js"></script>

</head>

<body>

<div id="cc" class="easyui-layout" fit="true" style="width:600px;height:400px;">

<div data-options="region:'north'" style="height:100px;background:url('/img/banner-pic.gif') no-repeat;background-size:cover; ">

<h1>小码哥员工管理系统</h1>

</div>

<div data-options="region:'west'" style="width:150px;">

<!-- 手风琴+菜单 -->

<div class="easyui-accordion" fit="true">

<div title="菜单">

<!-- 使用树组件来定义菜单 -->

<ul id="menuTree"></ul>

</div>

<div title="帮助"></div>

<div title="简介"></div>

</div>

</div>

<div data-options="region:'center'" style="padding:5px;background:#eee;">

<!-- 正文内容 -->

<div id="myTabs" class="easyui-tabs" fit="true">

<div title="欢迎页" closable="true">

<center><h1>欢迎登陆系统</h1></center>

</div>

</div>

</div>

<div data-options="region:'south'" style="height:30px;background:url('/img/banner-pic.gif') no-repeat;background-size:cover; ">

<center>版权信息</center>

</div>

</div>

</body>

</html>

 

 

role.jsp

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

 

<%@ page contentType="text/html;charset=UTF-8" language="java" %>

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

<title>角色管理</title>

<%@ include file="common.jsp"%>

<script type="text/javascript" src="/js/views/role.js"></script>

</head>

<html>

<body>

<table id="role_datagrid"></table>

<!--数据表格顶部按钮-->

<div id="role_datagrid_tb">

<div>

<a class="easyui-linkbutton" iconCls="icon-add" plain="true" data-cmd="add">新增</a>

<a id="edit" class="easyui-linkbutton" iconCls="icon-edit" plain="true" data-cmd="edit">编辑</a>

<a id="del" class="easyui-linkbutton" iconCls="icon-remove" plain="true" data-cmd="del">删除</a>

<a class="easyui-linkbutton" iconCls="icon-reload" plain="true" data-cmd="refresh">刷新</a>

</div>

<div>

关键字查询<input type="text" name="keyword"/><a class="easyui-linkbutton" iconCls="icon-search" data-cmd="searchBtn"></a>

</div>

</div>

<!--新增/更新对话框-->

<div id="role_dialog">

<form id="role_form" method="post" action="#">

<table align="center" style="margin-top: 15px">

<!--隐藏域-->

<input type="hidden" name="id"/>

<tr>

<td>角色名称:<input type="text" name="name"/></td>

<td>角色编号:<input type="text" name="sn"/></td>

</tr>

<tr>

<td><table id="allpermission"></table></td>

<td><table id="selfpermission"></table></td>

</tr>

</table>

</form>

</div>

<!--对话框底部的按钮-->

<div id="role_dialog_bt">

<a class="easyui-linkbutton" iconCls="icon-save" plain="true" data-cmd="save">保存</a>

<a class="easyui-linkbutton" iconCls="icon-cancel" plain="true" data-cmd="cancel">取消</a>

 

</div>

</body>

</html>

 

login.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"

pageEncoding="UTF-8"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

<title>小码哥客户关系管理系统</title>

<link rel="stylesheet" href="css/style.css">

 

 

<script type="text/javascript" src="/js/jquery/jquery-1.11.2.js"></script>

<script type="text/javascript" src="/js/jquery-easyui/jquery.min.js"></script>

<script type="text/javascript" src="/js/views/index.js"></script>

</head>

<body>

<section class="container">

<div class="login">

<h1 style="text-align: center">用户登录</h1>

<form method="post">

<p><input type="text" name="username" value="" placeholder="账号"></p>

<p><input type="password" name="password" value="" placeholder="密码"></p>

<p class="submit">

<input type="button" value="登录" onclick="submitWay()">

<input type="button" value="重置" onclick="resetWay()">

</p>

</form>

</div>

</section>

<div style="text-align:center;" class="login-help">

<p>Copyright ©2015 广州小码哥教育科技有限公司</p>

</div>

</body>

</html>

 

 

noPermission.json

{"success":false,"msg":"您没有权限操作"}

 

 

noPermission.jsp

<%--

Created by IntelliJ IDEA.

User: Lenovo

Date: 2019/1/24

Time: 19:14

To change this template use File | Settings | File Templates.

--%>

<%@ page contentType="text/html;charset=UTF-8" language="java" %>

<html>

<head>

<title>Title</title>

</head>

<body>

您没有权限进行访问

</body>

</html>

 

 

Excel导入导出测试操作

package test;

 

import CRM.domain.Department;

import CRM.domain.Employee;

import CRM.service.IEmployeeService;

import com.alibaba.druid.sql.visitor.functions.Left;

import com.sun.deploy.net.HttpResponse;

import jxl.Cell;

import jxl.Sheet;

import jxl.Workbook;

import jxl.format.Alignment;

import jxl.format.VerticalAlignment;

import jxl.write.*;

import org.junit.Test;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.format.annotation.DateTimeFormat;

import org.springframework.web.multipart.MultipartFile;

 

import javax.servlet.http.HttpServletResponse;

import java.io.File;

import java.io.IOException;

import java.util.ArrayList;

import java.util.Date;

import java.util.List;

 

public class testOut {

@Autowired

private IEmployeeService service;

@Test

public void testout()throws Exception{

//创建Excel对象

WritableWorkbook wb=Workbook.createWorkbook(new File("out.xls"));

//创建工作本

WritableSheet sheet=wb.createSheet("我的第一个工作本",0);

Label cell=new Label(0,0,"我的文本内容");

//修改列的宽度

sheet.setColumnView(0,30);

//修改列的高度

sheet.setRowView(0,400);

//合并单元格mergeCells(左上角单元格的列,左上角单元格的行,右上角单元格的列,右上角单元格的行)

//单元格的内容由左上角单元格文本控制

 

sheet.mergeCells(0,0,5,5);

//创建单元格

 

 

sheet.addCell(cell);

DateFormat df=new DateFormat("yyyy-MM-dd HH:mm:ss");

WritableCellFormat st=new WritableCellFormat(df);

//设置水平居中

st.setAlignment(Alignment.CENTRE);

//设置垂直居中

st.setVerticalAlignment(VerticalAlignment.CENTRE);

DateTime date=new DateTime(0,1,new Date(),st);

sheet.addCell(date);

//将内容写入到Excel

wb.write();

//关闭资源

wb.close();

}

@Test

public void testread()throws Exception{

//找到需要读取的文件

Workbook wb=Workbook.getWorkbook(new File("in.xls"));

//拿到工作本

Sheet sheet=wb.getSheet(0);

//知道Excel有多少行和多少列

int row=sheet.getRows();

int col=sheet.getColumns();

for (int i=0;i<row;i++){

for(int j=0;j<col;j++){

Cell cell=sheet.getCell(j,i);

cell.getContents();

System.out.print(cell.getContents()+"\t");

}

System.out.println();

}

wb.close();

}

@Test

public void testinFile() throws Exception {

//文件上传

MultipartFile file=null;

//找到需要读取的文件

Workbook wb=Workbook.getWorkbook(file.getInputStream());

//拿到工作本

Sheet sheet=wb.getSheet(0);

//知道Excel有多少行和多少列

int row=sheet.getRows();

int col=sheet.getColumns();

Cell cell;

Employee emp=null;

List<Employee>list=new ArrayList<>();

for(int i=1;i<row;i++){

emp=new Employee();

emp.setUsername(sheet.getCell(0,i).getContents());

emp.setRealname(sheet.getCell(1,i).getContents());

emp.setTel(sheet.getCell(2,i).getContents());

emp.setEmail(sheet.getCell(3,i).getContents());

service.insert(emp);

}

wb.close();

}

@Test

public void testoutFile(HttpServletResponse response) throws Exception {

List<Employee>list=service.selectAll();

//创建Excel对象

WritableWorkbook wb=Workbook.createWorkbook(response.getOutputStream());

//创建工作本

WritableSheet sheet=wb.createSheet("我的第一个工作本",0);

Employee emp;

Label cell;

for(int i=0;i<list.size();i++){

emp=list.get(i);

cell=new Label(0,i,emp.getUsername());

sheet.addCell(cell);

cell=new Label(1,i,emp.getEmail());

sheet.addCell(cell);

cell=new Label(2,i,emp.getTel());

sheet.addCell(cell);

}

wb.write();

wb.close();

}

}

 

 

pom.xml

 

<?xml version="1.0" encoding="UTF-8"?>

 

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

<modelVersion>4.0.0</modelVersion>

 

<groupId>com.zhouyusu._520it</groupId>

<artifactId>CRM</artifactId>

<version>1.0-SNAPSHOT</version>

<packaging>war</packaging>

 

<name>CRM Maven Webapp</name>

<!-- FIXME change it to the project's website -->

<url>http://www.example.com</url>

 

<properties>

<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>

<spring.version>5.0.2.RELEASE</spring.version>

<mybatis.version>3.4.5</mybatis.version>

</properties>

 

<dependencies>

 

<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->

 

<!-- Spring -->

<dependency>

<groupId>org.springframework</groupId>

<artifactId>spring-context</artifactId>

<version>${spring.version}</version>

</dependency>

<dependency>

<groupId>org.springframework</groupId>

<artifactId>spring-jdbc</artifactId>

<version>${spring.version}</version>

</dependency>

<dependency>

<groupId>org.springframework</groupId>

<artifactId>spring-webmvc</artifactId>

<version>${spring.version}</version>

</dependency>

<dependency>

<groupId>commons-lang</groupId>

<artifactId>commons-lang</artifactId>

<version>2.6</version>

</dependency>

 

<dependency>

<groupId>net.sourceforge.jexcelapi</groupId>

<artifactId>jxl</artifactId>

<version>2.6.12</version>

</dependency>

 

<dependency>

<groupId>org.springframework</groupId>

<artifactId>spring-test</artifactId>

<version>${spring.version}</version>

<scope>test</scope>

</dependency>

<!-- mybatis -->

<dependency>

<groupId>org.mybatis</groupId>

<artifactId>mybatis</artifactId>

<version>${mybatis.version}</version>

</dependency>

<!-- mybatis-spring -->

<dependency>

<groupId>org.mybatis</groupId>

<artifactId>mybatis-spring</artifactId>

<version>1.3.0</version>

</dependency>

 

<!-- MySQL驱动 -->

<dependency>

<groupId>mysql</groupId>

<artifactId>mysql-connector-java</artifactId>

<version>5.1.38</version>

<scope>runtime</scope>

</dependency>

<!-- druid连接池 -->

<dependency>

<groupId>com.alibaba</groupId>

<artifactId>druid</artifactId>

<version>1.0.26</version>

</dependency>

 

<!-- aspectJ织入 -->

<dependency>

<groupId>org.aspectj</groupId>

<artifactId>aspectjweaver</artifactId>

<version>1.8.7</version>

</dependency>

 

<!-- JSON处理 -->

<dependency>

<groupId>com.fasterxml.jackson.core</groupId>

<artifactId>jackson-databind</artifactId>

<version>2.9.5</version>

</dependency>

<!-- JUnit4测试工具 -->

<dependency>

<groupId>junit</groupId>

<artifactId>junit</artifactId>

<version>4.12</version>

<scope>test</scope>

</dependency>

 

<!-- Servlet-API -->

<dependency>

<groupId>javax.servlet</groupId>

<artifactId>javax.servlet-api</artifactId>

<version>3.0.1</version>

<scope>provided</scope>

</dependency>

 

 

<!-- JSTL标签库 -->

<dependency>

<groupId>jstl</groupId>

<artifactId>jstl</artifactId>

<version>1.2</version>

</dependency>

 

 

<!-- 日志 -->

<dependency>

<groupId>org.slf4j</groupId>

<artifactId>slf4j-api</artifactId>

<version>1.7.21</version>

</dependency>

<dependency>

<groupId>org.slf4j</groupId>

<artifactId>slf4j-log4j12</artifactId>

<version>1.7.21</version>

</dependency>

 

<!-- lombok插件 -->

<dependency>

<groupId>org.projectlombok</groupId>

<artifactId>lombok</artifactId>

<version>1.16.6</version>

<scope>compile</scope>

</dependency>

<dependency>

<groupId>org.testng</groupId>

<artifactId>testng</artifactId>

<version>RELEASE</version>

<scope>compile</scope>

</dependency>

<dependency>

<groupId>junit</groupId>

<artifactId>junit</artifactId>

<version>RELEASE</version>

<scope>compile</scope>

</dependency>

<dependency>

<groupId>org.springframework</groupId>

<artifactId>spring-test</artifactId>

<version>RELEASE</version>

<scope>compile</scope>

</dependency>

</dependencies>

<build>

<plugins>

<!--Java编译器插件 -->

<plugin>

<groupId>org.apache.maven.plugins</groupId>

<artifactId>maven-compiler-plugin</artifactId>

<version>3.5.1</version>

<configuration>

<source>1.8</source>

<target>1.8</target>

<encoding>UTF-8</encoding>

</configuration>

</plugin>

<plugin>

<groupId>org.mybatis.generator</groupId>

<artifactId>mybatis-generator-maven-plugin</artifactId>

<version>1.3.2</version>

<configuration>

<configurationFile>src/main/resources/generatorConfig.xml

</configurationFile>

<verbose>true</verbose>

<overwrite>false</overwrite>

</configuration>

<dependencies>

<dependency>

<groupId>mysql</groupId>

<artifactId>mysql-connector-java</artifactId>

<version>5.1.38</version>

<scope>runtime</scope>

</dependency>

</dependencies>

</plugin>

 

 

</plugins>

</build>

</project>

 

 

总体测试结果如下:

 

第一个SSM项目

第一个SSM项目

第一个SSM项目

第一个SSM项目

第一个SSM项目

时时刻刻记录用户的操作:

第一个SSM项目