spring-mybatis项目练习 - 通讯录系统,ssm配置文件部分

Posted 枫林晚月

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了spring-mybatis项目练习 - 通讯录系统,ssm配置文件部分相关的知识,希望对你有一定的参考价值。

  好久好久没来这里了,这段时间一直在实习及忙各种麻烦事,暮然回首,觉得有点失去了当初静静学习的感觉。亡羊补牢,还是来这里贴上一点东西,找找学习的感觉。回想当初热血沸腾地开博,后来竟惊觉自己不是一个可以静下心来写博的人。感觉自己都不是当初那个闷骚的猿了T_T

  这段时间的实习,主要是干web开发,负责给公司的项目写一点点功能。公司的项目都是ssm框架的maven的项目。可怜我初来时连ssm其中一个字母都不懂T_T,就spring是听过的。所以能够做的事情也就非常地有限。在空余的时间里,一路在看别人的代码,还有mybatis,spring的书籍。在工作学习的过程中,我觉得要想成长,无论如何都要自己由头到尾地写一个小项目。于是,便有了写这个东西的想法,无奈朝九晚七时间有限。真正开始动工,是在十几天前,过程可谓相当坎坷,趁国庆长假,躲在家里潜心修炼,终于略有小成,瞬间有种技术宅的感觉了。

  在开始之前,还是想多啰嗦几句这段时间的感悟(反正没人看),做一个网页开发的java攻城狮,有几点是必需坚持的:

  1.永远不要忽略基础,java基础的东西虽然不多,但深入学习了解却是非常重要的,尤其像io,异常处理,多线程这样的知识。

  2.在工作中,永远不要停留在应用和解决问题的层面上,看到很多前辈的博客个性签名都会写类似“不想当码农的程序猿”这样的话,就是这个道理。我始终觉得,对一个java攻城狮而言,对一些框架及java技术,例如反射,往深处探究其原理及实现方式,是一件相当cool的事。所以在接下的blog里,我会逐渐逐渐地把自己总结(东拉西扯)的一些东西发出来,主要是关于spring,mybatis的一些简单的东西。

  3.学习。

  4.学习。。

  5.学习。。。

  就这些,接下来入正题。

 

