![11863677-22bd045f499fb738.png](https://i-blog.csdnimg.cn/blog_migrate/5a6a83b039bbcdf9813ec596e5f4f269.webp?x-image-process=image/format,png)
2、具体内容
本次的项目开发采用的是Spring MVC + MyBatis开发模式,并且所有的数据验证都将通过拦截器完成。那么在整个项目的整合过程之中,有部分的操作是可以进行拷贝的;
2.1、搭建Spring MVC环境
1、 为项目添加Spring的开发支持,添加的时候一定要选择好持久化开发包;
![11863677-5e76ba74092968b7.png](https://i-blog.csdnimg.cn/blog_migrate/14a003d34842a4c75b95dd5e386ff9d7.webp?x-image-process=image/format,png)
2、 观察web.xml文件以及变更
· 一定会默认增加一个Spring的监听器:
|
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
|
· 设置applicationContex.xml文件路径:
|
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml</param-value>
</context-param>
|
3、 添加Spring MVC之中所要使用到的Servlet程序;
|
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>*.action</url-pattern>
</servlet-mapping>
|
4、 为项目设计统一的编码,为UTF-8,使用Spring MVC中默认提供的编码过滤器完成;
|
<filter>
<filter-name>encoding</filter-name>
<filter-class>
org.springframework.web.filter.CharacterEncodingFilter
</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
|
5、 为项目增加首页:login.jsp、index.jsp;
|
<welcome-file-list>
<welcome-file>login.jsp</welcome-file>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
|
6、 修改applicationContext.xml文件;
· 追加context、mvc的命名空间;
· 追加相应的配置处理;
|
<context:annotation-config/>
<context:component-scan base-package="cn.mldn"/>
<mvc:annotation-driven/>
<mvc:default-servlet-handler/>
|
7、 因为项目之中一定会存在资源文件的问题,所以本次要准备出三个资源文件:
· Messages.properties:作为所有的信息提示;
· Pages.properties:所有的跳转页面路径;
· Validators.properties:数据验证使用。
范例:编写Messages.properties文件
|
invalidate.string.error.msg=该字段内容不允许为空!
invalidate.int.error.msg=该字段内容必须设置为整数!
invalidate.double.error.msg=该字段内容必须设置为数字!
invalidate.date.error.msg=该字段内容必须设置为日期(例如:yyyy-mm-dd)!
invalidate.datetime.error.msg=该字段内容必须设置为日期(例如:yyyy-mm-dd hh:mm:ss)!
invalidate.file.mime.error.msg=上传了非法的文件,请重新确认您需要上传的文件是否合法!
|
|
vo.add.success={0}数据增加成功!
vo.add.failure={0}数据增加失败!
vo.edit.success={0}数据修改成功!
vo.edit.failure={0}数据修改失败!
vo.rm.success={0}数据删除成功!
vo.rm.failure={0}数据删除失败!
|
范例:编写Validators.properties文件
|
mimeType=image/bmp|image/gif|image/jpg|image/jpeg|image/png
XxxAction.add.rules=xx:int|xx:string|hiredate:date|sal:double|dept.dname:string
|
范例:编写Pages.properties文件
|
errors.page=/errors.jsp
forward.page=/forward.jsp
|
8、 随后还需要在applicationContext.xml文件里面追加相应的配置操作。
|
<mvc:default-servlet-handler/>
<bean id="messageSource"
class="org.springframework.context.support.ResourceBundleMessageSource">
<property name="basenames">
<array>
<value>Messages</value>
<value>Pages</value>
<value>Validators</value>
</array>
</property>
</bean>
|
9、 考虑到在Spring MVC之中需要提供有转换器以及提供有资源读取操作,那么建议设计一个抽象的Action父类。
|
package cn.mldn.amr.action.abs;
import java.text.SimpleDateFormat;
import javax.annotation.Resource;
import org.springframework.beans.propertyeditors.CustomDateEditor;
import org.springframework.context.MessageSource;
import org.springframework.web.bind.WebDataBinder;
import org.springframework.web.bind.annotation.InitBinder;
public abstract class AbstractAction {
@Resource
private MessageSource msgSource; // 自动匹配注入
@InitBinder
public void initBinder(WebDataBinder binder) { // 转换器
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
// 将自定义的转换器进行配置,表示以后如果发现有Date类型,就使用sdf对象进行转换,并且允许数据为null
binder.registerCustomEditor(java.util.Date.class, new CustomDateEditor(
sdf, true));
}
}
|
那么此时,与MVC所需要的相关的操作就配置成功了。
10、 将拦截器的程序拷贝到项目之中;
11、 需要将io包、json的开发包拷贝到项目之中;
2.2、整合Spring与MyBatis
1、 将mybatis的开发包以及与spring整合开发包拷贝到项目之中;
2、 建立database.properties文件定义数据库,定义的时候请保持一个原则:只有一个数据库连接;
|
db.driver=org.gjt.mm.mysql.Driver
db.url=jdbc:mysql://localhost:3306/mldn
db.user=root
db.password=mysqladmin
pool.max=1
pool.min=1
pool.init=1
pool.idle=1
|
3、 在applicationContext.xml文件之中引用此配置文件;
|
<context:property-placeholder location="classpath:database.properties" />
|
4、 在applicationContext.xml文件里面定义数据库连接的相关信息;
|
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="driverClass" value="${db.driver}" />
<property name="jdbcUrl" value="${db.url}" />
<property name="user" value="${db.user}" />
<property name="password" value="${db.password}" />
<property name="maxPoolSize" value="${pool.max}" />
<property name="minPoolSize" value="${pool.min}" />
<property name="initialPoolSize" value="${pool.init}" />
<property name="maxIdleTime" value="${pool.idle}" />
</bean>
|
5、 定义事务处理;
|
<bean id="transactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"/>
</bean>
|
6、 定义MyBatis要使用的SqlSessionFactory;
|
<bean id="sessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="configLocation" value="classpath:mybatis.cfg.xml"/>
</bean>
|
7、 准备出mybatis.cfg.xml文件;
8、 本次使用的包统一为:cn.mldn.amr;
· 修改log4j.properties文件定义:
|
log4j.logger.cn.mldn.amr.mapping=TRACE
|
9、 配置所有的切入点;
|
<tx:annotation-driven transaction-manager="transactionManager" />
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="insert*" propagation="REQUIRED"/>
<tx:method name="update*" propagation="REQUIRED"/>
<tx:method name="delete*" propagation="REQUIRED"/>
<tx:method name="add*" propagation="REQUIRED"/>
<tx:method name="edit*" propagation="REQUIRED"/>
<tx:method name="change*" propagation="REQUIRED"/>
<tx:method name="remove*" propagation="REQUIRED"/>
<tx:method name="login*" propagation="REQUIRED"/>
<tx:method name="get*" propagation="REQUIRED" read-only="true"/>
<tx:method name="load*" propagation="REQUIRED" read-only="true"/>
<tx:method name="list*" propagation="REQUIRED" read-only="true"/>
<tx:method name="*" propagation="REQUIRED" read-only="true"/>
</tx:attributes>
</tx:advice>
<aop:config expose-proxy="true">
<aop:pointcut expression="execution(* cn.mldn..service..(..))" id="pointcut"/>
<aop:advisor advice-ref="txAdvice" pointcut-ref="pointcut"/>
</aop:config>
|
10、 考虑到设计的问题,为业务层增加一个抽象类;
|
package cn.mldn.amr.service.abs;
public abstract class AbstractService {
}
|
11、 为数据层增加一个抽象类;
|
package cn.mldn.amr.dao.abs;
import javax.annotation.Resource;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
public abstract class AbstractDAO {
@Resource
private SqlSessionFactory factory ;
public SqlSessionFactory getFactory() {
return factory;
}
public SqlSession getSession() {
return this.factory.openSession() ;
}
}
|
这样就基本上准备好了后台的操作逻辑。