使用Spring、SpringMvc、MyBatis搭建SSM框架
来源:互联网 发布:three.js 添加标记 编辑:程序博客网 时间:2024/05/03 18:03
版权声明:本文出自阿钟的博客,转载请注明出处:http://blog.csdn.net/a_zhon
目录(?)[+]
- SpringMvc架构流程图
- 博客中使用到的jar文件 在文末Demo中会给出
- 带你一步步使用IntelliJ IDEA开发神器创建一个空白的Web Application项目 配置SSM web项目框架
- 我们需要添加必要的jar包括Spring包括SpringMvcMyBatisMyBatis-Spring整合包数据库驱动第三方连接池
- 创建项目的目录结构 其中 controllerdaopojo简单的Java对象Plain Old Java Objectservice 为必需的目录结构 其他的就看你自己创建了
- 接下来就是配置 配置 配置 创建一堆配置文件在src同级目录下创建一个config目录专门用来存放配置文件
- 来看下config的最终样子
- 配置前端控制器webxml 文件位于项目的webWEB-INF下
- 配置Tomcat服务器 我这里使用的是v7082如下图操作
- 经过了上面一大堆的配置现在项目终于可以run起来了点击下图的绿色三角 然后静静地等待就行了
- 项目可以跑起来了 那就开始处理需求和逻辑了这里我们来实现这个登录的功能 看下目录结构
- 首先通过数据库 MyBatis逆向工程生成 dao 和 pojo 层文件 下面的jar文件 会在最后Demo下载中给出
- 现在就只剩Service和Controller中的代码编写了那就先来写Service层
- Demo下载隆重登场
- 好了写到这里 一个简单的SSM登录操作就完成了
SpringMvc架构流程图
博客中使用到的jar文件 在文末Demo中会给出
1、带你一步步使用IntelliJ IDEA
开发神器创建一个空白的Web Application
项目 配置SSM web项目框架
2、我们需要添加必要的jar(包括:Spring(包括SpringMvc)、MyBatis、MyBatis-Spring整合包、数据库驱动、第三方连接池)
在与
src
同级的目录下创建一个libs
目录用来放.jar
文件, 对于web项目感觉就是jar包一顿拷贝 粘贴。
jackson-annotations-2.4.0
、jackson-core-2.4.2
、jackson-databind-2.4.2
返回json数据支持。
mysql-connector-java-5.1.7-bin
数据库驱动包。
log4j-1.2.17
、log4j-api-2.0-rc1
、log4j-core-2.0-rc1
、slf4j-api-1.7.5
、slf4j-log4j12-1.7.5
log4j 日志框架包。
依赖jar 如下图:右键Add As Library
当 依赖jar包之后(或者移除一个jar包) 记得进入项目设置 查看依赖的jar是否需要添加至:artifact;只要点击Fix 选择第一个即可
使用Spring MVC 实现文件上传遇到的问题以及解决方案
3、创建项目的目录结构 其中 controller、dao、pojo(简单的Java对象(Plain Old Java Object)、service 为必需的目录结构 其他的就看你自己创建了。
4、接下来就是配置 配置 配置 创建一堆配置文件;在src
同级目录下创建一个config
目录专门用来存放配置文件。
这里需要将这个文件夹设为资源文件夹,在文件夹上右键如下操作:
首先配置Dao层:
- MyBatis配置
sqlMapConfig.xml
空文件即可 需要文件头
<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd"><configuration></configuration>
- 1
- 2
- 3
- 4
- 5
- 配置数据库连接
db.properties
jdbc驱动 地址 用户名 密码
jdbc.driver=com.mysql.jdbc.Driverjdbc.url=jdbc:mysql://192.168.0.3:3306/azhon?characterEncoding=utf-8jdbc.username=rootjdbc.password=123456
- 1
- 2
- 3
- 4
- 配置
applicationContextDao.xml
,让spring管理sql session factory 使用mybatis和spring整合包中的、配置Mapper扫描器
<?xml version="1.0" encoding="UTF-8" ?><beans xmlns="http://www.springframework.org/schema/beans"xmlns:context="http://www.springframework.org/schema/context"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans-4.0.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context-4.0.xsd"><!-- 加载配置文件 --><context:property-placeholder location="classpath:db.properties" /><!-- 数据库连接池 --><bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> <property name="driverClassName" value="${jdbc.driver}" /> <property name="url" value="${jdbc.url}" /> <property name="username" value="${jdbc.username}" /> <property name="password" value="${jdbc.password}" /> <property name="maxActive" value="10" /> <property name="maxIdle" value="5" /></bean><!-- mapper配置 --><!-- 让spring管理sql session factory 使用mybatis和spring整合包中的 --><bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <!-- 数据库连接池 --> <property name="dataSource" ref="dataSource" /> <!-- 加载mybatis的全局配置文件 --> <property name="configLocation" value="classpath:sqlMapConfig.xml" /></bean><!-- 配置Mapper扫描器 value 改为你的对应包名--><bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <property name="basePackage" value="com.azhon.dao" /></bean></beans>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- MyBatis配置
配置Service层:
applicationContextService.xml
配置包扫描器,扫描@Service注解的类。
<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"xmlns:context="http://www.springframework.org/schema/context"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd"><!-- @Service扫描 base-package 改为你的对应包名--><context:component-scan base-package="com.azhon.service" /></beans>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
applicationContextTrans.xml
配置事务
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd"> <!-- 事务管理器 --> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <!-- 数据源 --> <property name="dataSource" ref="dataSource" /> </bean> <!-- 通知 --> <tx:advice id="txAdvice" transaction-manager="transactionManager"> <tx:attributes> <!-- 传播行为 --> <tx:method name="save*" propagation="REQUIRED" /> <tx:method name="insert*" propagation="REQUIRED" /> <tx:method name="delete*" propagation="REQUIRED" /> <tx:method name="update*" propagation="REQUIRED" /> <tx:method name="find*" propagation="SUPPORTS" read-only="true" /> <tx:method name="get*" propagation="SUPPORTS" read-only="true" /> </tx:attributes> </tx:advice> <!-- 切面 com.azhon.service 改为你的对应包名--> <aop:config> <aop:advisor advice-ref="txAdvice" pointcut="execution(* com.azhon.service.*.*(..))" /> </aop:config></beans>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
配置表现层
springMvc.xml
自动配置最新版的处理器映射器和处理器适配器、配置@Controller注解扫描
<?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/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd"><!-- 注解驱动:作用:替我们自动配置最新版的处理器映射器和处理器适配器 有log4j时也会自动配置--><mvc:annotation-driven> <!--解决返回字符串乱码问题--> <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><!--配置 @Controller 扫描 base-package 改为你对应的包名--><context:component-scan base-package="com.azhon.controller" /><!-- 配置视图解析器 作用:在Controller中指定页面路径的时候就不用写页面的完整路径名称了,可以直接写页面去掉扩展名的名称 --><bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <!-- 真正的页面路径 = 前缀 + 去掉后缀名的页面名称 + 后缀 --> <!-- 前缀 --> <property name="prefix" value="/jsp/" /> <!-- 后缀 --> <property name="suffix" value=".jsp" /></bean></beans>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 视图解析器 可以配置 也可以不配置、当你项目用的都是同一种文件类型的时候你可以配置 可以很方便的使用。当你同时用到了 .html .jsp文件的时候这个就没什么用了,所以我在项目中就直接注释了。
配置
log4j2.properties
日志,更多的配置可以前往官网或者百度查找。
log4j.rootLogger=DEBUG, CONSOLE, FILE## for consolelog4j.appender.CONSOLE=org.apache.log4j.ConsoleAppenderlog4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayoutlog4j.appender.CONSOLE.layout.ConversionPattern=%5p [%t] - %m%n
- 1
- 2
- 3
- 4
- 5
5、来看下config
的最终样子
6、配置前端控制器web.xml
文件位于项目的/web/WEB-INF/
下
<?xml version="1.0" encoding="UTF-8"?><web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" version="3.1"> <!--配置为 / 直接接url 默认为*.action--> <servlet-mapping> <servlet-name>springMvc</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> <!--spring mvc 前端控制器--> <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:springMvc.xml</param-value> </init-param> <!--在tomcat启动的时候就加载这个servlet--> <load-on-startup>1</load-on-startup> </servlet> <!--因为配置了 / 拦截所有的请求导致无法访问静态资源 配置静态资源访问--> <!--http://blog.csdn.net/wangyi201212/article/details/50404101--> <servlet-mapping> <servlet-name>default</servlet-name> <url-pattern>*.jpg</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>default</servlet-name> <url-pattern>*.js</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>default</servlet-name> <url-pattern>*.css</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>default</servlet-name> <url-pattern>*.gif</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>default</servlet-name> <url-pattern>*.png</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>default</servlet-name> <url-pattern>*.html</url-pattern> </servlet-mapping> <!--加载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> <!--配置项目启动的主界面--> <welcome-file-list> <welcome-file>login.html</welcome-file> </welcome-file-list> <!--配置为UTF-8--> <filter> <filter-name>characterEncodingFilter</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>characterEncodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping></web-app>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
在上面我配置了项目一启动的时候加载
login.html
这个文件(这是我在网上找的一个登录模版),你这里就可以在/web
目录下随便创建一个空白的html文件或者jsp文件 替换就好了。
7、配置Tomcat
服务器 我这里使用的是v7.0.82,如下图操作:
1、进入项目设置
2、添加一个Tomcat
3、在Application server处 配置本地Tomcat路径,点击Fix 然后 点击OK就添加成功了
8、经过了上面一大堆的配置现在项目终于可以run起来了,点击下图的绿色三角 然后静静地等待就行了。
启动的效果图:
9、项目可以跑起来了 那就开始处理需求和逻辑了,这里我们来实现这个登录的功能 看下目录结构:
10、首先通过数据库 MyBatis逆向工程生成 dao 和 pojo 层文件 (下面的jar文件 会在最后Demo下载中给出)
- 我的数据库表结构(sql文件Demo转会给出):
generatorConfig.xml
文件配置
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE generatorConfiguration PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN" "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd"><generatorConfiguration> <classPathEntry location="mysql-connector-java-5.1.25-bin.jar" /> <context id="DB2Tables" targetRuntime="MyBatis3"> <commentGenerator> <property name="suppressDate" value="true" /> <property name="suppressAllComments" value="true" /> </commentGenerator> <!--数据库链接URL,用户名、密码 --> <jdbcConnection driverClass="com.mysql.jdbc.Driver" connectionURL="jdbc:mysql://地址:端口/数据库名字" userId="用户名" password="密码"/> <javaTypeResolver> <property name="forceBigDecimals" value="false" /> </javaTypeResolver> <!-- 生成模型的包名和位置 targetPackage 改为你对应的 pojo 位置--> <javaModelGenerator targetPackage="com.azhon.pojo" targetProject="src"> <property name="enableSubPackages" value="true" /> <property name="trimStrings" value="true" /> </javaModelGenerator> <!-- 生成映射文件的包名和位置 targetPackage 改为你对应的 dao 位置--> <sqlMapGenerator targetPackage="com.azhon.dao" targetProject="src"> <property name="enableSubPackages" value="true" /> </sqlMapGenerator> <!-- 生成DAO的包名和位置 targetPackage 改为你对应的 dao 位置--> <javaClientGenerator type="XMLMAPPER" targetPackage="com.azhon.dao" targetProject="src"> <property name="enableSubPackages" value="true" /> </javaClientGenerator> <!-- 要生成的表 tableName是数据库中的表名或视图名 domainObjectName是实体类名--> <table tableName="tb_member" domainObjectName="TbMember" enableCountByExample="true" enableUpdateByExample="true" enableDeleteByExample="true" enableSelectByExample="true" selectByExampleQueryId="true"/> </context></generatorConfiguration>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
文件中有注释的地方都是需要修改的地方,执行如下命令进行文件生成:
在 cmd/Terminal 中进入到generatorConfig.xml文件夹目录下 执行如下命令:
Java -jar mybatis-generator-core-1.3.2.jar -configfile generatorConfig.xml -overwrite
11、现在就只剩Service和Controller中的代码编写了,那就先来写Service层:
Service层:
LoginService.java
定义一个接口 编写一个根据用户名 密码查询数据库的方法
public interface LoginService {/** * 根据用户名 密码查询数据库 * * @param tmName 用户名 * @param tmPass 密码 * @throws Exception */List<TbMember> findUserByName(String tmName, String tmPass) throws Exception;}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
LoginServiceImpl.java
实现接口的方法,编写数据查询。千万别落了@Service
注解
@Servicepublic class LoginServiceImpl implements LoginService { @Autowired TbMemberMapper tbMemberMapper; @Override public List<TbMember> findUserByName(String tmName, String tmPass) throws Exception { //添加查询条件 TbMemberExample example = new TbMemberExample(); TbMemberExample.Criteria criteria = example.or(); criteria.andTmNameEqualTo(tmName); criteria.andTmPassEqualTo(tmPass); return tbMemberMapper.selectByExample(example); }}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
Controller层:方法上的参数也就是 网页表单提交传输过来的参数 名字要一一对应
LoginController.java
处理用户请求,千万别落了@Controller
注解
@Controllerpublic class LoginController { public final Logger logger = LogManager.getLogger(getClass()); @Autowired public LoginService loginService; /** * 添加这个映射 这样输入 localhost:8080/login 就可以直接访问我们的登录页面 * * @return 返回文件的路径 */ @RequestMapping("/login") public String login() { return "login.html"; } @RequestMapping("/userlogin") public String userLogin(String username, String password) throws Exception { List<TbMember> members = loginService.findUserByName(username, password); if (members.size() > 0) { logger.error(members.get(0).getTmName()); //返回登录成功的页面 return "/jsp/success.jsp"; } //返回登录失败的页面 return "/jsp/fail.jsp"; }}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
注意:当如果想返回一串JSON数据给用户时我们需要在方法上添加
@ResponseBody
注解,如下代码:
/** * 返回json数据 * * @return 因为添加了jackson 支持 所以会自动转化为json数据 */@ResponseBody@RequestMapping("/json")public Map<String, Object> json() { Map<String, Object> result = new HashMap<>(); result.put("code", 100); result.put("message", "请求成功"); return result;}/** * @return 返回一个字符串 * @see #login() 如果返回的是一个文件路径 (上面的登录方法) 那么视图解析器就会自动识别返回这个页面 * 如果是字符串那就直接返回当前字符串 */@ResponseBody@RequestMapping("/string")public String string() { return "请求成功";}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
请求的效果图:
Demo下载隆重登场
好了写到这里 一个简单的SSM登录操作就完成了。
- 使用Spring、SpringMvc、MyBatis搭建SSM框架
- 使用Spring、SpringMvc、MyBatis搭建SSM框架
- 使用Spring、SpringMvc、MyBatis搭建SSM框架
- 使用intellij idea搭建MAVEN+SSM(Spring+SpringMVC+MyBatis)框架
- 使用intellij idea搭建MAVEN+SSM(Spring+SpringMVC+MyBatis)框架
- Spring,SpringMVC,Mybatis (SSM)框架的搭建
- SSM框架搭建(Spring+SpringMVC+MyBatis)
- 整合Spring SpringMvc Mybatis,搭建SSM框架
- 搭建ssm框架:Spring SpringMVC Mybatis
- Spring + SpringMvc + Mybatis 搭建SSM框架
- 搭建SSM框架:SpringMVC + Spring + MyBatis
- SSM(spring +springmvc +mybatis)框架搭建
- SSM框架搭建(SpringMVC+Spring+Mybatis)
- SSM(Spring+SpringMVC+Mybatis)框架搭建
- SSM(SpringMVC+Spring+Mybatis)框架搭建
- SSM(Spring + SpringMVC + MyBatis)框架使用
- SSM框架:SpringMVC + Spring + MyBatis
- java开发SSM框架的搭建(SpringMVC+Spring+MyBatis)
- C#判断字符串为空
- 【智能制造】爱(AI)在新工业
- Centos5.6 yum安装新版php7.0
- sublime text 3下载与安装详细教程
- == 等同 ===恒等
- 使用Spring、SpringMvc、MyBatis搭建SSM框架
- 使c++控制台的文字变得多彩
- JNI中Fatal signal 11 (SIGSEGV), code 1的错误.
- spring aop 切面记录log4j日志
- 【智能驾驶】是时候该反思一下了:我们为什么需要无人驾驶汽车?
- OpenCv
- MFC读写普通文件
- C#打开选择文件对话框和选择目录对话框
- ANSI编码和Unicode编码之深入理解