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配置文件部分