Maven+Spring+Spring MVC+MyBatis+MySQL整合SSM框架详解编程语言
进入公司开发已经3个多月了,项目用的是Maven+Spring+Spring MVC+MyBatis+MySQL,趁这个周末有空,仔细研读一下公司项目的基本框架,学习一下这个环境是怎么搭建起来的,经过自己的研究终于是成功地试验出来。自己亲手做的才算是自己学到的,决定将其记录下来,以便日后查询,源码同时也欢迎大家拍砖。
一、数据库的准备
这次整合试验想着做个简单的,就决定做一个普通的用户登陆,就一张表吧
我新建的数据库名字是test,然后新建了一张表
DROP TABLE IF EXISTS `user`; CREATE TABLE `user` ( `username` varchar(40) NOT NULL, `password` varchar(40) NOT NULL, PRIMARY KEY (`username`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
二、Maven WEB项目的创建
这个在这里就不重复了,我这次的项目是基于上次的新建的maven web项目的,如果需要,请参考我之前的博客:http://blog.csdn.net/donggua3694857/article/details/51638598
三、开始整合之旅
用过maven的都知道,有了他我们就没必要去网上下载一堆的jar文件然后自己去管理(虽然我也挺习惯这个方式),下面列出的是我的pom文件,里面列出了哪些jar包都是干什么用的。
project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd" modelVersion 4.0.0 /modelVersion groupId com.gray4java /groupId artifactId maven /artifactId packaging war /packaging version 0.0.1-SNAPSHOT /version name maven Maven Webapp /name url http://maven.apache.org /url dependencies dependency groupId junit /groupId artifactId junit /artifactId version 3.8.1 /version scope test /scope /dependency !-- spring核心包 -- dependency groupId org.springframework /groupId artifactId spring-test /artifactId version 3.2.0.RELEASE /version /dependency dependency groupId org.springframework /groupId artifactId spring-webmvc /artifactId version 3.2.0.RELEASE /version /dependency dependency groupId org.springframework /groupId artifactId spring-core /artifactId version 3.2.0.RELEASE /version /dependency dependency groupId org.springframework /groupId artifactId spring-aop /artifactId version 3.2.0.RELEASE /version /dependency dependency groupId aspectj /groupId artifactId aspectjweaver /artifactId version 1.5.4 /version /dependency dependency groupId aspectj /groupId artifactId aspectjrt /artifactId version 1.5.4 /version /dependency dependency groupId org.codehaus.jackson /groupId artifactId jackson-mapper-asl /artifactId version 1.9.11 /version /dependency !--mybatis核心包-- dependency groupId org.mybatis /groupId artifactId mybatis /artifactId version 3.1.1 /version /dependency dependency groupId org.mybatis /groupId artifactId mybatis-spring /artifactId version 1.1.1 /version /dependency dependency groupId mysql /groupId artifactId mysql-connector-java /artifactId version 5.1.21 /version /dependency dependency groupId c3p0 /groupId artifactId c3p0 /artifactId version 0.9.1.2 /version type jar /type /dependency !--打印日志-- dependency groupId org.slf4j /groupId artifactId slf4j-api /artifactId version 1.7.5 /version /dependency dependency groupId org.slf4j /groupId artifactId slf4j-log4j12 /artifactId version 1.7.5 /version /dependency dependency groupId log4j /groupId artifactId log4j /artifactId version 1.2.17 /version /dependency dependency groupId jstl /groupId artifactId jstl /artifactId version 1.2 /version /dependency dependency groupId org.springframework /groupId artifactId spring-context-support /artifactId version 3.1.2.RELEASE /version type jar /type scope compile /scope /dependency /dependencies build finalName maven /finalName plugins plugin groupId org.apache.tomcat.maven /groupId artifactId tomcat6-maven-plugin /artifactId version 2.1 /version configuration url http://localhost:9090/manager /url server Tomcat6 /server port 9090 /port path / /path /configuration /plugin /plugins /build /project
maven配置好后就等它把jar包下载完,在下载的过程中
最有可能遇到的问题就是Missing artifact XXXXXX,然后
解决的办法就是,原则是找到本地的仓库,然后删除那个对应的,文件后面有lastUpate的再重新下载。
3.1 Spring和mybatis的整合
3.1.1 创建数据库属性文件jdbc.properties
span db.driver=com.mysql.jdbc.Driver db.url=jdbc:mysql://127.0.0.1:3306/test db.username=root db.password=123456
3.1.2 创建mybatis的配置文件mybatis-config.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 typeAliases typeAlias alias="user" type="com.gray.user.entity.User"/ /typeAliases /configuration
3.1.3 创建spring-mybatis配置文件
这个配置文件用于spring和mybatis整合的重要文件,主要有配置数据库、主动扫描和注入一些bean,详细配置如下:
?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:c="http://www.springframework.org/schema/c" xmlns:util="http://www.springframework.org/schema/util" 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" xmlns:ehcache="http://www.springmodules.org/schema/ehcache" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.1.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.1.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.1.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.1.xsd http://www.springmodules.org/schema/ehcache http://www.springmodules.org/schema/cache/springmodules-ehcache.xsd" !-- 引入属性文件 -- context:property-placeholder location="classpath:jdbc.properties" / !-- 自动扫描(自动注入) -- context:component-scan base-package="com.gray.*.service" / !-- 配置数据源 -- bean id="dataSource" destroy-method="close" property name="driverClass" value="${db.driver}" / property name="jdbcUrl" value="${db.url}" / property name="user" value="${db.username}" / property name="password" value="${db.password}" / property name="minPoolSize" value="1" / property name="maxPoolSize" value="20" / property name="maxIdleTime" value="1800" / property name="acquireIncrement" value="2" / property name="maxStatements" value="0" / property name="initialPoolSize" value="2" / property name="idleConnectionTestPeriod" value="1800" / property name="acquireRetryAttempts" value="30" / property name="breakAfterAcquireFailure" value="true" / property name="testConnectionOnCheckout" value="false" / /bean !-- myBatis文件 -- bean id="sqlSessionFactory" property name="dataSource" ref="dataSource" / !-- 自动扫描entity目录, 省掉Configuration.xml里的手工配置 -- property name="configLocation" value="classpath:mybatis-config.xml" / property name="mapperLocations" value="classpath:com/gray/user/entity/mybatis-*.xml" / /bean bean property name="basePackage" value="com.gray.*.dao" / property name="sqlSessionFactoryBeanName" value="sqlSessionFactory" / /bean !-- 配置事务管理器 -- bean id="transactionManager" property name="dataSource" ref="dataSource" / /bean !-- 配置事物的注解方式注入 -- tx:annotation-driven transaction-manager="transactionManager"/ bean id="sqlSession" constructor-arg index="0" ref="sqlSessionFactory" / constructor-arg index="1" value="BATCH" / /bean /beans
3.1.4 日志的输出配置
mybatis内置的日志工厂提供了日志功能,但是它的具体实现有他最先找到的方法来决定,顺序分别是:
slf4j apache commons logging log4j 2 log4j jdk logging如果一个都没找到,日志功能就被禁用掉了(在我实验的途中,遇到的情况是如果不使用slf4j,只有log4j他就不打印SQL语句,只打印别的日志,可能是我还不会配置不对,因为我见网上的那些博客都没有引入slf4j的包也能使用,对于这问题欢迎牛人给我留言解答)下面是我的创建的log4j.properties文件
##root logger , local level: debug, output: stdout ## ## root logger: better performance than others ## log4j.rootLogger=info,stdout log4j.appender.F=org.apache.log4j.DailyRollingFileAppender log4j.appender.F.DatePattern=.yyyy-MM-dd log4j.appender.F.File=logs/rcp-service-test.log log4j.appender.F.layout=org.apache.log4j.PatternLayout log4j.appender.F.layout.ConversionPattern=[%d{ISO8601}|%t|%-5p|%C] - %m%n log4j.appender.F.encoding=UTF-8 log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern=[%d{HH:mm:ss}|%-5p|%c] - %m%n #show application DEBUG log log4j.logger.com.asecs = DEBUG,F #show ibatis DEBUG log log4j.logger.com.ibatis = DEBUG log4j.logger.com.ibatis.common.jdbc.SimpleDataSource = DEBUG log4j.logger.com.ibatis.common.jdbc.ScriptRunner = DEBUG log4j.logger.com.ibatis.sqlmap.engine.impl.SqlMapClientDelegate = DEBUG log4j.logger.java.sql.Connection = DEBUG log4j.logger.java.sql.Statement = DEBUG log4j.logger.java.sql.PreparedStatement = DEBUG log4j.logger.java.sql.ResultSet = DEBUG
3.1.5 mybatis剩下的工作
前面的工作做完,spring和mybatis的整合就差不多了,接下来是创建实体类、mybatis映射文件以及DAO接口,service以及它的实现类了。
mybatis有通过Generator自动创建代码的,这里我们就勤快点自己手写了,反正也不多。 实体类Userimport org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.gray.user.dao.UserDao; import com.gray.user.entity.User; import com.gray.user.service.UserService; @Service public class UserServiceImpl implements UserService { @Autowired private UserDao User dao; public boolean doUserLogin(User user) { List User list = dao.selectId(user.getUsername()); if(list.size() == 0){ return false; }else{ if(list.get(0).getPassword().equals(user.getPassword())){ return true; }else{ return false;
差点还忘了最重要的映射mybatis-user.xml
?xml version="1.0" encoding="UTF-8" ? !DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" mapper namespace="com.gray.user.dao.UserDao" resultMap id="BaseResultMap" type="com.gray.user.entity.User" result column="username" property="username" / result column="password" property="password" / /resultMap sql id="Base_Column_List" username, password /sql select id="selectId" resultMap="BaseResultMap" parameterType="java.lang.String" select include refid="Base_Column_List" / from user where username = #{username,jdbcType=VARCHAR} /select /mapper
3.2 整合SpringMVC
完成上面的操作,接下来还剩下最后的整合springmvc,这个除了写配置文件外还需要额外去配置web.xml,废话不多说,直接上配置文件:
3.2.1 创建spring-mvc.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:c="http://www.springframework.org/schema/c" xmlns:util="http://www.springframework.org/schema/util" 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" xmlns:ehcache="http://www.springmodules.org/schema/ehcache" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.1.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.1.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.1.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.1.xsd http://www.springmodules.org/schema/ehcache http://www.springmodules.org/schema/cache/springmodules-ehcache.xsd" mvc:annotation-driven mvc:message-converters bean / bean / bean / bean / /mvc:message-converters /mvc:annotation-driven !-- 使用annotation 自动注册bean,[email protected],@Autowired的属性被注入 -- context:component-scan base-package="com.gray" context:include-filter type="annotation" expression="org.springframework.stereotype.Controller" / context:exclude-filter type="annotation" expression="org.springframework.stereotype.Service" / /context:component-scan aop:aspectj-autoproxy proxy-target- aop:include name="controllerAspect"/ /aop:aspectj-autoproxy
property name="prefix" value="/WEB-INF/jsp/" / property name="suffix" value=".jsp" / !--可为空,方便实现自已的依据扩展名来选择视图解释类的逻辑 -- /bean /beans
3.2.3 配置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" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0" display-name Archetype Created Web Application /display-name !-- Spring-mybatis的配置文件 -- context-param param-name contextConfigLocation /param-name param-value classpath:spring-mybatis.xml /param-value /context-param listener description spring监听器 /description listener-class org.springframework.web.context.ContextLoaderListener /listener-class /listener !-- 防止spring内存溢出监听器 -- listener listener-class org.springframework.web.util.IntrospectorCleanupListener /listener-class /listener !-- spring mvc servlet -- servlet description spring mvc servlet /description servlet-name springMvc /servlet-name servlet-class org.springframework.web.servlet.DispatcherServlet /servlet-class init-param description spring mvc 配置文件 /description param-name contextConfigLocation /param-name param-value classpath:spring-mvc.xml /param-value /init-param load-on-startup 1 /load-on-startup /servlet servlet-mapping servlet-name springMvc /servlet-name url-pattern *.do /url-pattern /servlet-mapping filter description 字符集过滤器 /description filter-name encodingFilter /filter-name filter-class org.springframework.web.filter.CharacterEncodingFilter /filter-class init-param description 字符集编码 /description param-name encoding /param-name param-value UTF-8 /param-value /init-param /filter filter-mapping filter-name encodingFilter /filter-name url-pattern /* /url-pattern /filter-mapping !-- 配置session超时时间,单位分钟 -- session-config session-timeout 60 /session-timeout /session-config !-- DEFAULT PAGE -- welcome-file-list welcome-file index.jsp /welcome-file /welcome-file-list /web-app
四、测试阶段
千辛万苦终于到了测试阶段。。。要弄懂配置文件里面到底写了些什么东西还是需要花点时间去研读的。
4.1 新建测试页面
测试我新建了两个jsp页面,分别是success.jsp和fail.jsp,顾名思义就是登陆成功了就显示success页面,失败则显示fail页面。页面写得很简单,就不把代码贴出来了,需要的在后面的源码里面有。
4.2 新建控制器 LoginController.java
后台逻辑也同样简单
package com.gray.user.controller; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.RequestMapping; import com.gray.user.entity.User; import com.gray.user.service.impl.UserServiceImpl; @Controller @RequestMapping("/test") public class LoginController { @Autowired private UserServiceImpl userService; @RequestMapping("/dologin.do") //url public String dologin(User user, Model model){ if(userService.doUserLogin(user)){ model.addAttribute("successMsg", "登陆成功!");//返回到页面所夹带的参数 model.addAttribute("name", user.getUsername()); return "/success";//返回的页面 }else{ model.addAttribute("failMsg", "用户不存在或密码错误!"); return "/fail";
4.3部署测试
做了那么多,成功或失败测一下就知道了,如果能成功通过测试,那么恭喜你SSM试验整合成功,如果失败了,那就请耐心地调试吧,毕竟程序员整天与bug为伍,或者给我留言或评论,我们一起解决问题一起进步。很显然我的是成功的,不然我也不会写出来是不是,哈哈。
(手动分割线)
这边测试界面写得丑了点,还请大家多多担待 ..
终于可以长舒一口气,Maven+Spring+Spring MVC+MyBatis+MySQL整合SSM框架到这里就结束了,要继续加其他功能就在这基础上添加就好,最后附一张项目的完整的目录结构图:
最后同样附上项目源码下载地址:http://download.csdn.net/detail/donggua3694857/9572482
github:https://github.com/HuangJunXiong/Spring-SpringMVC-MyBatis-Maven
注:此demo的spring版本较低,是3.2,最高与jdk1.7兼容,建议更新spring的版本,如有需要请参考我github上的例子,那个是4.3.3.RELEASE
14032.html
cjavamysqlxml相关文章
- 【说站】mysql自增主键用完的处理办法
- MySQL大表增加唯一索引场景
- MySQL Error number: MY-011252; Symbol: ER_AUTH_LDAP_ERROR_LOGGER_ERROR_MSG; SQLSTATE: HY000 报错 故障修复 远程处理
- Mysql Server系统架构介绍详解数据库
- 上传MySQL文件上传最大限制(mysql文件最大)
- 查看MySQL数据库密码的方法(mysql查看密码)
- Oracle与MySQL: 不同之处(oracle与mysql的区别)
- MySQL数据库:从表中导出数据(mysql数据库导表)
- Mysql:新增实例实现快速运行(mysql增加实例)
- MySQL和PHP的排序技巧(mysqlphp排序)
- MySQL查看表分区的指南(mysql查看分区)
- 查看MySQL连接IP的简单方法(mysql查看连接ip)
- 如何使用MySQL显示密码(mysql显示密码)
- MySQL内存配置优化:让数据库性能飞起来(mysql内存配置优化)
- 环境的搭建Linux系统下MySQL环境搭建实战指南(linux系统mysql)
- 探索MySQL表引擎的魅力(mysql查看表引擎)
- 使用EA连接MySQL数据库(ea连接mysql)
- MySQL远程使用:掌握基础知识,远程操作Mysql数据库。(mysql远程使用)
- 如何学习和使用MySQL数据库:全面掌握MySQL技术吧(mysql吧)
- JSP与MySQL实现登录系统(jsp mysql 登陆)
- MySQL面试问题,有哪些值得重视的?(mysql 面试问题)
- 数据库中的MySQL 理解Mysql数据库的重要性(MySql中mysql)
- MySQL添加事务的C语言实现(c mysql添加事务)
- MySQL无密码连接从入门到精通(c mysql无密码连接)
- MySQL中如何使用AGE字段进行日期计算(mysql中age)
- MySQL两表合并实现数据无缝整合(mysql 两表并集)
- babun登录MySQL数据库的技巧(babun登陆mysql)
- MySQL创建表示例快速掌握MYSQL基础操作(mysql中创建表的例子)
- 深入MySQL追溯数据库中的七天前数据(mysql 七天前)
- 使用MySQL计算一组数据的差值(mysql一组数据 差值)
- GET MYSQL 免费下载并破解MySQL数据库软件(mysql下载和破解)
- MySQL遇到连接问题如何处理(mysql不能链接)