----------------------------------------一直不理解为什么有人会在分割线上写“我是华丽的分割线”这么蠢的话-----------------------------------------

 

  这个项目继承自己之前写的一个练习xml操作的项目,后来变成一个ajax练习的项目,所以前端的处理会相当极端,一个html处理所有的请求。再后来,变成mybatis的练习项目,这个项目我可能将来也会贴出来,不过意义不大,对于单纯用mybatis而言,用spring对其进行管理会使代码优雅得多,就像是直接调用dao一样便捷。这个项目的最后版,便是这个ssm框架的版本。标题是spring-mybatis项目,主要是因为spring-mvc只用了异步传输的功能,model都没有出现,所以项目是以spring及mybatis为主。考虑到自己的攻城狮生涯还很长,我这里用到的框架都是接近最新版的。为了对spring里面各种包的作用有更深入的认识,这里不用maven构建项目,而是自己把需要的包一个一个搬过来。

 

  项目地址:https://pan.baidu.com/s/1bpARdoV    ,目录下book_SSM.zip便是。

 

  项目名:通讯录系统(book_SSM)

  相关框架版本:spring-4.3.10(spring-mvc也在里面),mybatis-3.4.4,mybatis-spring-1.3.0

  ide:eclipse-jee-mars

  jdk:1.7

  server:tomcat v8.0(7.0也可以)

  功能:用户注册,登录,登出,联系人增删查改,联系人批量导出为xml文件,也可以将xml文件导入到系统。

  项目结构目录:

  

  控制层:controller,业务层:service,数据库操作层:dao,dto及vo是pojo类

 

  需要的包:

  

 

  首先放ssm三大框架的配置文件,个人觉得这才是最有学习价值的地方。写的时候最费心机。

  spring:applicationContext.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:p="http://www.springframework.org/schema/p"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.3.xsd
    http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-4.3.xsd
    http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-4.3.xsd
    http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.3.xsd ">
    
    <!-- 支持注解 -->
    <context:annotation-config/>
    <!-- 自动扫描的包 -->
    <context:component-scan base-package="com.hg.book" use-default-filters="false">
        <context:include-filter type="annotation" expression="org.springframework.stereotype.Repository"/>
        <context:include-filter type="annotation" expression="org.springframework.stereotype.Service"/>
    </context:component-scan>
    
    <!-- 导入数据源 -->
    <!-- 方式一,不可用??? -->
    <!-- <context:property-placeholder location="classpath:jdbc.properties" /> -->
    
    <!-- 方式二 -->
    <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
        <property name="locations">
            <array>
                <!-- 可以放多个properties -->
                <value>classpath:jdbc.properties</value>
            </array>
        </property>
    </bean>
    
    <!-- 集成c3p0连接池 -->
    <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
        <property name="driverClass" value="${driver}"/>
        <property name="jdbcUrl" value="${url}"/>
        <property name="user" value="${username}"/>
        <property name="password" value="${password}"/>
    </bean>
    
    <!-- mybatis的sqlsessionFactory -->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean" scope="prototype">
        <property name="dataSource" ref="dataSource"/>
        <property name="configLocation" value="classpath:mybatis_config.xml"/>
    </bean> 
    
    <!-- sqlSessionTemplate -->
    <bean id="sqlSessionTemplate" class="org.mybatis.spring.SqlSessionTemplate" scope="prototype">
        <constructor-arg index="0" ref="sqlSessionFactory"/>
    </bean>
    
    <!-- 事务管理 -->
    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource"/>
    </bean>
    <!-- 使用注解管理事务 -->
    <tx:annotation-driven transaction-manager="transactionManager" proxy-target-class="true"/>
    
    <!-- 自动扫描创建mapper -->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <property name="basePackage" value="com.hg.book.dao"/>
        <property name="sqlSessionTemplateBeanName" value="sqlSessionTemplate"/>
        <property name="annotationClass" value="org.springframework.stereotype.Repository"/>
    </bean>
    
</beans>

 

   mybatis:mybatis_config.xml,这里相当简单,因为很多内容,例如sqlsessionfactory,mapper,数据源都交由spring管理了。

<?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>
    
    <settings>
        <!-- 使全局的映射器启用或禁用缓存 -->
        <setting name="cacheEnabled" value="true"/>
        <!-- 允许JDBC支持生成的键。需要适合的驱动。如果设置为true,则这个设置强制生成的键被使用 -->
        <setting name="useGeneratedKeys" value="true"/>
        <!-- 配置默认的执行器。SIMPLE执行器没有什么特别之处。REUSE执行器重用预处理语句。BATCH执行器重用语句和批量更新。 -->
        <setting name="defaultExecutorType" value="REUSE"/>
        <!-- 全局启用或禁用延迟加载。当禁用时,所有关联对象都会即时加载 -->
        <setting name="lazyLoadingEnabled" value="true"/>
        <!-- 设置超时时间,它决定驱动等待一个数据库响应的时间 -->
        <setting name="defaultStatementTimeout" value="25000"/>
    </settings>
    
    <!-- 定义别名 -->
    <typeAliases>
        <typeAlias alias="member" type="com.hg.book.dto.Memberdto"/>
        <typeAlias alias="book" type="com.hg.book.dto.Bookdto"/>
        <typeAlias alias="update" type="com.hg.book.dto.Updatedto"/>
    </typeAliases>
    
    <!-- 映射器 -->
    <mappers>
        <mapper resource="com/hg/book/dao/Bookmapper.xml"/>
    </mappers>
