pom
1<?xml version="1.0" encoding="UTF-8"?>
2<project xmlns="http://maven.apache.org/POM/4.0.0"
3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
5 <modelVersion>4.0.0</modelVersion>
6
7 <groupId>com.laolang.jc.one</groupId>
8 <artifactId>jcone-parent</artifactId>
9 <version>1.0-SNAPSHOT</version>
10 <packaging>pom</packaging>
11
12 <!-- 集中定义依赖版本号 -->
13 <properties>
14 <!-- test -->
15 <junit.version>4.10</junit.version>
16 <hamcrest.version>1.3</hamcrest.version>
17
18
19 <!-- java ee -->
20 <javaee-api.version>7.0</javaee-api.version>
21 <servlet-api.version>3.0.1</servlet-api.version>
22 <persistence-api.version>1.0</persistence-api.version>
23 <jstl.version>1.2</jstl.version>
24 <standard.version>1.1.2</standard.version>
25
26
27 <!-- spring -->
28 <spring.version>4.2.0.RELEASE</spring.version>
29
30 <!-- mybatis -->
31 <mybatis.version>3.2.8</mybatis.version>
32 <mybatis.spring.version>1.2.2</mybatis.spring.version>
33 <mybatis.paginator.version>1.2.15</mybatis.paginator.version>
34 <pagehelper.version>4.0.3</pagehelper.version>
35 <tk.mapper.version>3.2.2</tk.mapper.version>
36
37
38 <mysql.version>5.1.32</mysql.version>
39
40 <!-- log -->
41 <slf4j.version>1.7.12</slf4j.version>
42 <logback.version>1.1.3</logback.version>
43 <logback.ext.version>0.1.2</logback.ext.version>
44
45 <!-- json -->
46 <jackson.version>2.4.2</jackson.version>
47 <jackson.mapper.version>1.9.13</jackson.mapper.version>
48
49 <!-- google -->
50 <gson.version>2.2.2</gson.version>
51 <guava.version>18.0</guava.version>
52
53 <!-- alibaba -->
54 <druid.version>1.0.12</druid.version>
55
56 <!-- apache -->
57 <httpclient.version>4.5</httpclient.version>
58 <commons-lang3.version>3.3.2</commons-lang3.version>
59 <commons-io.version>2.5</commons-io.version>
60 <commons-fileupload.version>1.3.2</commons-fileupload.version>
61 <commons-net.version>3.3</commons-net.version>
62 <commons-codec.version>1.9</commons-codec.version>
63
64 <!-- beetl -->
65 <beetl.version>2.7.5</beetl.version>
66
67 <!-- jedis -->
68 <jedis.version>2.6.3</jedis.version>
69
70 <!-- JSR 303 -->
71 <hibernate-validator.version>5.1.3.Final</hibernate-validator.version>
72 <validator-api.version>1.1.0.Final</validator-api.version>
73
74 <joda-time.version>2.5</joda-time.version>
75
76 <cglib.versoin>3.1</cglib.versoin>
77
78 <quartz.versoin>2.2.1</quartz.versoin>
79
80 <spring-rabbit.version>1.4.0.RELEASE</spring-rabbit.version>
81
82 </properties>
83
84 <dependencyManagement>
85 <dependencies>
86 <!-- test -->
87 <dependency>
88 <groupId>junit</groupId>
89 <artifactId>junit</artifactId>
90 <version>${junit.version}</version>
91 <scope>test</scope>
92 </dependency>
93 <dependency>
94 <groupId>org.hamcrest</groupId>
95 <artifactId>hamcrest-all</artifactId>
96 <version>${hamcrest.version}</version>
97 <scope>test</scope>
98 </dependency>
99
100 <!-- java ee-->
101 <dependency>
102 <groupId>javax</groupId>
103 <artifactId>javaee-api</artifactId>
104 <version>${javaee-api.version}</version>
105 <scope>provided</scope>
106 </dependency>
107 <dependency>
108 <groupId>javax.servlet</groupId>
109 <artifactId>javax.servlet-api</artifactId>
110 <version>${servlet-api.version}</version>
111 <scope>provided</scope>
112 </dependency>
113 <dependency>
114 <groupId>javax.persistence</groupId>
115 <artifactId>persistence-api</artifactId>
116 <version>1.0</version>
117 </dependency>
118 <dependency>
119 <groupId>jstl</groupId>
120 <artifactId>jstl</artifactId>
121 <version>${jstl.version}</version>
122 </dependency>
123 <dependency>
124 <groupId>taglibs</groupId>
125 <artifactId>standard</artifactId>
126 <version>${standard.version}</version>
127 </dependency>
128
129 <!-- Spring -->
130 <dependency>
131 <groupId>org.springframework</groupId>
132 <artifactId>spring-context</artifactId>
133 <version>${spring.version}</version>
134 </dependency>
135 <dependency>
136 <groupId>org.springframework</groupId>
137 <artifactId>spring-oxm</artifactId>
138 <version>${spring.version}</version>
139 </dependency>
140 <dependency>
141 <groupId>org.springframework</groupId>
142 <artifactId>spring-tx</artifactId>
143 <version>${spring.version}</version>
144 </dependency>
145 <dependency>
146 <groupId>org.springframework</groupId>
147 <artifactId>spring-jdbc</artifactId>
148 <version>${spring.version}</version>
149 </dependency>
150 <dependency>
151 <groupId>org.springframework</groupId>
152 <artifactId>spring-beans</artifactId>
153 <version>${spring.version}</version>
154 </dependency>
155 <dependency>
156 <groupId>org.springframework</groupId>
157 <artifactId>spring-aop</artifactId>
158 <version>${spring.version}</version>
159 </dependency>
160 <dependency>
161 <groupId>org.springframework</groupId>
162 <artifactId>spring-test</artifactId>
163 <version>${spring.version}</version>
164 </dependency>
165 <dependency>
166 <groupId>org.springframework</groupId>
167 <artifactId>spring-aspects</artifactId>
168 <version>${spring.version}</version>
169 </dependency>
170 <dependency>
171 <groupId>org.springframework</groupId>
172 <artifactId>spring-web</artifactId>
173 <version>${spring.version}</version>
174 </dependency>
175 <dependency>
176 <groupId>org.springframework</groupId>
177 <artifactId>spring-webmvc</artifactId>
178 <version>${spring.version}</version>
179 </dependency>
180 <dependency>
181 <groupId>org.springframework</groupId>
182 <artifactId>spring-core</artifactId>
183 <version>${spring.version}</version>
184 </dependency>
185
186 <!-- JSR 303 -->
187 <dependency>
188 <groupId>javax.validation</groupId>
189 <artifactId>validation-api</artifactId>
190 <version>${validator-api.version}</version>
191 </dependency>
192
193 <dependency>
194 <groupId>org.hibernate</groupId>
195 <artifactId>hibernate-validator</artifactId>
196 <version>${hibernate-validator.version}</version>
197 </dependency>
198
199
200 <!-- beetl -->
201 <dependency>
202 <groupId>com.ibeetl</groupId>
203 <artifactId>beetl</artifactId>
204 <version>${beetl.version}</version>
205 </dependency>
206
207 <!-- Mybatis -->
208 <dependency>
209 <groupId>org.mybatis</groupId>
210 <artifactId>mybatis</artifactId>
211 <version>${mybatis.version}</version>
212 </dependency>
213 <dependency>
214 <groupId>org.mybatis</groupId>
215 <artifactId>mybatis-spring</artifactId>
216 <version>${mybatis.spring.version}</version>
217 </dependency>
218 <dependency>
219 <groupId>com.github.pagehelper</groupId>
220 <artifactId>pagehelper</artifactId>
221 <version>${pagehelper.version}</version>
222 </dependency>
223 <dependency>
224 <groupId>tk.mybatis</groupId>
225 <artifactId>mapper</artifactId>
226 <version>${tk.mapper.version}</version>
227 </dependency>
228
229
230 <!-- MySql -->
231 <dependency>
232 <groupId>mysql</groupId>
233 <artifactId>mysql-connector-java</artifactId>
234 <version>${mysql.version}</version>
235 </dependency>
236
237 <!-- alibaba -->
238 <dependency>
239 <groupId>com.alibaba</groupId>
240 <artifactId>druid</artifactId>
241 <version>${druid.version}</version>
242 </dependency>
243
244 <!-- Jackson Json处理工具包 -->
245 <dependency>
246 <groupId>org.codehaus.jackson</groupId>
247 <artifactId>jackson-mapper-asl</artifactId>
248 <version>${jackson.mapper.version}</version>
249 </dependency>
250 <dependency>
251 <groupId>com.fasterxml.jackson.core</groupId>
252 <artifactId>jackson-core</artifactId>
253 <version>${jackson.version}</version>
254 </dependency>
255 <dependency>
256 <groupId>com.fasterxml.jackson.core</groupId>
257 <artifactId>jackson-databind</artifactId>
258 <version>${jackson.version}</version>
259 </dependency>
260 <dependency>
261 <groupId>com.fasterxml.jackson.core</groupId>
262 <artifactId>jackson-annotations</artifactId>
263 <version>${jackson.version}</version>
264 </dependency>
265
266 <!-- google -->
267 <dependency>
268 <groupId>com.google.code.gson</groupId>
269 <artifactId>gson</artifactId>
270 <version>${gson.version}</version>
271 </dependency>
272 <dependency>
273 <groupId>com.google.guava</groupId>
274 <artifactId>guava</artifactId>
275 <version>${guava.version}</version>
276 </dependency>
277
278 <!-- apache -->
279 <dependency>
280 <groupId>org.apache.commons</groupId>
281 <artifactId>commons-lang3</artifactId>
282 <version>${commons-lang3.version}</version>
283 </dependency>
284 <dependency>
285 <groupId>commons-io</groupId>
286 <artifactId>commons-io</artifactId>
287 <version>${commons-io.version}</version>
288 </dependency>
289 <dependency>
290 <groupId>commons-fileupload</groupId>
291 <artifactId>commons-fileupload</artifactId>
292 <version>${commons-fileupload.version}</version>
293 </dependency>
294 <dependency>
295 <groupId>org.apache.httpcomponents</groupId>
296 <artifactId>httpclient</artifactId>
297 <version>${httpclient.version}</version>
298 </dependency>
299 <dependency>
300 <groupId>commons-net</groupId>
301 <artifactId>commons-net</artifactId>
302 <version>${commons-net.version}</version>
303 </dependency>
304 <dependency>
305 <groupId>commons-codec</groupId>
306 <artifactId>commons-codec</artifactId>
307 <version>${commons-codec.version}</version>
308 </dependency>
309
310 <!-- logback -->
311 <dependency>
312 <groupId>org.slf4j</groupId>
313 <artifactId>slf4j-api</artifactId>
314 <version>${slf4j.version}</version>
315 </dependency>
316 <dependency>
317 <groupId>org.slf4j</groupId>
318 <artifactId>jcl-over-slf4j</artifactId>
319 <version>${slf4j.version}</version>
320 </dependency>
321 <dependency>
322 <groupId>ch.qos.logback</groupId>
323 <artifactId>logback-core</artifactId>
324 <version>${logback.version}</version>
325 </dependency>
326 <dependency>
327 <groupId>ch.qos.logback</groupId>
328 <artifactId>logback-classic</artifactId>
329 <version>${logback.version}</version>
330 </dependency>
331 <dependency>
332 <groupId>org.logback-extensions</groupId>
333 <artifactId>logback-ext-spring</artifactId>
334 <version>${logback.ext.version}</version>
335 </dependency>
336
337
338 <!-- 时间操作组件 -->
339 <dependency>
340 <groupId>joda-time</groupId>
341 <artifactId>joda-time</artifactId>
342 <version>${joda-time.version}</version>
343 </dependency>
344
345 <!-- jedis -->
346 <dependency>
347 <groupId>redis.clients</groupId>
348 <artifactId>jedis</artifactId>
349 <version>${jedis.version}</version>
350 </dependency>
351
352 <!-- 动态代理 -->
353 <dependency>
354 <groupId>cglib</groupId>
355 <artifactId>cglib</artifactId>
356 <version>${cglib.versoin}</version>
357 </dependency>
358
359 <!-- quartz -->
360 <dependency>
361 <groupId>org.quartz-scheduler</groupId>
362 <artifactId>quartz</artifactId>
363 <version>${quartz.versoin}</version>
364 </dependency>
365
366 <!-- RabbitMQ -->
367 <dependency>
368 <groupId>org.springframework.amqp</groupId>
369 <artifactId>spring-rabbit</artifactId>
370 <version>${spring-rabbit.version}</version>
371 </dependency>
372
373
374 </dependencies>
375 </dependencyManagement>
376
377 <build>
378 <finalName>${project.artifactId}</finalName>
379 <plugins>
380 <!-- 资源文件拷贝插件 -->
381 <plugin>
382 <groupId>org.apache.maven.plugins</groupId>
383 <artifactId>maven-resources-plugin</artifactId>
384 <version>2.7</version>
385 <configuration>
386 <encoding>UTF-8</encoding>
387 </configuration>
388 </plugin>
389 <!-- java编译插件 -->
390 <plugin>
391 <groupId>org.apache.maven.plugins</groupId>
392 <artifactId>maven-compiler-plugin</artifactId>
393 <version>3.2</version>
394 <configuration>
395 <source>1.7</source>
396 <target>1.7</target>
397 <encoding>UTF-8</encoding>
398 </configuration>
399 </plugin>
400 </plugins>
401 <pluginManagement>
402 <plugins>
403 <!-- 配置Tomcat插件 -->
404 <plugin>
405 <groupId>org.apache.tomcat.maven</groupId>
406 <artifactId>tomcat7-maven-plugin</artifactId>
407 <version>2.2</version>
408 </plugin>
409 </plugins>
410 </pluginManagement>
411 </build>
412</project>
java
bean
BaseDomain
1package com.laolang.jc.one.manage.domain;
2
3import java.util.Date;
4
5789
10public class BaseDomain {
11
12 14
15 protected Date created;
16
17 19
20 protected Date updated;
21
22 public Date getCreated() {
23 return created;
24 }
25 public void setCreated(Date created) {
26 this.created = created;
27 }
28 public Date getUpdated() {
29 return updated;
30 }
31 public void setUpdated(Date updated) {
32 this.updated = updated;
33 }
34}
Employee
1package com.laolang.jc.one.manage.domain;
2
3import org.springframework.format.annotation.DateTimeFormat;
4
5import java.util.Date;
6
7import javax.persistence.*;
8
9111213
14@Table(name = "tb_employee")
15public class Employee extends BaseDomain {
16
17 public Employee() {
18 }
19
20 @Override
21 public String toString() {
22 return "Employee{" +
23 "id=" + id +
24 ", loginNumber='" + loginNumber + '\'' +
25 ", name='" + name + '\'' +
26 ", sex=" + sex +
27 ", pwd='" + pwd + '\'' +
28 ", birthday=" + birthday +
29 ", city='" + city + '\'' +
30 ", phone='" + phone + '\'' +
31 ", lead=" + lead +
32 ", created=" + created +
33 ", updated=" + updated +
34 '}';
35 }
36
37 public Long getId() {
38 return id;
39 }
40
41 public void setId(Long id) {
42 this.id = id;
43 }
44
45 public String getName() {
46 return name;
47 }
48
49 public void setName(String name) {
50 this.name = name;
51 }
52
53 public boolean isSex() {
54 return sex;
55 }
56
57 public void setSex(boolean sex) {
58 this.sex = sex;
59 }
60
61 public String getPwd() {
62 return pwd;
63 }
64
65 public void setPwd(String pwd) {
66 this.pwd = pwd;
67 }
68
69 public Date getBirthday() {
70 return birthday;
71 }
72
73 public void setBirthday(Date birthday) {
74 this.birthday = birthday;
75 }
76
77 public String getCity() {
78 return city;
79 }
80
81 public void setCity(String city) {
82 this.city = city;
83 }
84
85 public String getPhone() {
86 return phone;
87 }
88
89 public void setPhone(String phone) {
90 this.phone = phone;
91 }
92
93 public boolean isLead() {
94 return lead;
95 }
96
97 public void setLead(boolean lead) {
98 this.lead = lead;
99 }
100
101 public String getLoginNumber() {
102 return loginNumber;
103 }
104
105 public void setLoginNumber(String loginNumber) {
106 this.loginNumber = loginNumber;
107 }
108
109 111
112 @Id
113 @GeneratedValue(strategy = GenerationType.IDENTITY)
114 private Long id;
115
116 118
119 @Column(name = "login_number")
120 private String loginNumber;
121
122 124
125 private String name;
126
127 131
132 private boolean sex;
133
134 136
137 private String pwd;
138
139 141
142 @DateTimeFormat(pattern="yyyy-MM-dd")
143 private Date birthday;
144
145 147
148 private String city;
149
150 152
153 private String phone;
154
155 159
160 private boolean lead;
161}
Mapper
1package com.laolang.jc.one.manage.mapper;
2
3
4import com.laolang.jc.one.manage.domain.Employee;
5import tk.mybatis.mapper.common.Mapper;
6
7public interface EmployeeMapper extends Mapper<Employee> {
8}
9
service
BaseService
1package com.laolang.jc.one.manage.service;
2
3import com.github.pagehelper.PageHelper;
4import com.github.pagehelper.PageInfo;
5import com.laolang.jc.one.manage.domain.BaseDomain;
6import org.springframework.beans.factory.annotation.Autowired;
7import tk.mybatis.mapper.common.Mapper;
8import tk.mybatis.mapper.entity.Example;
9
10import java.util.Date;
11import java.util.List;
12
13public abstract class BaseService<T extends BaseDomain> {
14
15// 不使用泛型注入的方法
16// public abstract Mapper<T> getMapper();
17
18 @Autowired
19 protected Mapper<T> mapper;
20
21 232425
26 public Integer findCountByWhere( T t){
27 return mapper.selectCount(t);
28 }
29
30 333435
36 public T findById(Long id) {
37 return mapper.selectByPrimaryKey(id);
38 }
39
40
41 4445
46 public List<T> findAll() {
47 return mapper.selectAll();
48 }
49
50 535455
56 public T findOne(T t) {
57 return mapper.selectOne(t);
58 }
59
60 636465
66 public List<T> findListByWhere(T t) {
67 return mapper.select(t);
68 }
69
70 7374757677
78 public PageInfo<T> findPageListByWhere(Integer page, Integer rows, T t) {
79 PageHelper.startPage(page, rows);
80 List<T> list = mapper.select(t);
81 return new PageInfo<T>(list);
82 }
83
84 878889
90 public Integer save(T t) {
91 t.setCreated(new Date());
92 t.setUpdated(t.getCreated());
93 return mapper.insert(t);
94 }
95
96 99100101
102 public Integer saveSelective(T t) {
103 t.setCreated(new Date());
104 t.setUpdated(t.getCreated());
105 return mapper.insertSelective(t);
106 }
107
108
109 112113114
115 public Integer updateByPrimaryKey(T t) {
116 t.setUpdated(new Date());
117 return mapper.updateByPrimaryKey(t);
118 }
119
120 123124125
126 public Integer updateByPrimaryKeySelective(T t) {
127 t.setUpdated(new Date());
128 return mapper.updateByPrimaryKeySelective(t);
129 }
130
131 134135136
137 public Integer deleteById(Long id) {
138 return mapper.deleteByPrimaryKey(id);
139 }
140
141 144145146147148
149 public Integer deleteByIds(Class<T> clazz, String property, List< Object> values) {
150 Example example = new Example(clazz);
151 example.createCriteria().andIn(property, values);
152 return mapper.deleteByExample(example);
153 }
154
155 158159160
161 public Integer deleteByWhere(T t) {
162 return mapper.delete(t);
163 }
164
165
166
167
168}
169
EmployeeService
1package com.laolang.jc.one.manage.service;
2
3
4import com.laolang.jc.one.manage.domain.Employee;
5import org.springframework.stereotype.Service;
6
7@Service
8public class EmployeeService extends BaseService<Employee> {
9
10
11}
12
pojo
1package com.laolang.jc.one.manage.web.pojo;
2
3
4import java.util.List;
5
6public class EasyUIGridPojo<T> {
7
8 public EasyUIGridPojo() {
9 }
10
11 public List<T> getRows() {
12 return rows;
13 }
14
15 public void setRows(List<T> rows) {
16 this.rows = rows;
17 }
18
19 public Long getTotal() {
20 return total;
21 }
22
23 public void setTotal(Long total) {
24 this.total = total;
25 }
26
27 private List<T> rows;
28
29 private Long total;
30}
31
controller
1package com.laolang.jc.one.manage.web.web;
2
3import com.github.pagehelper.PageInfo;
4import com.laolang.jc.one.manage.domain.Employee;
5import com.laolang.jc.one.manage.service.EmployeeService;
6import com.laolang.jc.one.manage.web.pojo.EasyUIGridPojo;
7import org.apache.commons.lang3.StringUtils;
8import org.springframework.beans.factory.annotation.Autowired;
9import org.springframework.http.HttpStatus;
10import org.springframework.http.ResponseEntity;
11import org.springframework.stereotype.Controller;
12import org.springframework.web.bind.annotation.RequestMapping;
13import org.springframework.web.bind.annotation.RequestMethod;
14import org.springframework.web.bind.annotation.RequestParam;
15
16import java.util.ArrayList;
17import java.util.List;
18
19@RequestMapping("employee")
20@Controller
21public class EmployeeController {
22
23
24
25 @Autowired
26 private EmployeeService employeeService;
27
28 30313233
34 @RequestMapping(value = "list", method = RequestMethod.GET)
35 public ResponseEntity<EasyUIGridPojo<Employee>> list(@RequestParam(value = "page", defaultValue = "1") Integer page, @RequestParam(value = "rows", defaultValue = "30")
36 Integer rows) {
37 PageInfo<Employee> pageInfo = employeeService.findPageListByWhere(page,rows,null);
38 EasyUIGridPojo<Employee> gridPojo = new EasyUIGridPojo<>();
39 gridPojo.setTotal(pageInfo.getTotal());
40 gridPojo.setRows(pageInfo.getList());
41 return ResponseEntity.ok(gridPojo);
42 }
43
44 464751
52 @RequestMapping(value = "delete",method = RequestMethod.POST)
53 public ResponseEntity<Void> delete( @RequestParam(value = "ids") String ids ){
54 String[] idArray = StringUtils.split(ids,'-');
55 if ( null == idArray || 0 == idArray.length ){
56 return ResponseEntity.status(HttpStatus.BAD_REQUEST).build();
57 }
58
59 try{
60 if( 1 == idArray.length ){
61 employeeService.deleteById(Long.parseLong(idArray[0]));
62 }else{
63 List<Object> idList = new ArrayList<>();
64 for (String s : idArray) {
65 idList.add(Long.parseLong(s));
66 }
67 employeeService.deleteByIds(Employee.class,"id",idList);
68 }
69 return ResponseEntity.status(HttpStatus.NO_CONTENT).build();
70 }catch (Exception e){
71 return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).build();
72 }
73 }
74
75 777881
82 @RequestMapping(value = "save",method = RequestMethod.POST)
83 public ResponseEntity<Void> save( Employee employee ){
84 try{
85 System.out.println(employee);
86 employee.setPwd("123456");
87 employeeService.saveSelective(employee);
88 return ResponseEntity.status(HttpStatus.CREATED).build();
89 }catch (Exception e){
90 return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).build();
91 }
92 }
93
94 969798
99 @RequestMapping(value = "update",method = RequestMethod.POST)
100 public ResponseEntity<Void> update( Employee employee ){
101 try{
102 System.out.println(employee);
103 employeeService.updateByPrimaryKeySelective(employee);
104 return ResponseEntity.status(HttpStatus.NO_CONTENT).build();
105 }catch (Exception e){
106 return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).build();
107 }
108 }
109}
110
page
index.html
1<!DOCTYPE html>
2<html>
3<head lang="en">
4 <meta charset="UTF-8">
5 <title>index</title>
6 <link rel="stylesheet" type="text/css" href="https://my.oschina.net/assets/jquery-easyui-1.4.5/themes/default/easyui.css" />
7 <link rel="stylesheet" type="text/css" href="https://my.oschina.net/assets/jquery-easyui-1.4.5/themes/icon.css" />
8
9</head>
10<body class="easyui-layout">
11
12<div data-options="region:'north',title:'header',split:true,noheader:true" style="height:45px;">
13 banner
14</div>
15<!--<div data-options="region:'south',title:'footer',split:true,noheader:true" style="height:35px;line-height:30px;text-align:center;">-->
16 <!--copyRight-->
17<!--</div>-->
18<div data-options="region:'west',title:'导航',split:true,iconCls:'icon-world'" style="width:180px;padding:10px;">
19 <ul id="nav" class="easyui-tree" data-options="lines:true,animate:true">
20 <li>
21 <span>员工管理</span>
22 <ul>
23 <li>员工查询</li>
24 </ul>
25 </li>
26 <li>
27 <span>消息管理</span>
28 <ul>
29 <li>消息查询</li>
30 </ul>
31 </li>
32 </ul>
33</div>
34<div data-options="region:'center'" style="overflow:hidden;">
35 <div id="tabs">
36 <div title="起始页" iconCls="icon-home" style="padding:0 10px;display:block;">
37 欢迎来到后台管理系统!
38 </div>
39 </div>
40</div>
41
42
43<script type="text/javascript" src="https://my.oschina.net/assets/jquery/jquery.min.js"></script>
44<script type="text/javascript" src="https://my.oschina.net/assets/jquery-easyui-1.4.5/jquery.easyui.min.js"></script>
45<script type="text/javascript" src="https://my.oschina.net/assets/jquery-easyui-1.4.5/locale/easyui-lang-zh_CN.js"></script>
46
47<script type="text/javascript">
48
49 515253
54 function getUrl( menuText ){
55 if ( '员工查询' == menuText ){
56 return 'page/employee/list';
57 }else if( '消息查询' == menuText ){
58 return 'page/message/list';
59 }
60
61 return '';
62 }
63
64 $(function () {
65 console.log('jc one!');
66
67 var tab = $('#tabs');
68 var nav = $('#nav');
69 // 初始化tab
70 tab.tabs({
71 fit : true,
72 border : false
73 });
74
75 // tree 点击事件
76 nav.tree({
77 onClick : function (node) {
78 if( nav.tree('isLeaf',node.target) ){
79 var text = node.text;
80 var url = getUrl(text);
81 if( tab.tabs('exists',text)){
82 tab.tabs('select',text);
83 }else{
84 if ( url !== '') {
85 tab.tabs('add',{
86 url:url,
87 closable : true,
88 title : text,
89 href : url
90 });
91 }
92 }
93 }
94 }
95 });
96 });
97
98
99</script>
100</body>
101</html>
list.html
1<!DOCTYPE html>
2<html>
3<head lang="en">
4 <meta charset="UTF-8">
5 <title></title>
6</head>
7<body>
8<table id="employee-data"></table>
9
10<script type="text/javascript">
11 $(function () {
12 var grid = $('#employee-data');
13 var win = $('<div>');
14 grid.datagrid({
15 loadMsg:'数据加载中....',
16 url : 'http://manage.jcone.com/employee/list',
17 idField : 'id',
18 rownumbers : true,
19 striped : true,
20 pagination : true,
21 method : 'GET',
22 ctrlSelect : true,
23 pageSize : 30,
24 pageList : [30, 60, 90],
25 fitColumns : true,
26 toolbar : [{
27 text : '添加',
28 iconCls:'icon-add',
29 handler : function () {
30 createWindow({
31 type : 'save',
32 url : 'employee/save'
33 });
34 }
35 },'-',{
36 text : '编辑',
37 iconCls:'icon-edit',
38 handler : function () {
39 var rows = grid.datagrid('getSelections');
40 if( 0 == rows.length || rows.length > 1 ){
41 $.messager.show({title: '提示',msg: '请选择一条数据!',timeout: 2000,showType: 'slide'});
42 }else{
43 createWindow({
44 type : 'update',
45 url : 'employee/update',
46 rowData : rows[0]
47 });
48 }
49 }
50 },'-',{
51 text : '删除',
52 iconCls:'icon-remove',
53 handler : function () {
54 var ids = [];
55 var rows = grid.datagrid('getSelections');
56 if( rows.length > 0 ) {
57 for (var i = 0; i < rows.length; i++) {
58 ids.push(rows[i].id)
59 }
60 var idStr = '';
61 for (var i = 0; i < ids.length; i++) {
62 idStr += ids[i] + '-';
63 }
64 idStr = idStr.substr(0, idStr.length - 1);
65 $.ajax({
66 url: 'employee/delete',
67 data: 'ids=' + idStr,
68 type: 'POST',
69 statusCode: {
70 204: function (data) {
71 $.messager.show({title: '提示',msg: '已删除',timeout: 2000,showType: 'slide'});
72 grid.datagrid('reload');
73 },
74 400: function (data) {
75 $.messager.show({title: '提示',msg: '请求参数错误',timeout: 2000,showType: 'slide'});
76 },
77 500: function (data) {
78 $.messager.alert('提示', '服务器内部错误!', 'error');
79 }
80 }
81 });
82 }else{
83 $.messager.show({title: '提示',msg: '未选择数据',timeout: 2000,showType: 'slide'});
84 }
85
86 }
87 }],
88 columns : [
89 [{field : 'id',title : 'id',width : 100,checkbox:true},{field : 'loginNumber',title : '编号',width : 50},
90 {field : 'name',title : '姓名',width : 100},{field : 'sex',title : '性别',width : 50,formatter : formateSex},
91 {field : 'birthday',title : '出生日期',width : 80,formatter : formateBirthday},{field : 'lead',title : '是否领导',width : 50,formatter : formateLead},
92 {field : 'phone',title : '办公室电话',width : 100},{field : 'city',title : '住址',width : 100},
93 {field : 'created',title : '创建时间',width : 120,formatter : formateDateTime},{field : 'updated',title : '更新时间',width : 120,formatter : formateDateTime}
94 ]
95 ]
96 });
97
98
99 101102105
106 function formateSex( sex ){
107 if(!sex){
108 return '女'
109 }
110 return '男';
111 }
112
113 115116119
120 function formateLead( lead ){
121 if( !lead ){
122 return '否';
123 }
124 return '是';
125 }
126
127 129130131
132 function formateBirthday( birthday ){
133 var date = new Date(parseInt(birthday));
134 var b = date.getFullYear() + '-' + ( date.getMonth() - 1 ) + '-' + date.getDate();
135 return b;
136 }
137
138 140141142
143 function formateDateTime( datetime ){
144 var date = new Date(parseInt(datetime));
145 var b = date.getFullYear() + '-' + ( date.getMonth() - 1 ) + '-' + date.getDate() + ' ' + date.getHours() + ':' + date.getMinutes() + ':'+ date.getSeconds();
146 return b;
147 }
148
149 151157
158 function createWindow( winConfig ){
159 var type = winConfig.type;
160 var url = winConfig.url;
161 var winTitle = '';
162 var msgText = '';
163 if( 'save' == type ){
164 msgText = '新增成功!';
165 winTitle = '新增员工信息';
166 }else if( 'update' == type ){
167 msgText = '更新成功!';
168 winTitle = '更新员工信息';
169 }
170 win.css('padding','10px');
171 win.addClass('easyui-layout');
172 win.window({
173 width : 400,
174 height : 350,
175 modal : true,
176 closable : false,
177 maximizable : false,
178 collapsible : false,
179 resizable : false,
180 minimizable : false,
181 //{"北京市", "天津市", "唐山市", "邯郸市", "邢台市", "保定市", "承德市", "沧州市", "廊坊市", "衡水市", "太原市", "大同市", "阳泉市", "长治市", "晋城市", "晋中市", "运城市", "忻州市", "临汾市", "吕梁市", "朔州市"};
182 title : winTitle,
183 content : "<div data-options='region:center'><form id='employee-form'><table style='border-spacing:0px 10px'>\
184 <input id='emp-id' type='hidden' name='id'/>\
185 <tr><td>员工编号:</td><td><input id='emp-loginNumber' name='loginNumber' class='easyui-validatebox' data-options='required:true'/></td></tr>\
186 <tr><td>员工姓名:</td><td><input id='emp-name' name='name' class='easyui-validatebox' data-options='required:true'/></td></tr>\
187 <tr><td>员工性别:</td><td><select id='emp-sex' style='width:180px' class='easyui-combobox' data-options='editable:false,panelHeight:50'>\
188 <option value='true'>男</option><option value='false'>女</option></select>\
189 <input id='emp-sex-sub' type='hidden' name='sex'/></td></tr>\
190 <tr><td>办公室电话:</td><td><input id='emp-phone' name='phone' class='easyui-validatebox' data-options='required:true'/></td></tr>\
191 <tr><td>住址:</td><td><select id='emp-city' name='city' class='easyui-combobox'>\
192 <option value='北京市'>北京市</option><option value='大同市'>大同市</option><option value='太原市'>太原市</option>\
193 </select></td></tr>\
194 <tr><td>出生日期:</td><td><input id='emp-birthday' name='birthday' class='easyui-datebox' required ='required'/></td></tr>\
195 <tr><td>是否领导:</td><td><select id='emp-lead' style='width:180px' class='easyui-combobox' data-options='editable:false,panelHeight:50'>\
196 <option value='true'>是</option><option value='false'>否</option>\
197 </select> <input id='emp-lead-sub' type='hidden' name='lead'/></td></tr>\
198 </table></form></div>\
199 <div data-options='region:south' style='text-align:right;padding:5px 0 0'>\
200 <a id='form-btn-submit' class='easyui-linkbutton' href='javascript:void(0)' style='width:80px' >确定</a>\
201 <a id='form-btn-cancle' class='easyui-linkbutton' href='javascript:void(0)' style='width:80px' >取消</a>\
202 </div>",
203 onOpen : function () {
204 if( 'update' == type ){
205 setFormValue(winConfig.rowData);
206 }
207
208 win.find('#form-btn-submit').click(function () {
209 winSubFunc(url,win.find('#employee-form'),msgText);
210 });
211 win.find('#form-btn-cancle').click(function () {
212 win.window('destroy');
213 });
214 },
215 onClose : function () {
216 win.window('destroy');
217 }
218 });
219 }
220
221 223224225226
227 function winSubFunc( url , empForm , msgText ){
228 var sexText = win.find('#emp-sex').combobox('getValue');
229 var sex = '';
230 if( '男' == sexText || 'true' == sexText ){ sex = 'true' }else if( '女' == sexText || 'false' == sexText ){ sex = 'false' }
231 win.find('#emp-sex-sub').val(sex);
232
233 var leadText = win.find('#emp-lead').combobox('getValue');
234 var lead = '';
235 if( '是' == leadText || 'true' == leadText ){ lead = 'true' }else if( '否' == leadText || 'false' == leadText ){ lead = 'false' }
236 win.find('#emp-lead-sub').val(lead);
237
238 $.ajax({
239 url : url,
240 type : 'POST',
241 data : empForm.serialize(),
242 statusCode : {
243 201 : function () {
244 showMsg(msgText)
245 },
246 204 : function () {
247 showMsg(msgText);
248 },
249 500 : function () {
250 $.messager.alert('提示', '服务器内部错误!', 'error');
251 }
252 }
253 });
254 }
255
256 260261
262 function showMsg( msgText ){
263 $.messager.show({title: '提示',msg: msgText,timeout: 2000,showType: 'slide'});
264 grid.datagrid('reload');
265 win.window('destroy');
266 grid.datagrid('reload');
267 }
268
269 271272
273 function setFormValue( rowData ){
274 win.find('#emp-id').val(rowData.id);
275 win.find('#emp-loginNumber').val(rowData.loginNumber);
276 win.find('#emp-name').val(rowData.name);
277 var v = rowData.sex == true ? '男' : '女';
278 win.find('#emp-sex').combobox('select',v);
279 win.find('#emp-phone').val(rowData.phone);
280 win.find('#emp-city').val(rowData.city);
281 win.find('#emp-birthday').datebox('setValue',formateBirthday(rowData.birthday));
282 v = rowData.lead == true ? '是' : '否';
283 win.find('#emp-lead').combobox('select',v);
284 }
285 });
286</script>
287</body>
288</html>
配置文件
spring-mvc
1<?xml version="1.0" encoding="UTF-8"?>
2<beans xmlns="http://www.springframework.org/schema/beans"
3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
4 xmlns:mvc="http://www.springframework.org/schema/mvc"
5 xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
6 http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
7 http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd">
8
9 <context:component-scan base-package="com.laolang.jc.one.manage.web.web"></context:component-scan>
10
11
12 <mvc:annotation-driven>
13
14 </mvc:annotation-driven>
15
16 <mvc:resources location="/assets/" mapping="/assets/**"/>
17
18 <!-- beetl 配置 -->
19 <bean id="beetlConfig" class="org.beetl.ext.spring.BeetlGroupUtilConfiguration" init-method="init"/>
20 <bean id="viewResolver" class="org.beetl.ext.spring.BeetlSpringViewResolver">
21 <property name="contentType" value="text/html;charset=UTF-8"/>
22 </bean>
23</beans>
24
spring-public
1<?xml version="1.0" encoding="UTF-8"?>
2<beans xmlns="http://www.springframework.org/schema/beans"
3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
4 xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
5 http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
6
7 <context:component-scan base-package="com.laolang"></context:component-scan>
8
9
10 <!-- 导入配置文件 -->
11 <bean
12 class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
13 <!-- 允许JVM参数覆盖 -->
14 <property name="systemPropertiesModeName" value="SYSTEM_PROPERTIES_MODE_OVERRIDE" />
15 <!-- 忽略没有找到的资源文件 -->
16 <property name="ignoreResourceNotFound" value="true" />
17 <!-- 配置资源文件 -->
18 <property name="locations">
19 <list>
20 <value>classpath:db.properties</value>
21 </list>
22 </property>
23 </bean>
24
25 <!-- 配置 druid数据源 -->
26 <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"
27 init-method="init" destroy-method="close">
28 <!-- 基本属性 url、user、password -->
29 <property name="url" value="${jdbc.jdbcUrl}" />
30 <property name="username" value="${jdbc.user}" />
31 <property name="password" value="${jdbc.password}" />
32
33 <!-- 配置初始化大小、最小、最大 -->
34 <property name="initialSize" value="1" />
35 <property name="minIdle" value="1" />
36 <property name="maxActive" value="20" />
37
38 <!-- 配置获取连接等待超时的时间 -->
39 <property name="maxWait" value="60000" />
40
41 <!-- 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 -->
42 <property name="timeBetweenEvictionRunsMillis" value="60000" />
43
44 <!-- 配置一个连接在池中最小生存的时间,单位是毫秒 -->
45 <property name="minEvictableIdleTimeMillis" value="300000" />
46
47 <property name="validationQuery" value="SELECT 'x'" />
48 <property name="testWhileIdle" value="true" />
49 <property name="testOnBorrow" value="false" />
50 <property name="testOnReturn" value="false" />
51
52 <!-- 打开PSCache,并且指定每个连接上PSCache的大小 -->
53 <property name="poolPreparedStatements" value="true" />
54 <property name="maxPoolPreparedStatementPerConnectionSize"
55 value="20" />
56
57 <!-- 配置监控统计拦截的filters,去掉后监控界面sql无法统计 -->
58 <property name="filters" value="stat" />
59 </bean>
60</beans>
61
spring-mybatis
1<?xml version="1.0" encoding="UTF-8"?>
2<beans xmlns="http://www.springframework.org/schema/beans"
3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4 xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
5
6
7 <!-- 配置SqlSessionFactory -->
8 <bean id="sqlSessionFactoryBean" class="org.mybatis.spring.SqlSessionFactoryBean">
9 <!-- 数据源 -->
10 <property name="dataSource" ref="dataSource" />
11 <!-- 配置 mybatis 配置文件 -->
12 <property name="configLocation" value="classpath:mybatis/mybatis-config.xml"></property>
13 <!-- sql 映射文件 -->
14 <!--<property name="mapperLocations" value="classpath:mybatis/**/mapping/*.xml"
15 /> -->
16 <property name="typeAliasesPackage" value="com.laolang.jc.one.manage.domain" />
17 </bean>
18
19 <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
20 <!-- 会话工厂 -->
21 <property name="sqlSessionFactoryBeanName" value="sqlSessionFactoryBean" />
22 <!-- 扫描包路径 多个包中间用半角逗号分隔 -->
23 <property name="basePackage" value="com.laolang.jc.one.manage.mapper" />
24 </bean>
25
26 <bean class="tk.mybatis.spring.mapper.MapperScannerConfigurer">
27 <property name="basePackage" value="com.laolang.jc.one.manage.mapper" />
28 <property name="properties">
29 <value>
30 mappers=tk.mybatis.mapper.common.Mapper
31 </value>
32 </property>
33 </bean>
34
35
36</beans>
37
spring-transaction
1<?xml version="1.0" encoding="UTF-8"?>
2<beans xmlns="http://www.springframework.org/schema/beans"
3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4 xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
5
6
7 <!-- 配置SqlSessionFactory -->
8 <bean id="sqlSessionFactoryBean" class="org.mybatis.spring.SqlSessionFactoryBean">
9 <!-- 数据源 -->
10 <property name="dataSource" ref="dataSource" />
11 <!-- 配置 mybatis 配置文件 -->
12 <property name="configLocation" value="classpath:mybatis/mybatis-config.xml"></property>
13 <!-- sql 映射文件 -->
14 <!--<property name="mapperLocations" value="classpath:mybatis/**/mapping/*.xml"
15 /> -->
16 <property name="typeAliasesPackage" value="com.laolang.jc.one.manage.domain" />
17 </bean>
18
19 <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
20 <!-- 会话工厂 -->
21 <property name="sqlSessionFactoryBeanName" value="sqlSessionFactoryBean" />
22 <!-- 扫描包路径 多个包中间用半角逗号分隔 -->
23 <property name="basePackage" value="com.laolang.jc.one.manage.mapper" />
24 </bean>
25
26 <bean class="tk.mybatis.spring.mapper.MapperScannerConfigurer">
27 <property name="basePackage" value="com.laolang.jc.one.manage.mapper" />
28 <property name="properties">
29 <value>
30 mappers=tk.mybatis.mapper.common.Mapper
31 </value>
32 </property>
33 </bean>
34
35
36</beans>
37
运行效果


