首先我们需要建立好一个emaven项目,并且在pom.xml中导入响应的jar包,
1 <?xml version="1.0" encoding="UTF-8"?>
2
3 <project xmlns="http://maven.apache.org/POM/4.0.0" 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>cn.itsource</groupId>
8 <artifactId>crm</artifactId>
9 <version>1.0-SNAPSHOT</version>
10 <packaging>war</packaging>
11
12 <name>crm</name>
13 <url>http://www.example.com</url>
14
15 <properties>
16 <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
17 <maven.compiler.source>1.8</maven.compiler.source>
18 <maven.compiler.target>1.8</maven.compiler.target>
19 <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
20 <!-- spring版本号 -->
21 <spring.version>4.1.2.RELEASE</spring.version>
22 <!-- mybatis版本号 -->
23 <mybatis.version>3.2.1</mybatis.version>
24 <!-- log4j日志文件管理包版本 -->
25 <slf4j.version>1.7.2</slf4j.version>
26 <log4j.version>1.2.17</log4j.version>
27 <!-- jackson包版本 -->
28 <jackson.version>2.5.0</jackson.version>
29 </properties>
30
31 <dependencies>
32 <!--JUnit-->
33 <dependency>
34 <groupId>junit</groupId>
35 <artifactId>junit</artifactId>
36 <version>4.11</version>
37 <scope>test</scope>
38 </dependency>
39
40 <!--Spring核心-->
41 <dependency>
42 <groupId>org.springframework</groupId>
43 <artifactId>spring-aop</artifactId>
44 <version>${spring.version}</version>
45 </dependency>
46 <dependency>
47 <groupId>org.springframework</groupId>
48 <artifactId>spring-aspects</artifactId>
49 <version>${spring.version}</version>
50 </dependency>
51 <dependency>
52 <groupId>org.springframework</groupId>
53 <artifactId>spring-beans</artifactId>
54 <version>${spring.version}</version>
55 </dependency>
56 <dependency>
57 <groupId>org.springframework</groupId>
58 <artifactId>spring-context</artifactId>
59 <version>${spring.version}</version>
60 </dependency>
61 <dependency>
62 <groupId>org.springframework</groupId>
63 <artifactId>spring-core</artifactId>
64 <version>${spring.version}</version>
65 </dependency>
66 <dependency>
67 <groupId>org.springframework</groupId>
68 <artifactId>spring-expression</artifactId>
69 <version>${spring.version}</version>
70 </dependency>
71 <dependency>
72 <groupId>org.springframework</groupId>
73 <artifactId>spring-jdbc</artifactId>
74 <version>${spring.version}</version>
75 </dependency>
76 <dependency>
77 <groupId>org.springframework</groupId>
78 <artifactId>spring-test</artifactId>
79 <version>${spring.version}</version>
80 </dependency>
81 <dependency>
82 <groupId>org.springframework</groupId>
83 <artifactId>spring-tx</artifactId>
84 <version>${spring.version}</version>
85 </dependency>
86 <dependency>
87 <groupId>commons-logging</groupId>
88 <artifactId>commons-logging</artifactId>
89 <version>1.1.1</version>
90 </dependency>
91
92 <!--SpringMVC-->
93 <dependency>
94 <groupId>org.springframework</groupId>
95 <artifactId>spring-web</artifactId>
96 <version>${spring.version}</version>
97 </dependency>
98 <dependency>
99 <groupId>org.springframework</groupId>
100 <artifactId>spring-webmvc</artifactId>
101 <version>${spring.version}</version>
102 </dependency>
103
104 <!--aop依赖包-->
105 <dependency>
106 <groupId>aopalliance</groupId>
107 <artifactId>aopalliance</artifactId>
108 <version>1.0</version>
109 </dependency>
110 <dependency>
111 <groupId>org.aspectj</groupId>
112 <artifactId>aspectjweaver</artifactId>
113 <version>1.6.8</version>
114 </dependency>
115
116 <!--文件上传-->
117 <dependency>
118 <groupId>commons-fileupload</groupId>
119 <artifactId>commons-fileupload</artifactId>
120 <version>1.3.1</version>
121 </dependency>
122 <dependency>
123 <groupId>commons-io</groupId>
124 <artifactId>commons-io</artifactId>
125 <version>2.2</version>
126 </dependency>
127 <!--jackson-->
128 <dependency>
129 <groupId>com.fasterxml.jackson.core</groupId>
130 <artifactId>jackson-databind</artifactId>
131 <version>${jackson.version}</version>
132 </dependency>
133 <dependency>
134 <groupId>com.fasterxml.jackson.core</groupId>
135 <artifactId>jackson-core</artifactId>
136 <version>${jackson.version}</version>
137 </dependency>
138 <dependency>
139 <groupId>com.fasterxml.jackson.core</groupId>
140 <artifactId>jackson-annotations</artifactId>
141 <version>${jackson.version}</version>
142 </dependency>
143
144 <!--数据库连接池-->
145 <dependency>
146 <groupId>commons-dbcp</groupId>
147 <artifactId>commons-dbcp</artifactId>
148 <version>1.2.2</version>
149 </dependency>
150 <dependency>
151 <groupId>commons-pool</groupId>
152 <artifactId>commons-pool</artifactId>
153 <version>1.5.3</version>
154 </dependency>
155
156 <!--Mybatis集成-->
157 <dependency>
158 <groupId>org.mybatis</groupId>
159 <artifactId>mybatis</artifactId>
160 <version>${mybatis.version}</version>
161 </dependency>
162 <dependency>
163 <groupId>org.mybatis</groupId>
164 <artifactId>mybatis-spring</artifactId>
165 <version>1.2.0</version>
166 </dependency>
167
168 <!--log4j-->
169 <dependency>
170 <groupId>log4j</groupId>
171 <artifactId>log4j</artifactId>
172 <version>${log4j.version}</version>
173 </dependency>
174
175 <!--slf4j-->
176 <dependency>
177 <groupId>org.slf4j</groupId>
178 <artifactId>slf4j-api</artifactId>
179 <version>${slf4j.version}</version>
180 </dependency>
181 <dependency>
182 <groupId>org.slf4j</groupId>
183 <artifactId>slf4j-log4j12</artifactId>
184 <version>${slf4j.version}</version>
185 <scope>test</scope>
186 </dependency>
187
188 <!--数据库连接驱动-->
189 <dependency>
190 <groupId>mysql</groupId>
191 <artifactId>mysql-connector-java</artifactId>
192 <version>5.1.46</version>
193 </dependency>
194
195 <!-- JSTL标签类 -->
196 <dependency>
197 <groupId>jstl</groupId>
198 <artifactId>jstl</artifactId>
199 <version>1.2</version>
200 </dependency>
201
202 <!--servlet-->
203 <dependency>
204 <groupId>javax.servlet</groupId>
205 <artifactId>javax.servlet-api</artifactId>
206 <version>3.0.1</version>
207 <scope>provided</scope>
208 </dependency>
209
210 <dependency>
211 <groupId>javax.servlet.jsp</groupId>
212 <artifactId>jsp-api</artifactId>
213 <version>2.2</version>
214 <scope>provided</scope>
215 </dependency>
216 </dependencies>
217
218 <build>
219 <finalName>crm</finalName>
220 <plugins>
221 <!--代码生成器插件-->
222 <plugin>
223 <groupId>org.mybatis.generator</groupId>
224 <artifactId>mybatis-generator-maven-plugin</artifactId>
225 <version>1.3.2</version>
226 <configuration>
227 <!--自定义代码生成器的路径-->
228 <!--<configurationFile>yourLocation/mybatis-generator-config.xml</configurationFile>-->
229 <verbose>true</verbose>
230 <overwrite>true</overwrite>
231 </configuration>
232 </plugin>
233 <plugin>
234 <artifactId>maven-clean-plugin</artifactId>
235 <version>3.0.0</version>
236 </plugin>
237 <!-- see http://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_war_packaging -->
238 <plugin>
239 <artifactId>maven-resources-plugin</artifactId>
240 <version>3.0.2</version>
241 </plugin>
242 <plugin>
243 <artifactId>maven-compiler-plugin</artifactId>
244 <version>3.7.0</version>
245 </plugin>
246 <plugin>
247 <artifactId>maven-surefire-plugin</artifactId>
248 <version>2.20.1</version>
249 </plugin>
250 <plugin>
251 <artifactId>maven-war-plugin</artifactId>
252 <version>3.2.0</version>
253 </plugin>
254 <plugin>
255 <artifactId>maven-install-plugin</artifactId>
256 <version>2.5.2</version>
257 </plugin>
258 <plugin>
259 <artifactId>maven-deploy-plugin</artifactId>
260 <version>2.8.2</version>
261 </plugin>
262 </plugins>
263 </build>
264 </project>
2接着是配置web.xml文件,
1 <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 2 xmlns="http://java.sun.com/xml/ns/javaee" 3 xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" 4 version="3.0"> 5 <display-name>crm</display-name> 6 <!-- Spring的配置文件 --> 7 <context-param> 8 <param-name>contextConfigLocation</param-name> 9 <param-value>classpath:applicationContext.xml</param-value> 10 </context-param> 11 <!--Spring监听器 ApplicationContext 载入 --> 12 <listener> 13 <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 14 </listener> 15 16 <!-- Spring MVC 核心配置开始 --> 17 <servlet> 18 <servlet-name>springmvc</servlet-name> 19 <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 20 <init-param> 21 <param-name>contextConfigLocation</param-name> 22 <param-value>classpath:applicationContext-mvc.xml</param-value> 23 </init-param> 24 <load-on-startup>1</load-on-startup> 25 </servlet> 26 <servlet-mapping> 27 <servlet-name>springmvc</servlet-name> 28 <url-pattern>/</url-pattern> 29 </servlet-mapping> 30 31 <!-- 编码过滤器 --> 32 <filter> 33 <filter-name>encodingFilter</filter-name> 34 <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> 35 <init-param> 36 <param-name>encoding</param-name> 37 <param-value>UTF-8</param-value> 38 </init-param> 39 </filter> 40 <filter-mapping> 41 <filter-name>encodingFilter</filter-name> 42 <url-pattern>/*</url-pattern> 43 </filter-mapping> 44 </web-app>
3配置数据库的链接信息文件也就是jdbc.properties
jdbc.driverClassName=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql:///数据库名 jdbc.username=用户名 jdbc.password=密码
4配置applictionContext.xml文件,在applicationContext中需要注意,配置mapper映射,这样就能直接在我们的类中注入mapper对象,注意用到包的地方时自己的包
1 <?xml version="1.0" encoding="UTF-8"?>
2 <beans xmlns="http://www.springframework.org/schema/beans"
3 xmlns:context="http://www.springframework.org/schema/context"
4 xmlns:tx="http://www.springframework.org/schema/tx"
5 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
6 xsi:schemaLocation="
7 http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
8 http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
9 http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd
10 ">
11
12 <!--扫描Service层-->
13 <context:component-scan base-package="cn.itsource.crm.service" />
14
15 <!--引入jdbc.properties-->
16 <context:property-placeholder location="classpath:jdbc.properties" />
17 <!--创建数据源(dataSource)-->
18 <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
19 <property name="driverClassName" value="${jdbc.driverClassName}" />
20 <property name="url" value="${jdbc.url}" />
21 <property name="username" value="${jdbc.username}" />
22 <property name="password" value="${jdbc.password}" />
23 </bean>
24 <!--
25 咱们以前学过JPA,JPA的话需要配置EntityManagerFactory(需要读取配置,做很多事情都能配置)
26 咱们使用了一个FactoryBean完成 -> EntityManagerFactoryBean
27 配置SqlSessionFactory需要读取配置,做很多事情都能配置),它有一个叫做SqlSessionFactoryBean
28 -->
29 <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
30 <property name="dataSource" ref="dataSource" />
31 <!--XML的映射-->
32 <property name="mapperLocations" value="classpath:cn/itsource/crm/mapper/*.xml" />
33 <!--为所有相应的包中的类取别名-->
34 <property name="typeAliasesPackage" value="cn.itsource.crm.domain" />
35 </bean>
36
37
38 <!--一劳永逸的方案:直接创建所有的映射器mapper-->
39 <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
40 <property name="basePackage" value="cn.itsource.crm.mapper" />
41 </bean>
42
43 <!--我们需要配置一个事务管理器
44 以前学习JPA ,是有一个类JpaTransactionManager的事务对象
45 mybatis用的是:DataSourceTransactionManager
46 -->
47 <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
48 <property name="dataSource" ref="dataSource" />
49 </bean>
50 <!--配置标签支持事务-->
51 <tx:annotation-driven transaction-manager="transactionManager" />
52 </beans>
接下来就是applicationContext-mvc.xml文件
1 <?xml version="1.0" encoding="UTF-8"?> 2 <beans xmlns="http://www.springframework.org/schema/beans" 3 xmlns:context="http://www.springframework.org/schema/context" 4 xmlns:mvc="http://www.springframework.org/schema/mvc" 5 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 6 xsi:schemaLocation=" 7 http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd 8 http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd 9 http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd 10 "> 11 <!--扫描Controller--> 12 <context:component-scan base-package="cn.itsource.crm.web.controller" /> 13 <!--支持SpringMVC的注解--> 14 <mvc:annotation-driven /> 15 <!--静态资源放行--> 16 <mvc:default-servlet-handler /> 17 <!--视图解析器--> 18 <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> 19 <property name="prefix" value="/WEB-INF/views/" /> 20 <property name="suffix" value=".jsp" /> 21 </bean> 22 <!--上传解析器--> 23 <!--文件上传解析器--> 24 <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> 25 <!-- 设置上传文件的最大尺寸为1MB --> 26 <property name="maxUploadSize"> 27 <value>1048576</value> 28 </property> 29 </bean> 30 31 </beans>
我们的基本配置就完成了
通过代码生成器生成最基本的功能
准备好相应的代码生成器插件,在pom.xml中已经导入成功
1 <plugin> 2 <groupId>org.mybatis.generator</groupId> 3 <artifactId>mybatis-generator-maven-plugin</artifactId> 4 <version>1.3.2</version> 5 <configuration> 6 <!--自定义代码生成器的路径--> 7 <!--<configurationFile>yourLocation/mybatis-generator-config.xml</configurationFile>--> 8 <verbose>true</verbose> 9 <overwrite>true</overwrite> 10 </configuration> 11 </plugin>
准备generatorConfig.xml,注意这个名字必须是这个名字
1 ?xml version="1.0" encoding="UTF-8" ?> 2 <!DOCTYPE generatorConfiguration 3 PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN" 4 "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd"> 5 <!-- 自动生成器的配置(根目录,不做过多介绍)--> 6 <generatorConfiguration> 7 <!-- 8 classPathEntry:可以配置多个,也不配置 9 数据库驱动:这里找到相应的驱动jar包就可以了(注:不同数据库的jar不一样) 10 location:里面的是路径(也可以直接写绝对路径 -> 如:E:\mybatis\mysql-connector-java-5.1.26-bin.jar) 11 --> 12 <classPathEntry location="F:\opensource\mysql-connector-java-5.1.26-bin.jar"/> 13 <!-- 14 context:用于生成一组对象的环境(至少配置1个,可以配置多个) 15 id:表达唯一的名称 16 targetRuntime:用于指定生成的代码的运行环境(MyBatis3/MyBatis3Simple) 17 MyBatis3:默认值 18 MyBatis3Simple:不会生成与Example(案例)相关的方法 19 --> 20 <context id="DB2Tables" targetRuntime="MyBatis3Simple" > 21 <!-- 22 用于配置如果生成注释信息(最多可以配置一下) 23 suppressAllComments:阻止生成注释 ,默认为false 24 suppressDate:阻止生成的注释时间戳,默认为false 25 addRemarkComments:注释是否添加数据库表的备注信息,默认为false 26 --> 27 <commentGenerator> 28 <property name="suppressDate" value="true"/> 29 <property name="suppressAllComments" value="true"/> 30 </commentGenerator> 31 <!-- 32 配置连接数据库的基本信息 33 --> 34 <jdbcConnection driverClass="com.mysql.jdbc.Driver" 35 connectionURL="jdbc:mysql:///crm" 36 userId="root" password="root"> 37 </jdbcConnection> 38 <!-- 39 用于指定JDBC类型和Java类型如何转换,最多可以配置一个 40 forceBigDecimals:控制是否强制将DECIMAL和NUMERIC类型的JDBC字段转换成Java类型的 BigDecimal 41 默认为false,一般不需要配置 42 --> 43 <javaTypeResolver> 44 <property name="forceBigDecimals" value="false"/> 45 </javaTypeResolver> 46 47 <!-- 48 javaModelGenerator:用来控制生成的实体类 49 targetPackage:生成Model类存放位置(包名) 50 targetProject:指定目标项目路径(根目录) 51 对应的子属性: 52 trimStrings:判断是否对数据库查询结果进行trim操作(默认false) 53 --> 54 <javaModelGenerator targetPackage="cn.itsource.crm.domain" targetProject="src/main/java"> 55 <property name="trimStrings" value="true"/> 56 </javaModelGenerator> 57 <!-- 58 sqlMapGenerator:生成映射文件存放位置(Mapper.xml文件) 59 targetPackage:生成SQL映射文件(XML文件)在哪个包中 60 targetProject:指定目标项目路径(根目录) 61 --> 62 <sqlMapGenerator targetPackage="cn.itsource.crm.mapper" targetProject="src/main/resources"> 63 </sqlMapGenerator> 64 65 <!-- 66 javaClientGenerator:Java客户端生成器(生成Dao/Mapper的接口) 67 该 标签可选(最多配置一个),如果不配置,就不会生成Mapper接口 68 type:选择客户端代码生成器 69 MyBatis3 70 ANNOTATEDMAPPER:基于注解的Mapper接口,不会有对应的XML映射文件 71 MIXEDMAPPER:XML和注解混合形式 72 XMLMAPPER:所有方法都在XML中(接口调用依赖XML) 73 MyBatis3Simple 74 ANNOTATEDMAPPER:基于注解的Mapper接口,不会有对应的XML映射文件 75 XMLMAPPER:所有方法都在XML中(接口调用依赖XML) 76 targetPackage:生成Mapper接口存放的包名 77 targetProject:指定目标项目路径 78 --> 79 <javaClientGenerator type="XMLMAPPER" targetPackage="cn.itsource.crm.mapper" targetProject="src/main/java"> 80 <property name="enableSubPackages" value="true"/> 81 </javaClientGenerator> 82 <!-- 83 table:生成对应表及类名 84 tableName:对应表名(注:%代表所有) 85 domainObjectName:对应的类名 86 generatedKey:主键自增的id字段(针对当前 数据库配置MySQL) 87 --> 88 <table tableName="t_department" domainObjectName="Department"> 89 <generatedKey column="id" sqlStatement="MySql" /> 90 </table> 91 </context> 92 93 </generatorConfiguration>
然后,我们就可以在idea中的右边菜单栏中的点击如图所示生成基础代码了

