pom
<?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.laolang.jc.one</groupId>
<artifactId>jcone-parent</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>pom</packaging>
<!-- 集中定义依赖版本号 -->
<properties>
<!-- test -->
<junit.version>4.10</junit.version>
<hamcrest.version>1.3</hamcrest.version>
<!-- java ee -->
<javaee-api.version>7.0</javaee-api.version>
<servlet-api.version>3.0.1</servlet-api.version>
<persistence-api.version>1.0</persistence-api.version>
<jstl.version>1.2</jstl.version>
<standard.version>1.1.2</standard.version>
<!-- spring -->
<spring.version>4.2.0.RELEASE</spring.version>
<!-- mybatis -->
<mybatis.version>3.2.8</mybatis.version>
<mybatis.spring.version>1.2.2</mybatis.spring.version>
<mybatis.paginator.version>1.2.15</mybatis.paginator.version>
<pagehelper.version>4.0.3</pagehelper.version>
<tk.mapper.version>3.2.2</tk.mapper.version>
<mysql.version>5.1.32</mysql.version>
<!-- log -->
<slf4j.version>1.7.12</slf4j.version>
<logback.version>1.1.3</logback.version>
<logback.ext.version>0.1.2</logback.ext.version>
<!-- json -->
<jackson.version>2.4.2</jackson.version>
<jackson.mapper.version>1.9.13</jackson.mapper.version>
<!-- google -->
<gson.version>2.2.2</gson.version>
<guava.version>18.0</guava.version>
<!-- alibaba -->
<druid.version>1.0.12</druid.version>
<!-- apache -->
<httpclient.version>4.5</httpclient.version>
<commons-lang3.version>3.3.2</commons-lang3.version>
<commons-io.version>2.5</commons-io.version>
<commons-fileupload.version>1.3.2</commons-fileupload.version>
<commons-net.version>3.3</commons-net.version>
<commons-codec.version>1.9</commons-codec.version>
<!-- beetl -->
<beetl.version>2.7.5</beetl.version>
<!-- jedis -->
<jedis.version>2.6.3</jedis.version>
<!-- JSR 303 -->
<hibernate-validator.version>5.1.3.Final</hibernate-validator.version>
<validator-api.version>1.1.0.Final</validator-api.version>
<joda-time.version>2.5</joda-time.version>
<cglib.versoin>3.1</cglib.versoin>
<quartz.versoin>2.2.1</quartz.versoin>
<spring-rabbit.version>1.4.0.RELEASE</spring-rabbit.version>
</properties>
<dependencyManagement>
<dependencies>
<!-- test -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>${junit.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.hamcrest</groupId>
<artifactId>hamcrest-all</artifactId>
<version>${hamcrest.version}</version>
<scope>test</scope>
</dependency>
<!-- java ee-->
<dependency>
<groupId>javax</groupId>
<artifactId>javaee-api</artifactId>
<version>${javaee-api.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>${servlet-api.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.persistence</groupId>
<artifactId>persistence-api</artifactId>
<version>1.0</version>
</dependency>
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
<version>${jstl.version}</version>
</dependency>
<dependency>
<groupId>taglibs</groupId>
<artifactId>standard</artifactId>
<version>${standard.version}</version>
</dependency>
<!-- Spring -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-oxm</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</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-beans</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aspects</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${spring.version}</version>
</dependency>
<!-- JSR 303 -->
<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
<version>${validator-api.version}</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>${hibernate-validator.version}</version>
</dependency>
<!-- beetl -->
<dependency>
<groupId>com.ibeetl</groupId>
<artifactId>beetl</artifactId>
<version>${beetl.version}</version>
</dependency>
<!-- Mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>${mybatis.version}</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>${mybatis.spring.version}</version>
</dependency>
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>${pagehelper.version}</version>
</dependency>
<dependency>
<groupId>tk.mybatis</groupId>
<artifactId>mapper</artifactId>
<version>${tk.mapper.version}</version>
</dependency>
<!-- MySql -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${mysql.version}</version>
</dependency>
<!-- alibaba -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>${druid.version}</version>
</dependency>
<!-- Jackson Json处理工具包 -->
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-mapper-asl</artifactId>
<version>${jackson.mapper.version}</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>${jackson.version}</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>${jackson.version}</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>${jackson.version}</version>
</dependency>
<!-- google -->
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>${gson.version}</version>
</dependency>
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>${guava.version}</version>
</dependency>
<!-- apache -->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>${commons-lang3.version}</version>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>${commons-io.version}</version>
</dependency>
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>${commons-fileupload.version}</version>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>${httpclient.version}</version>
</dependency>
<dependency>
<groupId>commons-net</groupId>
<artifactId>commons-net</artifactId>
<version>${commons-net.version}</version>
</dependency>
<dependency>
<groupId>commons-codec</groupId>
<artifactId>commons-codec</artifactId>
<version>${commons-codec.version}</version>
</dependency>
<!-- logback -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>${slf4j.version}</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>jcl-over-slf4j</artifactId>
<version>${slf4j.version}</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-core</artifactId>
<version>${logback.version}</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>${logback.version}</version>
</dependency>
<dependency>
<groupId>org.logback-extensions</groupId>
<artifactId>logback-ext-spring</artifactId>
<version>${logback.ext.version}</version>
</dependency>
<!-- 时间操作组件 -->
<dependency>
<groupId>joda-time</groupId>
<artifactId>joda-time</artifactId>
<version>${joda-time.version}</version>
</dependency>
<!-- jedis -->
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>${jedis.version}</version>
</dependency>
<!-- 动态代理 -->
<dependency>
<groupId>cglib</groupId>
<artifactId>cglib</artifactId>
<version>${cglib.versoin}</version>
</dependency>
<!-- quartz -->
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
<version>${quartz.versoin}</version>
</dependency>
<!-- RabbitMQ -->
<dependency>
<groupId>org.springframework.amqp</groupId>
<artifactId>spring-rabbit</artifactId>
<version>${spring-rabbit.version}</version>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<finalName>${project.artifactId}</finalName>
<plugins>
<!-- 资源文件拷贝插件 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<version>2.7</version>
<configuration>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
<!-- java编译插件 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.2</version>
<configuration>
<source>1.7</source>
<target>1.7</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
</plugins>
<pluginManagement>
<plugins>
<!-- 配置Tomcat插件 -->
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
</plugin>
</plugins>
</pluginManagement>
</build>
</project>
java
bean
BaseDomain
package com.laolang.jc.one.manage.domain;
import java.util.Date;
/**
* 实体类基类
* @author laolang2016
* @version 1.0
*/
public class BaseDomain {
/**
* 创建时间
*/
protected Date created;
/**
* 最后更新时间
*/
protected Date updated;
public Date getCreated() {
return created;
}
public void setCreated(Date created) {
this.created = created;
}
public Date getUpdated() {
return updated;
}
public void setUpdated(Date updated) {
this.updated = updated;
}
}
Employee
package com.laolang.jc.one.manage.domain;
import org.springframework.format.annotation.DateTimeFormat;
import java.util.Date;
import javax.persistence.*;
/**
* 员工实体类
* @author laolang2016
* @version 1.0
*/
@Table(name = "tb_employee")
public class Employee extends BaseDomain {
public Employee() {
}
@Override
public String toString() {
return "Employee{" +
"id=" + id +
", loginNumber='" + loginNumber + '\'' +
", name='" + name + '\'' +
", sex=" + sex +
", pwd='" + pwd + '\'' +
", birthday=" + birthday +
", city='" + city + '\'' +
", phone='" + phone + '\'' +
", lead=" + lead +
", created=" + created +
", updated=" + updated +
'}';
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public boolean isSex() {
return sex;
}
public void setSex(boolean sex) {
this.sex = sex;
}
public String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
public String getCity() {
return city;
}
public void setCity(String city) {
this.city = city;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
public boolean isLead() {
return lead;
}
public void setLead(boolean lead) {
this.lead = lead;
}
public String getLoginNumber() {
return loginNumber;
}
public void setLoginNumber(String loginNumber) {
this.loginNumber = loginNumber;
}
/**
* ID
*/
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
/**
* 登陆账号,也是编辑
*/
@Column(name = "login_number")
private String loginNumber;
/**
* 员工姓名
*/
private String name;
/**
* 员工性别 <br />
* true : 男 <br />
* false : 女
*/
private boolean sex;
/**
* 登陆密码
*/
private String pwd;
/**
* 出生日期
*/
@DateTimeFormat(pattern="yyyy-MM-dd")
private Date birthday;
/**
* 居住地(城市)
*/
private String city;
/**
* 办公室电话
*/
private String phone;
/**
* 是否领导 <br />
* true : 是 <br />
* false : 不是
*/
private boolean lead;
}
Mapper
package com.laolang.jc.one.manage.mapper;
import com.laolang.jc.one.manage.domain.Employee;
import tk.mybatis.mapper.common.Mapper;
public interface EmployeeMapper extends Mapper<Employee> {
}
service
BaseService
package com.laolang.jc.one.manage.service;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.laolang.jc.one.manage.domain.BaseDomain;
import org.springframework.beans.factory.annotation.Autowired;
import tk.mybatis.mapper.common.Mapper;
import tk.mybatis.mapper.entity.Example;
import java.util.Date;
import java.util.List;
public abstract class BaseService<T extends BaseDomain> {
// 不使用泛型注入的方法
// public abstract Mapper<T> getMapper();
@Autowired
protected Mapper<T> mapper;
/**
* 根据条件查询记录数
* @param t
* @return
*/
public Integer findCountByWhere( T t){
return mapper.selectCount(t);
}
/**
* 根据 ID 查询
*
* @param id id
* @return
*/
public T findById(Long id) {
return mapper.selectByPrimaryKey(id);
}
/**
* 查询所有
*
* @return
*/
public List<T> findAll() {
return mapper.selectAll();
}
/**
* 根据条件查询一个
*
* @param t
* @return
*/
public T findOne(T t) {
return mapper.selectOne(t);
}
/**
* 根据条件查询列表
*
* @param t
* @return
*/
public List<T> findListByWhere(T t) {
return mapper.select(t);
}
/**
* 带条件的分页查询
*
* @param page
* @param rows
* @param t
* @return
*/
public PageInfo<T> findPageListByWhere(Integer page, Integer rows, T t) {
PageHelper.startPage(page, rows);
List<T> list = mapper.select(t);
return new PageInfo<T>(list);
}
/**
* 插入数据,null的属性也会保存,不会使用数据库默认值
*
* @param t
* @return
*/
public Integer save(T t) {
t.setCreated(new Date());
t.setUpdated(t.getCreated());
return mapper.insert(t);
}
/**
* 插入数据,null的属性不会保存,会使用数据库默认值
*
* @param t
* @return
*/
public Integer saveSelective(T t) {
t.setCreated(new Date());
t.setUpdated(t.getCreated());
return mapper.insertSelective(t);
}
/**
* 根据主键更新实体全部字段,null值会被更新
*
* @param t
* @return
*/
public Integer updateByPrimaryKey(T t) {
t.setUpdated(new Date());
return mapper.updateByPrimaryKey(t);
}
/**
* 根据主键更新属性不为null的值
*
* @param t
* @return
*/
public Integer updateByPrimaryKeySelective(T t) {
t.setUpdated(new Date());
return mapper.updateByPrimaryKeySelective(t);
}
/**
* 根据ID删除
*
* @param id
* @return
*/
public Integer deleteById(Long id) {
return mapper.deleteByPrimaryKey(id);
}
/**
* 批量删除
*
* @param clazz 要删除的类
* @param property ID 名称
* @param values 要删除的ID列表
* @return
*/
public Integer deleteByIds(Class<T> clazz, String property, List< Object> values) {
Example example = new Example(clazz);
example.createCriteria().andIn(property, values);
return mapper.deleteByExample(example);
}
/**
* 根据条件删除
*
* @param t
* @return
*/
public Integer deleteByWhere(T t) {
return mapper.delete(t);
}
}
EmployeeService
package com.laolang.jc.one.manage.service;
import com.laolang.jc.one.manage.domain.Employee;
import org.springframework.stereotype.Service;
@Service
public class EmployeeService extends BaseService<Employee> {
}
pojo
package com.laolang.jc.one.manage.web.pojo;
import java.util.List;
public class EasyUIGridPojo<T> {
public EasyUIGridPojo() {
}
public List<T> getRows() {
return rows;
}
public void setRows(List<T> rows) {
this.rows = rows;
}
public Long getTotal() {
return total;
}
public void setTotal(Long total) {
this.total = total;
}
private List<T> rows;
private Long total;
}
controller
package com.laolang.jc.one.manage.web.web;
import com.github.pagehelper.PageInfo;
import com.laolang.jc.one.manage.domain.Employee;
import com.laolang.jc.one.manage.service.EmployeeService;
import com.laolang.jc.one.manage.web.pojo.EasyUIGridPojo;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import java.util.ArrayList;
import java.util.List;
@RequestMapping("employee")
@Controller
public class EmployeeController {
@Autowired
private EmployeeService employeeService;
/**
* 查询
* @param page 第几页
* @param rows 每页显示多少条
* @return {@link com.laolang.jc.one.manage.web.pojo.EasyUIGridPojo} 实例
*/
@RequestMapping(value = "list", method = RequestMethod.GET)
public ResponseEntity<EasyUIGridPojo<Employee>> list(@RequestParam(value = "page", defaultValue = "1") Integer page, @RequestParam(value = "rows", defaultValue = "30")
Integer rows) {
PageInfo<Employee> pageInfo = employeeService.findPageListByWhere(page,rows,null);
EasyUIGridPojo<Employee> gridPojo = new EasyUIGridPojo<>();
gridPojo.setTotal(pageInfo.getTotal());
gridPojo.setRows(pageInfo.getList());
return ResponseEntity.ok(gridPojo);
}
/**
* 批量删除员工信息
* @param ids id字符串[1-2-3]
* @return
* 400 : 请求参数有误 <br />
* 204 : 删除成功 <br />
* 500 : 服务器内部
*/
@RequestMapping(value = "delete",method = RequestMethod.POST)
public ResponseEntity<Void> delete( @RequestParam(value = "ids") String ids ){
String[] idArray = StringUtils.split(ids,'-');
if ( null == idArray || 0 == idArray.length ){
return ResponseEntity.status(HttpStatus.BAD_REQUEST).build();
}
try{
if( 1 == idArray.length ){
employeeService.deleteById(Long.parseLong(idArray[0]));
}else{
List<Object> idList = new ArrayList<>();
for (String s : idArray) {
idList.add(Long.parseLong(s));
}
employeeService.deleteByIds(Employee.class,"id",idList);
}
return ResponseEntity.status(HttpStatus.NO_CONTENT).build();
}catch (Exception e){
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).build();
}
}
/**
* 添加员工信息
* @param employee 员工
* @return
* 201 : 新增成功 <br />
* 500 : 服务器内部错误
*/
@RequestMapping(value = "save",method = RequestMethod.POST)
public ResponseEntity<Void> save( Employee employee ){
try{
System.out.println(employee);
employee.setPwd("123456");
employeeService.saveSelective(employee);
return ResponseEntity.status(HttpStatus.CREATED).build();
}catch (Exception e){
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).build();
}
}
/**
* 更新员工信息
* @param employee
* @return
*/
@RequestMapping(value = "update",method = RequestMethod.POST)
public ResponseEntity<Void> update( Employee employee ){
try{
System.out.println(employee);
employeeService.updateByPrimaryKeySelective(employee);
return ResponseEntity.status(HttpStatus.NO_CONTENT).build();
}catch (Exception e){
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).build();
}
}
}
page
index.html
<!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8">
<title>index</title>
<link rel="stylesheet" type="text/css" href="https://my.oschina.net/assets/jquery-easyui-1.4.5/themes/default/easyui.css" />
<link rel="stylesheet" type="text/css" href="https://my.oschina.net/assets/jquery-easyui-1.4.5/themes/icon.css" />
</head>
<body class="easyui-layout">
<div data-options="region:'north',title:'header',split:true,noheader:true" style="height:45px;">
banner
</div>
<!--<div data-options="region:'south',title:'footer',split:true,noheader:true" style="height:35px;line-height:30px;text-align:center;">-->
<!--copyRight-->
<!--</div>-->
<div data-options="region:'west',title:'导航',split:true,iconCls:'icon-world'" style="width:180px;padding:10px;">
<ul id="nav" class="easyui-tree" data-options="lines:true,animate:true">
<li>
<span>员工管理</span>
<ul>
<li>员工查询</li>
</ul>
</li>
<li>
<span>消息管理</span>
<ul>
<li>消息查询</li>
</ul>
</li>
</ul>
</div>
<div data-options="region:'center'" style="overflow:hidden;">
<div id="tabs">
<div title="起始页" iconCls="icon-home" style="padding:0 10px;display:block;">
欢迎来到后台管理系统!
</div>
</div>
</div>
<script type="text/javascript" src="https://my.oschina.net/assets/jquery/jquery.min.js"></script>
<script type="text/javascript" src="https://my.oschina.net/assets/jquery-easyui-1.4.5/jquery.easyui.min.js"></script>
<script type="text/javascript" src="https://my.oschina.net/assets/jquery-easyui-1.4.5/locale/easyui-lang-zh_CN.js"></script>
<script type="text/javascript">
/**
* 根据菜单文本返回对应页面的地址
* @param {string} menuText 菜单文本
* @returns {string} 对应页面的URL地址
*/
function getUrl( menuText ){
if ( '员工查询' == menuText ){
return 'page/employee/list';
}else if( '消息查询' == menuText ){
return 'page/message/list';
}
return '';
}
$(function () {
console.log('jc one!');
var tab = $('#tabs');
var nav = $('#nav');
// 初始化tab
tab.tabs({
fit : true,
border : false
});
// tree 点击事件
nav.tree({
onClick : function (node) {
if( nav.tree('isLeaf',node.target) ){
var text = node.text;
var url = getUrl(text);
if( tab.tabs('exists',text)){
tab.tabs('select',text);
}else{
if ( url !== '') {
tab.tabs('add',{
url:url,
closable : true,
title : text,
href : url
});
}
}
}
}
});
});
</script>
</body>
</html>
list.html
<!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8">
<title></title>
</head>
<body>
<table id="employee-data"></table>
<script type="text/javascript">
$(function () {
var grid = $('#employee-data');
var win = $('<div>');
grid.datagrid({
loadMsg:'数据加载中....',
url : 'http://manage.jcone.com/employee/list',
idField : 'id',
rownumbers : true,
striped : true,
pagination : true,
method : 'GET',
ctrlSelect : true,
pageSize : 30,
pageList : [30, 60, 90],
fitColumns : true,
toolbar : [{
text : '添加',
iconCls:'icon-add',
handler : function () {
createWindow({
type : 'save',
url : 'employee/save'
});
}
},'-',{
text : '编辑',
iconCls:'icon-edit',
handler : function () {
var rows = grid.datagrid('getSelections');
if( 0 == rows.length || rows.length > 1 ){
$.messager.show({title: '提示',msg: '请选择一条数据!',timeout: 2000,showType: 'slide'});
}else{
createWindow({
type : 'update',
url : 'employee/update',
rowData : rows[0]
});
}
}
},'-',{
text : '删除',
iconCls:'icon-remove',
handler : function () {
var ids = [];
var rows = grid.datagrid('getSelections');
if( rows.length > 0 ) {
for (var i = 0; i < rows.length; i++) {
ids.push(rows[i].id)
}
var idStr = '';
for (var i = 0; i < ids.length; i++) {
idStr += ids[i] + '-';
}
idStr = idStr.substr(0, idStr.length - 1);
$.ajax({
url: 'employee/delete',
data: 'ids=' + idStr,
type: 'POST',
statusCode: {
204: function (data) {
$.messager.show({title: '提示',msg: '已删除',timeout: 2000,showType: 'slide'});
grid.datagrid('reload');
},
400: function (data) {
$.messager.show({title: '提示',msg: '请求参数错误',timeout: 2000,showType: 'slide'});
},
500: function (data) {
$.messager.alert('提示', '服务器内部错误!', 'error');
}
}
});
}else{
$.messager.show({title: '提示',msg: '未选择数据',timeout: 2000,showType: 'slide'});
}
}
}],
columns : [
[{field : 'id',title : 'id',width : 100,checkbox:true},{field : 'loginNumber',title : '编号',width : 50},
{field : 'name',title : '姓名',width : 100},{field : 'sex',title : '性别',width : 50,formatter : formateSex},
{field : 'birthday',title : '出生日期',width : 80,formatter : formateBirthday},{field : 'lead',title : '是否领导',width : 50,formatter : formateLead},
{field : 'phone',title : '办公室电话',width : 100},{field : 'city',title : '住址',width : 100},
{field : 'created',title : '创建时间',width : 120,formatter : formateDateTime},{field : 'updated',title : '更新时间',width : 120,formatter : formateDateTime}
]
]
});
/**
* 性别格式化
* @param [boolean] sex 性别
* @returns {string}
* true : 男
* false : 女
*/
function formateSex( sex ){
if(!sex){
return '女'
}
return '男';
}
/**
* 是否领导格式化
* @param lead 是否领导
* @returns {string}
* true : 是
* false : 否
*/
function formateLead( lead ){
if( !lead ){
return '否';
}
return '是';
}
/**
* 格式化出生日期
* @param {string} birthday 出生日期
* @returns {string} yyyy-MM-dd
*/
function formateBirthday( birthday ){
var date = new Date(parseInt(birthday));
var b = date.getFullYear() + '-' + ( date.getMonth() - 1 ) + '-' + date.getDate();
return b;
}
/**
* 格式化时间戳
* @param {string} datetime 时间戳
* @returns {string} yyyy-MM-dd HH:mm:ss
*/
function formateDateTime( datetime ){
var date = new Date(parseInt(datetime));
var b = date.getFullYear() + '-' + ( date.getMonth() - 1 ) + '-' + date.getDate() + ' ' + date.getHours() + ':' + date.getMinutes() + ':'+ date.getSeconds();
return b;
}
/**
* 创建表单窗口
* @param winConfig
* type :
* save 新增
* update 更新
* url : ajax提交地址
* rowData : datagrid行
*/
function createWindow( winConfig ){
var type = winConfig.type;
var url = winConfig.url;
var winTitle = '';
var msgText = '';
if( 'save' == type ){
msgText = '新增成功!';
winTitle = '新增员工信息';
}else if( 'update' == type ){
msgText = '更新成功!';
winTitle = '更新员工信息';
}
win.css('padding','10px');
win.addClass('easyui-layout');
win.window({
width : 400,
height : 350,
modal : true,
closable : false,
maximizable : false,
collapsible : false,
resizable : false,
minimizable : false,
//{"北京市", "天津市", "唐山市", "邯郸市", "邢台市", "保定市", "承德市", "沧州市", "廊坊市", "衡水市", "太原市", "大同市", "阳泉市", "长治市", "晋城市", "晋中市", "运城市", "忻州市", "临汾市", "吕梁市", "朔州市"};
title : winTitle,
content : "<div data-options='region:center'><form id='employee-form'><table style='border-spacing:0px 10px'>\
<input id='emp-id' type='hidden' name='id'/>\
<tr><td>员工编号:</td><td><input id='emp-loginNumber' name='loginNumber' class='easyui-validatebox' data-options='required:true'/></td></tr>\
<tr><td>员工姓名:</td><td><input id='emp-name' name='name' class='easyui-validatebox' data-options='required:true'/></td></tr>\
<tr><td>员工性别:</td><td><select id='emp-sex' style='width:180px' class='easyui-combobox' data-options='editable:false,panelHeight:50'>\
<option value='true'>男</option><option value='false'>女</option></select>\
<input id='emp-sex-sub' type='hidden' name='sex'/></td></tr>\
<tr><td>办公室电话:</td><td><input id='emp-phone' name='phone' class='easyui-validatebox' data-options='required:true'/></td></tr>\
<tr><td>住址:</td><td><select id='emp-city' name='city' class='easyui-combobox'>\
<option value='北京市'>北京市</option><option value='大同市'>大同市</option><option value='太原市'>太原市</option>\
</select></td></tr>\
<tr><td>出生日期:</td><td><input id='emp-birthday' name='birthday' class='easyui-datebox' required ='required'/></td></tr>\
<tr><td>是否领导:</td><td><select id='emp-lead' style='width:180px' class='easyui-combobox' data-options='editable:false,panelHeight:50'>\
<option value='true'>是</option><option value='false'>否</option>\
</select> <input id='emp-lead-sub' type='hidden' name='lead'/></td></tr>\
</table></form></div>\
<div data-options='region:south' style='text-align:right;padding:5px 0 0'>\
<a id='form-btn-submit' class='easyui-linkbutton' href='javascript:void(0)' style='width:80px' >确定</a>\
<a id='form-btn-cancle' class='easyui-linkbutton' href='javascript:void(0)' style='width:80px' >取消</a>\
</div>",
onOpen : function () {
if( 'update' == type ){
setFormValue(winConfig.rowData);
}
win.find('#form-btn-submit').click(function () {
winSubFunc(url,win.find('#employee-form'),msgText);
});
win.find('#form-btn-cancle').click(function () {
win.window('destroy');
});
},
onClose : function () {
win.window('destroy');
}
});
}
/**
* 表单窗口提交
* @param url ajax 地址
* @param empForm 表彰对象[jQuery对象]
* @param msgText 提示信息
*/
function winSubFunc( url , empForm , msgText ){
var sexText = win.find('#emp-sex').combobox('getValue');
var sex = '';
if( '男' == sexText || 'true' == sexText ){ sex = 'true' }else if( '女' == sexText || 'false' == sexText ){ sex = 'false' }
win.find('#emp-sex-sub').val(sex);
var leadText = win.find('#emp-lead').combobox('getValue');
var lead = '';
if( '是' == leadText || 'true' == leadText ){ lead = 'true' }else if( '否' == leadText || 'false' == leadText ){ lead = 'false' }
win.find('#emp-lead-sub').val(lead);
$.ajax({
url : url,
type : 'POST',
data : empForm.serialize(),
statusCode : {
201 : function () {
showMsg(msgText)
},
204 : function () {
showMsg(msgText);
},
500 : function () {
$.messager.alert('提示', '服务器内部错误!', 'error');
}
}
});
}
/**
* 1.显示提示信息
* 2.关闭表单窗口
* 3. 重新加载datagrid
* @param msgText 提示信息
*/
function showMsg( msgText ){
$.messager.show({title: '提示',msg: msgText,timeout: 2000,showType: 'slide'});
grid.datagrid('reload');
win.window('destroy');
grid.datagrid('reload');
}
/**
* 设置表单值
* @param rowData datagrid行
*/
function setFormValue( rowData ){
win.find('#emp-id').val(rowData.id);
win.find('#emp-loginNumber').val(rowData.loginNumber);
win.find('#emp-name').val(rowData.name);
var v = rowData.sex == true ? '男' : '女';
win.find('#emp-sex').combobox('select',v);
win.find('#emp-phone').val(rowData.phone);
win.find('#emp-city').val(rowData.city);
win.find('#emp-birthday').datebox('setValue',formateBirthday(rowData.birthday));
v = rowData.lead == true ? '是' : '否';
win.find('#emp-lead').combobox('select',v);
}
});
</script>
</body>
</html>
配置文件
spring-mvc
<?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:context="http://www.springframework.org/schema/context"
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/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd">
<context:component-scan base-package="com.laolang.jc.one.manage.web.web"></context:component-scan>
<mvc:annotation-driven>
</mvc:annotation-driven>
<mvc:resources location="/assets/" mapping="/assets/**"/>
<!-- beetl 配置 -->
<bean id="beetlConfig" class="org.beetl.ext.spring.BeetlGroupUtilConfiguration" init-method="init"/>
<bean id="viewResolver" class="org.beetl.ext.spring.BeetlSpringViewResolver">
<property name="contentType" value="text/html;charset=UTF-8"/>
</bean>
</beans>
spring-public
<?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:context="http://www.springframework.org/schema/context"
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">
<context:component-scan base-package="com.laolang"></context:component-scan>
<!-- 导入配置文件 -->
<bean
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<!-- 允许JVM参数覆盖 -->
<property name="systemPropertiesModeName" value="SYSTEM_PROPERTIES_MODE_OVERRIDE" />
<!-- 忽略没有找到的资源文件 -->
<property name="ignoreResourceNotFound" value="true" />
<!-- 配置资源文件 -->
<property name="locations">
<list>
<value>classpath:db.properties</value>
</list>
</property>
</bean>
<!-- 配置 druid数据源 -->
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"
init-method="init" destroy-method="close">
<!-- 基本属性 url、user、password -->
<property name="url" value="${jdbc.jdbcUrl}" />
<property name="username" value="${jdbc.user}" />
<property name="password" value="${jdbc.password}" />
<!-- 配置初始化大小、最小、最大 -->
<property name="initialSize" value="1" />
<property name="minIdle" value="1" />
<property name="maxActive" value="20" />
<!-- 配置获取连接等待超时的时间 -->
<property name="maxWait" value="60000" />
<!-- 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 -->
<property name="timeBetweenEvictionRunsMillis" value="60000" />
<!-- 配置一个连接在池中最小生存的时间,单位是毫秒 -->
<property name="minEvictableIdleTimeMillis" value="300000" />
<property name="validationQuery" value="SELECT 'x'" />
<property name="testWhileIdle" value="true" />
<property name="testOnBorrow" value="false" />
<property name="testOnReturn" value="false" />
<!-- 打开PSCache,并且指定每个连接上PSCache的大小 -->
<property name="poolPreparedStatements" value="true" />
<property name="maxPoolPreparedStatementPerConnectionSize"
value="20" />
<!-- 配置监控统计拦截的filters,去掉后监控界面sql无法统计 -->
<property name="filters" value="stat" />
</bean>
</beans>
spring-mybatis
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<!-- 配置SqlSessionFactory -->
<bean id="sqlSessionFactoryBean" class="org.mybatis.spring.SqlSessionFactoryBean">
<!-- 数据源 -->
<property name="dataSource" ref="dataSource" />
<!-- 配置 mybatis 配置文件 -->
<property name="configLocation" value="classpath:mybatis/mybatis-config.xml"></property>
<!-- sql 映射文件 -->
<!--<property name="mapperLocations" value="classpath:mybatis/**/mapping/*.xml"
/> -->
<property name="typeAliasesPackage" value="com.laolang.jc.one.manage.domain" />
</bean>
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<!-- 会话工厂 -->
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactoryBean" />
<!-- 扫描包路径 多个包中间用半角逗号分隔 -->
<property name="basePackage" value="com.laolang.jc.one.manage.mapper" />
</bean>
<bean class="tk.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.laolang.jc.one.manage.mapper" />
<property name="properties">
<value>
mappers=tk.mybatis.mapper.common.Mapper
</value>
</property>
</bean>
</beans>
spring-transaction
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<!-- 配置SqlSessionFactory -->
<bean id="sqlSessionFactoryBean" class="org.mybatis.spring.SqlSessionFactoryBean">
<!-- 数据源 -->
<property name="dataSource" ref="dataSource" />
<!-- 配置 mybatis 配置文件 -->
<property name="configLocation" value="classpath:mybatis/mybatis-config.xml"></property>
<!-- sql 映射文件 -->
<!--<property name="mapperLocations" value="classpath:mybatis/**/mapping/*.xml"
/> -->
<property name="typeAliasesPackage" value="com.laolang.jc.one.manage.domain" />
</bean>
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<!-- 会话工厂 -->
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactoryBean" />
<!-- 扫描包路径 多个包中间用半角逗号分隔 -->
<property name="basePackage" value="com.laolang.jc.one.manage.mapper" />
</bean>
<bean class="tk.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.laolang.jc.one.manage.mapper" />
<property name="properties">
<value>
mappers=tk.mybatis.mapper.common.Mapper
</value>
</property>
</bean>
</beans>
运行效果
mysql
CREATE TABLE `tb_employee` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '员工ID',
`login_number` varchar(20) NOT NULL COMMENT '登陆名,也是员工编号',
`name` varchar(20) NOT NULL COMMENT '员工姓名',
`sex` tinyint(1) NOT NULL DEFAULT '1' COMMENT '员工性别,1:男,0:女',
`pwd` varchar(150) NOT NULL COMMENT '员工登陆密码',
`birthday` date DEFAULT NULL COMMENT '出生日期',
`city` varchar(50) DEFAULT NULL COMMENT '居住地[城市名]',
`phone` varchar(20) NOT NULL COMMENT '办公室电话',
`lead` tinyint(1) NOT NULL DEFAULT '1' COMMENT '是否领导,1:是,0不是',
`created` datetime DEFAULT NULL COMMENT '创建时间',
`updated` datetime DEFAULT NULL COMMENT '创建时间',
PRIMARY KEY (`id`),
UNIQUE KEY `login_number` (`login_number`)
) ENGINE=InnoDB AUTO_INCREMENT=4510 DEFAULT CHARSET=utf8 COMMENT='员工表';
项目地址
http://git.oschina.net/laolang2016/jcone/tree/ssm-1.1.0/