首先我们需要建立好一个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>