接下里就是三层的配置了
mapper层
BaseMapper
1 public interface BaseMapper<T> {
2 int deleteByPrimaryKey(Long id);
3 int insert(T record);
4 T selectByPrimaryKey(Long id);
5 List<T> selectAll();
6 int updateByPrimaryKey(T record);
7 }
子类继承父类的基本方法即可
DepartmentMapper
1 public interface DepartmentMapper extends BaseMapper<Department> { 2 }
service层同理
IBaseService接口
ublic interface IBaseService<T> {
void save(T t);
void update(T t);
void delete(Long id);
T findOne(Long id);
List<T> findAll();
}
BaseService的实现
1 @Transactional
2 public class BaseServiceImpl<T> implements IBaseService<T> {
3
4 @Autowired
5 private BaseMapper<T> baseMapper;
6
7 @Override
8 public void save(T t) {
9 baseMapper.insert(t);
10 }
11
12 @Override
13 public void update(T t) {
14 baseMapper.updateByPrimaryKey(t);
15 }
16
17 @Override
18 public void delete(Long id) {
19 baseMapper.deleteByPrimaryKey(id);
20 }
21
22 @Override
23 @Transactional(readOnly = true,propagation = Propagation.SUPPORTS)
24 public T findOne(Long id) {
25 return baseMapper.selectByPrimaryKey(id);
26 }
27
28 @Override
29 @Transactional(readOnly = true,propagation = Propagation.SUPPORTS)
30 public List<T> findAll() {
31 return baseMapper.selectAll();
32 }
33 }
IDepartmentService
1 public interface IDepartmentService extends IBaseService<Department> { 2 }
DepartmentServiceImpl
1 @Service
2 public class DepartmentServiceImpl extends BaseServiceImpl<Department> implements IDepartmentService {
3 }
Controller层
Controller中的测试代码
1 @Controller
2 @RequestMapping("/department")
3 public class DepartmentController {
4
5 @Autowired
6 private IDepartmentService departmentService;
7
8 @RequestMapping("/index")
9 public String index(){
10 return "department/index";
11 }
12
13 @RequestMapping("/list")
14 @ResponseBody
15 public List<Department> list(){
16 return departmentService.findAll();
17 }
18 }
准备EasyUI(上下文路径的配置)
引入easyui,只需要引入基本的就可以了
1 locale : 国际化支持的文件夹 2 themes :主题(eaayui的样式) 3 jquery.easyui.min.js : easyui核心的js功能 4 jquery.min.js : jQuery的支持
配置上下文路径
dea中配置上下文路径 tomcat编辑 -> Deployment ->Application context
所有的请求都必需加上这个路径
方案一:在请求前 : ${pageContext.request.contextPath}
方案二:使用Base(建议的方案详情在下面的common中
准备common.jsp (/WEB-INF/views/common/common.jsp)
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%
//获到上下文路径
String path = request.getContextPath();
//拼接相应的路径前缀: http://localhost:80/crm2/
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<base href="<%=basePath%>">
<link rel="stylesheet" type="text/css" href="static/js/easyui/themes/default/easyui.css">
<link rel="stylesheet" type="text/css" href="static/js/easyui/themes/icon.css">
<script type="text/javascript" src="static/js/jquery.min.js"></script>
<script type="text/javascript" src="static/js/easyui/jquery.easyui.min.js"></script>
<script type="text/javascript" src="static/js/easyui/locale/easyui-lang-zh_CN.js"></script>
完成CRUD
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
<%@include file="/WEB-INF/views/common/common.jsp" %>
<%--引入当前这个模块对应的js文件--%>
<script type="text/javascript" src="static/js/model/department.js"></script>
</head>
<body>
<!-- 准备grid控件 -->
<table id="departmentGrid"></table>
<!-- grid控件工具栏的按钮 -->
<div id="toolbar">
<a href="javascript:;" data-method="add" plain="true" class="easyui-linkbutton c1">添加</a>
<a href="javascript:;" data-method="update" plain="true" class="easyui-linkbutton c2">修改</a>
<a href="javascript:;" data-method="delete" plain="true" class="easyui-linkbutton c3">删除</a>
<a href="javascript:;" data-method="refresh" plain="true" class="easyui-linkbutton c4">刷新</a>
</div>
<!--添加与修改的弹出框 -->
<div id="departmentDialog">
<form id="departmentForm" method="post">
<input type="hidden" name="id">
<table cellpadding="5">
<tr>
<td>编码:</td>
<td><input class="easyui-textbox" type="text" name="sn" data-options="required:true"></input></td>
</tr>
<tr>
<td>名称:</td>
<td><input class="easyui-textbox" type="text" name="name" data-options="required:true"></input></td>
</tr>
<tr>
<td>路径:</td>
<td><input class="easyui-textbox" type="text" name="dirpath" data-options="required:true"></input></td>
</tr>
<tr>
<td>状态:</td>
<td>
<select class="easyui-combobox" name="state" style="width:200px; " data-options="panelHeight:'auto'">
<option value="-1">作废</option>
<option value="0">正常</option>
<option value="1">异常</option>
</select>
</td>
</tr>
</table>
</form>
</div>
<div id="departmentDialogButtons">
<a href="javascript:;" data-method="save" plain="true" class="easyui-linkbutton c5">确定</a>
<a href="javascript:;" data-method="close" plain="true" class="easyui-linkbutton c6">取消</a>
</div>
</body>
</html>
department.js 代码
1 $(function () {
2
3 //wc公共的组件抽取
4 var departmentGrid = $('#departmentGrid');
5 var departmentDialog = $('#departmentDialog');
6 var departmentForm = $('#departmentForm');
7
8 //事情注册
9 $("*[data-method]").on("click",function () {
10 var methodName = $(this).data("method");
11 itsource[methodName]();
12 })
13
14 itsource = {
15 add(){
16 //居中并且打开
17 departmentDialog.dialog("center").dialog("open");
18 //保存每次打开,数据都是空的
19 departmentForm.form("clear");
20 },
21 update(){
22 //判断是否选中一行
23 var row = departmentGrid.datagrid("getSelected");
24 if(!row){
25 $.messager.alert('提示',"请选中后再进行操作!","info");
26 return ;
27 }
28 //居中并且打开
29 departmentDialog.dialog("center").dialog("open");
30 //保存每次打开,数据都是空的
31 departmentForm.form("clear");
32 //进行回显
33 departmentForm.form("load",row);
34 },
35 save(){
36 //提交表单
37 departmentForm.form('submit', {
38 url:"department/save",
39 onSubmit: function(){
40 return $(this).form('validate');
41 },
42 success:function(data){
43 //把它转成json
44 var result = JSON.parse(data);
45 if(result.success){
46 itsource.refresh();
47 itsource.close();
48 }else{
49 $.messager.alert('操作失败',result.msg,"error");
50 }
51 }
52 });
53 },
54 delete(){
55 //选中一行才可以删除
56 var row = departmentGrid.datagrid("getSelected");
57 if(!row){
58 $.messager.alert('提示',"请选中后再进行操作!","info");
59 return ;
60 }
61 //问:是否真的要删除?
62 $.messager.confirm('确认','您确认想要删除记录吗?',function(r){
63 if (r){
64 $.get("department/delete",{id:row.id},function (result) {
65 if(result.success){
66 itsource.refresh();
67 }else{
68 $.messager.alert('操作失败',result.msg,"error");
69 }
70 })
71 }
72 });
73
74
75 },
76 refresh(){
77 //刷新一次
78 departmentGrid.datagrid("reload");
79 },
80 close(){
81 departmentDialog.dialog("close");
82 }
83 };
84
85 //通过js创建咱们的grid
86 departmentGrid.datagrid({
87 fit:true,
88 fitColumns:true,
89 singleSelect:true,
90 url:'department/page',
91 toolbar:"#toolbar",
92 pageList:[5,10,20,30,40,100],
93 pagination:true,
94 columns:[[
95 {field:'sn',title:'编码',width:100},
96 {field:'name',title:'名称',width:100},
97 {field:'dirpath',title:'路径',width:100,align:'right'},
98 {field:'state',title:'状态',width:100,align:'right'}
99 ]]
100 });
101
102 //通过js创建咱们的弹出框
103 departmentDialog.dialog({
104 title: '编辑数据',
105 // width: 400,
106 // height: 200,
107 closed: true, //默认关闭
108 modal: true,
109 buttons:"#departmentDialogButtons"
110 });
111 })
准备Query(完成分页)
BaseQuery(正好与easyui传的值对应上的),用于接收传入的分页值
1 public abstract class BaseQuery {
2
3 private int page = 1; //默认是第一页
4 private int rows = 10; //默认每页10条数据
5
6 //getter与setter省略
7 }
public class DepartmentQuery extends BaseQuery {
}
修改departmentMapper.xml。添加一个新的方法
1 <select id="queryAll" parameterType="cn.itsource.crm.query.DepartmentQuery" resultMap="BaseResultMap" > 2 select id, sn, name, dirPath, state, manager_id, parent_id 3 from t_department 4 </select>
同样在BaseMapper中一样添加接口i
Page<T> queryAll(BaseQuery baseQuery);
修改applicationContext.xml
在pom.xml中引入响应的插件
<dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper</artifactId> <version>5.0.1</version> </dependency>
在application.xml中配置拦截器和分页<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<!--XML的映射-->
<property name="mapperLocations" value="classpath:cn/itsource/crm/mapper/*.xml" />
<!--为所有相应的包中的类取别名-->
<property name="typeAliasesPackage" value="cn.itsource.crm.domain" />
<!--配置一个拦截器(分页插件):注意一下版本问题-->
<property name="plugins">
<array>
<bean class="com.github.pagehelper.PageInterceptor">
<property name="properties">
<value>helperDialect=mysql</value>
</property>
</bean>
</array>
</property>
</bean>
修改了service
创建了一个PageResult:直接返回Easyui中要的数据
public class PageResult<T> {
private long total; //总条数
private List<T> rows; //这一行的数据
public PageResult(Page<T> page) {
this.total = page.getTotal();
this.rows = page.getResult();
}
//...
}
baseService中添加方法
1 @Override
2 public PageResult<T> queryAll(BaseQuery query) {
3 //配置分页的值
4 PageHelper.startPage(query.getPage(),query.getRows());
5 Page<T> page = baseMapper.queryAll(query);
6 return new PageResult<T>(page);
7 }
修改controller
@RequestMapping("/page")
@ResponseBody
public PageResult<Department> page(DepartmentQuery query){
return departmentService.queryAll(query);
}
这样我们就完成了基本的CRUD
多模块开发
- 我们开发的时候在追求:高内聚,低耦合
- 我们以前就是这么做的(Spring,接口,分层)
- 以前是根据包来进行分组 -> 改成模块
- 各个模块的耦合度更低,更加有利于组件(代码)的重用
模块划分
- basic-util:工具(不依赖于其它模块,但是其它模块都要依赖)
- basic-core:所有模块的公共代码部分
- crm-common:crm这个模块的公共代码部分
- crm-mapper:crm这个模块的持久层部分
- crm-service:crm这个模块的业务层
- crm-web:crm这个模块的web层
创建多模块的项目
- 父项目中怎么知道它有哪些子模块
- pom.xml中配置
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>cn.itsource</groupId> 8 <artifactId>maven-many-project</artifactId> 9 <packaging>pom</packaging> 10 <version>1.0-SNAPSHOT</version> 11 12 <!--父模块中引入相应的子模块--> 13 <modules> 14 <module>basic-util</module> 15 <module>oa-service</module> 16 </modules> 17 18 </project>
子模块中引入其它子模块
在当前项目的pom.xml中配置依赖的座标
<dependencies>
<dependency>
<groupId>cn.itsource</groupId>
<artifactId>basic-util</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
</dependencies>
来源:https://www.cnblogs.com/xiaohuziguai/p/10679511.html