mysql
1CREATE TABLE `tb_employee` (
2 `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '员工ID',
3 `login_number` varchar(20) NOT NULL COMMENT '登陆名,也是员工编号',
4 `name` varchar(20) NOT NULL COMMENT '员工姓名',
5 `sex` tinyint(1) NOT NULL DEFAULT '1' COMMENT '员工性别,1:男,0:女',
6 `pwd` varchar(150) NOT NULL COMMENT '员工登陆密码',
7 `birthday` date DEFAULT NULL COMMENT '出生日期',
8 `city` varchar(50) DEFAULT NULL COMMENT '居住地[城市名]',
9 `phone` varchar(20) NOT NULL COMMENT '办公室电话',
10 `lead` tinyint(1) NOT NULL DEFAULT '1' COMMENT '是否领导,1:是,0不是',
11 `created` datetime DEFAULT NULL COMMENT '创建时间',
12 `updated` datetime DEFAULT NULL COMMENT '创建时间',
13 PRIMARY KEY (`id`),
14 UNIQUE KEY `login_number` (`login_number`)
15) ENGINE=InnoDB AUTO_INCREMENT=4510 DEFAULT CHARSET=utf8 COMMENT='员工表';
项目地址
http://git.oschina.net/laolang2016/jcone/tree/ssm-1.1.0/