我们已经准备好了,你呢?

2020我们与您携手共赢,为您的企业形象保驾护航!

作为web开发初学者,面对各种框架的配置文件时常感到知其然不知其所以然。这是因为很多配置文件其实有多种写法都可以达到同样目的。最近研究了spring整合mybatis的工程,终于把这些门道大致摸清了。

web开发领域一向推崇MVC模式,于是有了SSH之类的组合框架。不过我总感觉SSH有点臃肿,甚至即便只用spring的MVC模块,我都觉得没有自己写servlet理解起来直接,于是采用更简洁的spring+mybatis+servlet的结构。mybatis是轻量级的orm框架。除非回到自己手写jdbc的sql语句原始途径上去,否则这点复杂性还是需要的,而且mybatis的映射语句就是sql,学习曲线并不高。

本来spring也可以不用,但是表多了、dao接口多了,手工管理起来也有点麻烦。所以还是用spring管理起来,至少xml文件能少写很多很多行。

作为对“简洁”事务的执着追求者,我把这些配置文件都精简到了最短。多出的文字都是我做各种实验后写的“论文”,用以知其所以然。

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" 
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" 
id="courseware" version="2.5">

  <!-- 标准servlet定义 -->
  <servlet>
    <servlet-name>CheckName</servlet-name>
    <servlet-class>com.zjc.servlet.CheckName</servlet-class>
  </servlet>
  
  <!-- 在servlet中使用spring上下文中的bean时,需要写一个SpringServlet作为中介。这些servlet都指向这个中介。当然这些servlet也要注册在spring的配置文件中 -->
  <servlet>
    <servlet-name>InitServlet</servlet-name>
    <servlet-class>com.zjc.servlet.SpringServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet>
    <servlet-name>Test</servlet-name>
    <servlet-class>com.zjc.servlet.SpringServlet</servlet-class>
  </servlet>
  
  <!-- 指定spring的配置文件及设置监听,在启动时加载sping框架 -->
  <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>WEB-INF/config/application-Context.xml</param-value>
  </context-param>
  <listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  </listener>
  
  <!-- 指定log4j属性文件位置及设置监听,启动spring时启动log4j -->
  <context-param>  
        <param-name>log4jConfigLocation</param-name>  
        <param-value>WEB-INF/config/log4j.properties</param-value>  
  </context-param>
  <listener>
    <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
  </listener>
  
  <!-- 使用spring的字符编码过滤器,降低产生乱码的概率 -->
  <filter>
      <filter-name>encodingFilter</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>
      <init-param>
       <param-name>forceEncoding</param-name>
       <param-value>true</param-value>
    </init-param>
  </filter>
  <filter-mapping>
      <filter-name>encodingFilter</filter-name>
      <url-pattern>/*</url-pattern>
  </filter-mapping>
   
  <!-- servlet映射 -->
  <servlet-mapping>
    <servlet-name>CheckName</servlet-name>
    <url-pattern>/CheckName</url-pattern>
  </servlet-mapping>
  <servlet-mapping>
    <servlet-name>Test</servlet-name>
    <url-pattern>/test</url-pattern>
  </servlet-mapping>

	<welcome-file-list>
		<welcome-file>index.html</welcome-file>
	</welcome-file-list>
</web-app>
spring的配置文件:application-Context.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" 
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context" 
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xsi:schemaLocation="http://www.springframework.org/schema/mvc 
       http://www.springframework.org/schema/mvc/spring-mvc-4.1.xsd
		http://www.springframework.org/schema/beans 
                http://www.springframework.org/schema/beans/spring-beans-4.1.xsd
		http://www.springframework.org/schema/context 
                http://www.springframework.org/schema/context/spring-context-4.1.xsd">
                
    <!-- 引用属性文件,也可以不用属性文件直接写在这。但个人认为属性文件还是必要的,直接修改这个文件是不易懂的 -->
    <context:property-placeholder location="WEB-INF/config/jdbc.properties"/>
    
    <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
    	<property name="driverClassName" value="${jdbc.driver}"/>
    	<property name="url" value="${jdbc.url}"/>
    	<property name="username" value="${jdbc.username}"/>
    	<property name="password" value="${jdbc.password}"/>
    </bean>
    
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
    	<!-- 引用上面的数据源 -->
    	<property name="dataSource" ref="dataSource"/>
    	<!-- 指定mybatis核心配置文件  --> 
    	<property name="configLocation" value="WEB-INF/config/mybatis.xml"/>
    	<!-- 指定所有mapper映射文件 *.xml位置,自动查找 -->
    	<property name="mapperLocations" value="classpath*:com/zjc/dao/*.xml"/>
    </bean>
    
    <!-- 自动扫描接口(mapper)文件,生成代理类对象,并加入到spring上下文中。
    !bean id就是接口名称,且自动与*.xml中的映射语句关联起来。与xml的文件名无关。接口前需要加入@Repository注解 -->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
    	<property name="basePackage" value="com.zjc.dao"/>
    	
    	<!-- 本来从逻辑上说,此处还应该再加一个sqlSessionFactory属性的引用,但只要加了就会导致jdbc.properties引用值不正确。在只有一个数据源的情况下,不加这一句反倒不会出错,于是省略。 
    	!如加上此句:property name="annotationClass" value="org.springframework.stereotype.Repository" 表示只有被@Repository注解的接口才被扫描,不加表示扫描全部,故省略。
    	!设置自动扫描对Mapper的命名有要求,不能以单个大写字母开头, 各种例子中都未见此说明,WTF!
    	-->
    </bean>
    <!--有了上面的自动扫描,就无需逐个手工定义Mapper bean了,以下是手工定义的例子
     <bean id="userMapper" class="com.zjc.bean.User">
		<property name="mapperInterface" value="com.zjc.dao.IUserMapper"/>
		<property name="sqlSessionFactory" ref="sqlSessionFactory"/>
     -->
    
    <!-- 使用spring事务管理 -->
    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    	<property name="dataSource" ref="dataSource"/>
    </bean>
    
    <!-- 将servlet定义在spring中,和web.xml中的内容保持一致,当然如果用到了mybatis bean,也要作为属性注入 -->
    <bean id="InitServlet" class="com.zjc.servlet.InitServlet"/>
    <bean id="Test" class="com.zjc.test.UserAccess">
    	<property name="iu" ref="IUserMapper"/>
    	<!-- 此处引用为spring上下文中的名字,所以不能是类似com.zjc.dao.IUserMapper这样的全限定名 -->
    </bean>
</beans>
mybatis配置文件:mybatis.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
	<!-- 通知mybatis,日志系统是什么 -->
	<settings>
    	<setting name="logImpl" value="LOG4J"/>
    </settings>
    
    <!-- 定义mybatis使用的别名,映射文件*.xml中所用的名称依赖于此 -->
	<typeAliases>
		<!-- 
		<typeAlias alias="User" type="com.zjc.bean.User"/>  
		此处为手工逐个定义方法,也可用下面扫描目录的方法,但需要在bean类中加入类似@Alias("User")这样的注解-->
		
		<package name="com.zjc.bean"/>
	</typeAliases>
	
	<!-- 使用spring自动扫描时,就需要把这段手工创建的映射关掉,否则冲突
    <mappers>
    	<mapper resource="com/zjc/bean/User.xml"/>
    </mappers>
     -->
</configuration>

jdbc属性文件:jdbc.properties

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://127.0.0.1:3306/courseware
jdbc.username=courseware
jdbc.password=courseware

log4j属性文件:log4j.properties

log4j.rootLogger=info,CA

#trace mybatis--If you need log mybatis sql statements,add Interface(Mapper) at here.
log4j.logger.com.zjc.dao.IUserMapper=TRACE
#log4j.logger.com.zjc.dao.ICommentMapper=TRACE

log4j.appender.CA=org.apache.log4j.ConsoleAppender
log4j.appender.CA.layout=org.apache.log4j.PatternLayout
log4j.appender.CA.layout.ConversionPattern=%d5p %c %x - %m%n

目录结构:

代码目录:

我们凭借多年的网站建设经验,坚持以“帮助中小企业实现网络营销化”为宗旨,累计为1000多家客户提供品质建站服务,得到了客户的一致好评。如果您有网站建设网站改版百度优化、名注册、主机空间、手机网站建设公众号开发小程序制作、网站备案等方面的需求...
请立即点击咨询我们或拨打咨询热线: 13820372851,我们会详细为你一一解答你心中的疑难。项目经理在线

我们已经准备好了,你呢?

2020我们与您携手共赢,为您的企业形象保驾护航!

在线客服
联系方式

热线电话

13820372851

上班时间

周一到周五

公司电话

022-26262675

二维码
线
在线留言