</configuration>

 

  spring mvc:springmvc-servlet.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:p="http://www.springframework.org/schema/p"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.3.xsd
    http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-4.3.xsd
    http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-4.3.xsd
    http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-4.3.xsd
    http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.3.xsd ">

    <!-- 启用default-servlet -->
    <mvc:default-servlet-handler/>
    <!-- 使视图拦截器能够工作 -->
    <mvc:annotation-driven>
        <!-- 处理返回String编码 -->
        <mvc:message-converters register-defaults="true">
            <bean class="org.springframework.http.converter.StringHttpMessageConverter">
                <constructor-arg value="utf-8"/>
            </bean>
        </mvc:message-converters>
    </mvc:annotation-driven>
    
    <!-- 自动扫描包 -->
    <context:component-scan base-package="com.hg.book.controller"/>
    <context:annotation-config />
    
    <!-- spring视图拦截器 -->
    <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
        <property name="messageConverters">
            <list>
                <!-- 《加入编码拦截器后已失效》处理返回值为String类型的结果;防止返回String时转换为json自动添加双引号 -->
                <!-- <ref bean="stringHttpMessageConverter" /> -->
                
                <!-- 读取到@ResponseBody的时候触发 -->
                <ref bean="mappingJacksonHttpMessageConverter" />
            </list>
        </property>
    </bean>
    
    <!-- <bean id="stringHttpMessageConverter" class="org.springframework.http.converter.StringHttpMessageConverter">
        <constructor-arg value="UTF-8" index="0"/>
    </bean> -->
    
    <!-- json转化器,可以将结果转化 -->
    <bean id="mappingJacksonHttpMessageConverter" class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
        <property name="supportedMediaTypes">
            <list>
                <value>application/json;charset=UTF-8</value>
            </list>
        </property>
    </bean>
</beans>

 

  最后是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" version="2.5">
  <display-name></display-name>
  
  <!-- spring配置文件路径 -->
  <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:applicationContext.xml</param-value>
  </context-param>
  
  <listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  </listener>
  
  <!-- 编码处理 -->
  <filter>
      <filter-name>encodingfiller</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>encodingfiller</filter-name>
      <url-pattern>/*</url-pattern>
  </filter-mapping>
  
  <!-- spring mvc的dispatcherservlet -->
  <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*:springController.xml 
        </param-value>
    </init-param> 
    -->
    <load-on-startup>2</load-on-startup>
  </servlet>
  
  <!-- defaultservlet使springmvc不拦截某些页面 -->
  <servlet-mapping>
      <servlet-name>default</servlet-name>
      <url-pattern>/view.html</url-pattern>
  </servlet-mapping>
  <servlet-mapping>
    <servlet-name>springmvc</servlet-name>
    <url-pattern>/</url-pattern>
    <!-- <url-pattern>*.do</url-pattern> -->
  </servlet-mapping>
  
  <session-config>
    <session-timeout>30</session-timeout>
  </session-config>
  
  
  <welcome-file-list>
    <welcome-file>view.html</welcome-file>
  </welcome-file-list>
  
  <error-page>
    <error-code>404</error-code>
    <location>/resources/404.jpg</location>
  </error-page>

</web-app>

  至此结束,配置写的时候遇到问题都是翻来覆去的问度娘,写完后觉得其实spring的设计者已经将种种情况都考虑过了,而初级开发者用起来却问题多多,主要是因为对框架一知半解,同时框架的知识又非常多。所以系统地学习框架的知识是非常有必要的。要熟悉框架,学习和实战都是必需的,不要停留在简单的应用和解决问题的层面上。

  项目的其余部分,可能以后会贴出来。

以上是关于spring-mybatis项目练习 - 通讯录系统,ssm配置文件部分的主要内容,如果未能解决你的问题,请参考以下文章

spring-mybatis项目练习 - 通讯录系统,ssm配置文件部分

spring-mybatis整合项目 异常处理

spring-mybatis

spring-mybatis整合的dao单元测试

[Go] Golang练习项目-web客服系统即时通讯websocket项目go-fly

spring-mybatis整合异常