项目框架
首先配置spring的application.xml文件,配置内容如下:
1 <?xml version="1.0" encoding="UTF-8"?> 2 <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 3 xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation="http://www.springframework.org/schema/beans 4 http://www.springframework.org/schema/beans/spring-beans.xsd 5 http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd"> 6 7 <!-- 引入配置文件 --> 8 <bean id="propertyConfigurer" 9 class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> 10 <property name="location" value="classpath:jdbc.properties" /> 11 </bean> 12 <!-- 配置数据源:此处要注意使用数据库连接池引入的类一定要属于导入的jar包,另外每个连接池的参数也有可能不一样 --> 13 <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" 14 destroy-method="close"> 15 <property name="driverClassName" value="${datasource.driverClassName}" /> 16 <property name="url" value="${datasource.url}" /> 17 <property name="username" value="${datasource.username}" /> 18 <property name="password" value="${datasource.password}" /> 19 <!-- 初始化连接大小 --> 20 <!-- <property name="initialSize" value="${datasource.initialSize}"></property> 21 --><!-- 连接池最大数量 --> 22 <property name="maxActive" value="${datasource.maxActive}"></property> 23 <!-- 连接池最大空闲 --> 24 <property name="maxIdle" value="${datasource.maxIdle}"></property> 25 <!-- 连接池最小空闲 --> 26 <!-- <property name="minIdle"><value>1</value></property> 27 获取连接最大等待时间 28 <property name="maxWait" value="${datasource.maxWait}"></property> --> 29 </bean> 30 31 <!-- spring和MyBatis整合 --> 32 <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> 33 <property name="dataSource" ref="dataSource" /> 34 <!--mybatis的配置文件 ,在此文件中,可以为每个类配置别名,这样在mapper.xml文件中,写resultType时就不需要写类的全路径了--> 35 <!-- <property name="configLocation" value="classpath:mybatis-config.xml" /> --> 36 <!-- 自动扫描mapping.xml文件 --> 37 <property name="mapperLocations" value="classpath:com/cn/mapping/*.xml"></property> 38 </bean> 39 40 <!-- DAO接口所在包名,Spring会自动查找其下的类 --> 41 <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> 42 <property name="basePackage" value="com.cn.dao" /> 43 <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"></property> 44 </bean> 45 46 <!-- (事务管理)transaction manager, use JtaTransactionManager for global tx --> 47 <bean id="transactionManager" 48 class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> 49 <property name="dataSource" ref="dataSource" /> 50 </bean> 51 <!--开启事务注解扫描--> 52 <tx:annotation-driven transaction-manager="transactionManager"></tx:annotation-driven> 53 </beans>
接下来配置jdbc.properties文件
1 ############################### MySQL\u6570\u636e\u5e93\u914d\u7f6e\u4fe1\u606f ############################### 2 ############################################################################################## 3 datasource.driverClassName=com.mysql.jdbc.Driver 4 datasource.url=jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=utf8&autoReconnect=true 5 datasource.username=root 6 datasource.password=123 7 #datasource.datasource=java:comp/env/jdbc/ceiba 8 #hibernate.dialect=org.hibernate.dialect.MySQLInnoDBDialect 9 ############################################################################################## 10 ################################ \u4ee5\u4e0b\u662f\u516c\u5171\u914d\u7f6e\u4fe1\u606f ################################ 11 ############################################################################################## 12 #最大连接数 13 datasource.maxActive=100 14 #最大空闲数 15 datasource.maxIdle=30 16 #最大等待时间 17 datasource.maxWait=1200 18 #初始加载数 19 datasource.initialSize=10; 20 #datasource.defaultAutoCommit=true 21 #datasource.defaultAutoCommit=false
然后配置spring-mvc的配置文件spring-mvc.xml
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:p="http://www.springframework.org/schema/p" 4 xmlns:context="http://www.springframework.org/schema/context" 5 xmlns:mvc="http://www.springframework.org/schema/mvc" 6 xsi:schemaLocation="http://www.springframework.org/schema/beans 7 http://www.springframework.org/schema/beans/spring-beans-3.1.xsd 8 http://www.springframework.org/schema/context 9 http://www.springframework.org/schema/context/spring-context-3.1.xsd 10 http://www.springframework.org/schema/mvc 11 http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd"> 12 13 <!-- 告知Spring,我们启用注解驱动 --> 14 <mvc:annotation-driven/> 15 <!-- org.springframework.web.servlet.resource.DefaultServletHttpRequestHandler, 16 它会像一个检查员,对进入DispatcherServlet的URL进行筛查,如果发现是静态资源的请求, 17 就将该请求转由Web应用服务器默认的Servlet处理,如果不是静态资源的请求,才由DispatcherServlet继续处理。 --> 18 <mvc:default-servlet-handler/> 19 <!-- 自动扫描该包 --> 20 <context:component-scan base-package="com.cn" /> 21 <!-- 对静态资源文件的访问,因为Spring MVC会拦截所有请求,导致jsp页面中对js和CSS的引用也被拦截,配置后可以把对资源的请求交给项目的 22 默认拦截器而不是Spring MVC--> 23 <mvc:resources mapping="/static/**" location="/WEB-INF/static/" /> 24 <!-- 定义跳转的文件的前后缀 ,视图模式配置--> 25 <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> 26 <!-- 这里的配置我的理解是自动给后面action的方法return的字符串加上前缀和后缀,变成一个 可用的url地址 --> 27 <property name="prefix" value="/WEB-INF/jsp/" /> 28 <property name="suffix" value=".jsp" /> 29 </bean> 30 <!-- 配置文件上传,如果没有使用文件上传可以不用配置,当然如果不配,那么配置文件中也不必引入上传组件包 --> 31 <bean id="multipartResolver" 32 class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> 33 <!-- 默认编码 --> 34 <property name="defaultEncoding" value="utf-8" /> 35 <!-- 文件大小最大值 --> 36 <property name="maxUploadSize" value="10485760000" /> 37 <!-- 内存中的最大值 --> 38 <property name="maxInMemorySize" value="40960" /> 39 </bean> 40 41 </beans>
最后配置web.xml文件
1 <?xml version="1.0" encoding="UTF-8"?> 2 <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 3 xmlns="http://java.sun.com/xml/ns/javaee" 4 xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" 5 version="3.0"> 6 7 <!-- Spring监听器 --> 8 <listener> 9 <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 10 </listener> 11 <!-- 防止Spring内存溢出监听器 --> 12 <listener> 13 <listener-class>org.springframework.web.util.IntrospectorCleanupListener</listener-class> 14 </listener> 15 16 <!-- Spring容器加载所有的配置文件的路径 --> 17 <context-param> 18 <param-name>contextConfigLocation</param-name> 19 <param-value>classpath*:applicationContext.xml</param-value> 20 </context-param> 21 <!-- 配置SpringMVC核心控制器,将所有的请求(除了刚刚Spring MVC中的静态资源请求)都交给Spring MVC --> 22 <servlet> 23 <servlet-name>springMvc</servlet-name> 24 <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 25 <init-param> 26 <param-name>contextConfigLocation</param-name> 27 <param-value>classpath*:spring-mvc.xml</param-value> 28 </init-param> 29 <!--用来标记是否在项目启动时就加在此Servlet,0或正数表示容器在应用启动时就加载这个Servlet, 30 当是一个负数时或者没有指定时,则指示容器在该servlet被选择时才加载.正数值越小启动优先值越高 --> 31 <load-on-startup>1</load-on-startup> 32 </servlet> 33 34 <!--为DispatcherServlet建立映射--> 35 <servlet-mapping> 36 <servlet-name>springMvc</servlet-name> 37 <!-- 拦截所有请求,千万注意是(/)而不是(/*) --> 38 <!-- 此处可以可以配置成*.do,对应struts的后缀习惯 --> 39 <url-pattern>/</url-pattern> 40 </servlet-mapping> 41 42 <!-- 编码过滤器 --> 43 <filter> 44 <filter-name>encodingFilter</filter-name> 45 <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> 46 <async-supported>true</async-supported> 47 <init-param> 48 <param-name>encoding</param-name> 49 <param-value>UTF-8</param-value> 50 </init-param> 51 <init-param> 52 <param-name>forceEncoding</param-name> 53 <param-value>true</param-value> 54 </init-param> 55 </filter> 56 <filter-mapping> 57 <filter-name>encodingFilter</filter-name> 58 <url-pattern>/*</url-pattern> 59 </filter-mapping> 60 61 <welcome-file-list> 62 <welcome-file>/index.jsp</welcome-file> 63 </welcome-file-list> 64 65 </web-app>
忘了,还有日志参数的配置
1 #设置日志的级别 2 log4j.rootLogger=INFO,Console,File 3 #输出信息到控制台 4 log4j.appender.Console=org.apache.log4j.ConsoleAppender 5 log4j.appender.Console.Target=System.out 6 #\u53EF\u4EE5\u7075\u6D3B\u5730\u6307\u5B9A\u65E5\u5FD7\u8F93\u51FA\u683C\u5F0F\uFF0C\u4E0B\u9762\u4E00\u884C\u662F\u6307\u5B9A\u5177\u4F53\u7684\u683C\u5F0F 7 log4j.appender.Console.layout = org.apache.log4j.PatternLayout 8 log4j.appender.Console.layout.ConversionPattern=[%c] - %m%n 9 10 #日志类型配置 11 log4j.appender.File = org.apache.log4j.RollingFileAppender 12 log4j.appender.File.File = logs/ssm.log 13 log4j.appender.File.MaxFileSize = 10MB 14 log4j.appender.File.Threshold = ALL 15 log4j.appender.File.layout = org.apache.log4j.PatternLayout 16 log4j.appender.File.layout.ConversionPattern =[%p] [%d{yyyy-MM-dd HH\:mm\:ss}][%c]%m%n 17 18 #### 输出DEBUG 级别以上的日志到=E://logs/error.log ### 19 #log4j.appender.D = org.apache.log4j.DailyRollingFileAppender 20 #log4j.appender.D.File = E://logs/log.log 21 #log4j.appender.D.Append = true 22 #log4j.appender.D.Threshold = DEBUG 23 #log4j.appender.D.layout = org.apache.log4j.PatternLayout 24 #log4j.appender.D.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n 25 # 26 #### 输出ERROR 级别以上的日志到=E://logs/error.log ### 27 #log4j.appender.E = org.apache.log4j.DailyRollingFileAppender 28 #log4j.appender.E.File =E://logs/error.log 29 #log4j.appender.E.Append = true 30 #log4j.appender.E.Threshold = ERROR 31 #log4j.appender.E.layout = org.apache.log4j.PatternLayout 32 #log4j.appender.E.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n
下面开始写java类
1.实体类(IFiled接口是我用来实现快速填充创建人,创建时间,修改人,修改时间,版本号,以及单据状态的接口,这个接口不是必须实现的)
1 package com.cn.entity; 2 3 import com.cn.util.IFiled; 4 5 import java.util.Date; 6 7 /** 8 * @Author zhanghl 9 * @Date 2018/4/26 13:08 10 * @Description 请输入一句话用来描述 11 **/ 12 public class PrintField implements IFiled { 13 14 private Integer id; 15 16 private String fieldName; 17 18 private Integer sortNumber; 19 20 private double size; 21 22 // 1有效,0无效 23 private Integer isValid; 24 25 // 创建人 26 private String creator; 27 28 // 创建时间 29 private Date createTime; 30 31 // 版本 32 private String version; 33 34 // 修改人 35 private String modifier; 36 37 // 修改时间 38 private Date modifyTime; 39 public Integer getId() { 40 return id; 41 } 42 43 public void setId(Integer id) { 44 this.id = id; 45 } 46 47 public String getFieldName() { 48 return fieldName; 49 } 50 51 public void setFieldName(String fieldName) { 52 this.fieldName = fieldName; 53 } 54 55 public Integer getSortNumber() { 56 return sortNumber; 57 } 58 59 public void setSortNumber(Integer sortNumber) { 60 this.sortNumber = sortNumber; 61 } 62 63 public double getSize() { 64 return size; 65 } 66 67 public void setSize(double size) { 68 this.size = size; 69 } 70 71 public Integer getIsValid() { 72 return isValid; 73 } 74 75 public void setIsValid(Integer isValid) { 76 this.isValid = isValid; 77 } 78 79 public String getCreator() { 80 return creator; 81 } 82 83 public void setCreator(String creator) { 84 this.creator = creator; 85 } 86 87 public Date getCreateTime() { 88 return createTime; 89 } 90 91 public void setCreateTime(Date createTime) { 92 this.createTime = createTime; 93 } 94 95 public String getVersion() { 96 return version; 97 } 98 99 public void setVersion(String version) { 100 this.version = version; 101 } 102 103 public String getModifier() { 104 return modifier; 105 } 106 107 public void setModifier(String modifier) { 108 this.modifier = modifier; 109 } 110 111 public Date getModifyTime() { 112 return modifyTime; 113 } 114 115 public void setModifyTime(Date modifyTime) { 116 this.modifyTime = modifyTime; 117 } 118 119 120 121 }
2.控制层
1 package com.cn.controller; 2 3 import java.util.List; 4 5 import org.springframework.beans.factory.annotation.Autowired; 6 import org.springframework.stereotype.Controller; 7 import org.springframework.web.bind.annotation.RequestMapping; 8 import org.springframework.web.servlet.ModelAndView; 9 10 import com.cn.entity.PrintField; 11 import com.cn.service.IPrintFieldService; 12 13 @Controller 14 @RequestMapping(value = "/printfield") 15 public class PrintFieldController { 16 17 //@Resource(name = "printFieldService“) 18 @Autowired 19 IPrintFieldService printFieldService; 20 21 22 @RequestMapping(value = "/list") 23 public ModelAndView list() 24 { 25 ModelAndView mv=new ModelAndView(); 26 List<PrintField> userList = printFieldService.getUser(); 27 mv.addObject("userList",userList); 28 mv.setViewName("/show"); 29 return mv; 30 } 31 32 33 }
3.业务逻辑层
1 package com.cn.service; 2 3 import java.util.List; 4 5 import com.cn.entity.PrintField; 6 7 public interface IPrintFieldService { 8 9 public List<PrintField> getUser(); 10 }
1 package com.cn.service.impl; 2 3 import java.util.List; 4 5 import javax.annotation.Resource; 6 7 import org.springframework.stereotype.Service; 8 9 import com.cn.dao.IPrintFieldDao; 10 import com.cn.entity.PrintField; 11 import com.cn.service.IPrintFieldService; 12 @Service("printFieldService") 13 public class PrintFieldServiceImpl implements IPrintFieldService { 14 @Resource(name = "printfielDao") 15 private IPrintFieldDao printFieldDao; 16 17 @Override 18 public List<PrintField> getUser() { 19 return printFieldDao.selectAllUser(); 20 } 21 22 }
4.dao层
1 package com.cn.dao; 2 3 import java.util.List; 4 5 import org.springframework.stereotype.Repository; 6 7 import com.cn.entity.PrintField; 8 9 @Repository("printfielDao") 10 public interface IPrintFieldDao { 11 12 List<PrintField> selectAllUser(); 13 }
5.PrintFieldMapper.xml
1 <?xml version="1.0" encoding="UTF-8" ?> 2 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" > 3 <!--namespace就是与此文件对应的Dao接口的全路径--> 4 <mapper namespace="com.cn.dao.IPrintFieldDao" > 5 <resultMap id="BaseResultMap" type="com.cn.entity.PrintField" > 6 <!-- jdbcType的值可以通过对照表进行查询 --> 7 <id column="ID" property="id" jdbcType="INTEGER" /> 8 <result column="field_name" property="fieldName" jdbcType="VARCHAR" /> 9 <result column="sort_number" property="sortNumber" jdbcType="INTEGER" /> 10 <result column="size" property="size" jdbcType="DECIMAL" /> 11 <result column="is_valid" property="isValid" jdbcType="INTEGER" /> 12 <result column="creator" property="creator" jdbcType="VARCHAR" /> 13 <result column="create_time" property="createTime" jdbcType="DATE" /> 14 <result column="modifier" property="modifier" jdbcType="VARCHAR" /> 15 <result column="modify_time" property="modifyTime" jdbcType="DATE" /> 16 <result column="version" property="version" jdbcType="VARCHAR" /> 17 18 </resultMap> 19 <!--自己配置的查询表所有数据的sql--> 20 <!--如下type的PrintField就是mybatis-config.xml中配置的PrintField--> 21 <!-- <select id="selectAllUser" resultType="PrintField"> --> 22 <!-- resultMap是上面resultMap的id --> 23 <select id="selectAllUser" resultMap="BaseResultMap"> 24 select * FROM print_field; 25 </select> 26 </mapper>
源码:https://github.com/zhanghouli/ssm.git