J2EE系列之MyBatis学习笔记(十三)-- SSM框架搭建
来源:互联网 发布:中建交通怎么样知乎 编辑:程序博客网 时间:2024/06/07 07:12
这一讲讲述MyBatis与Spring、SpringMVC整合,这三者整合在一起是目前比较常用的一种软件开发框架SSM框架。
1.新建DynamicWebProject:SSMTest
2.把相应的jar包复制到WebContent/WEB-INF/lib文件夹中。需要的jar包如图:
3.src目录下新建log4j的配置文件:log4j.properties
log4j.rootLogger=info,appender1,appender2log4j.appender.appender1=org.apache.log4j.ConsoleAppender log4j.appender.appender2=org.apache.log4j.FileAppender log4j.appender.appender2.File=C:/logFile.txt log4j.appender.appender1.layout=org.apache.log4j.TTCCLayoutlog4j.appender.appender2.layout=org.apache.log4j.TTCCLayout
4.与S2SH类似,SSM中实现的Spring来管理SpringMVC和MyBatis。首先配置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="WebApp_ID" version="2.5"> <display-name>SSMTest</display-name> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> <!-- Spring配置文件 --><context-param><param-name>contextConfigLocation</param-name><param-value>classpath:applicationContext.xml</param-value></context-param><!-- 编码过滤器 --><filter><filter-name>encodingFilter</filter-name><filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class><async-supported>true</async-supported><init-param><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><!-- Spring监听器 --><listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener><!-- 添加对springmvc的支持 --><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:spring-mvc.xml</param-value></init-param><load-on-startup>1</load-on-startup><async-supported>true</async-supported></servlet><servlet-mapping><servlet-name>springMVC</servlet-name><url-pattern>*.do</url-pattern></servlet-mapping></web-app>
web.xml文件中对Spring进行配置(引用了配置文件applicationContext.xml)、配置编码过滤器(这个是SpringMVC的时候讲过,解决前台到后台传值的乱码问题)、配置SpringMVC(引入配置文件spring-mvc.xml,配置拦截所有的.do请求)。
5.src目录下添加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:context="http://www.springframework.org/schema/context" xmlns:jee="http://www.springframework.org/schema/jee" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation=" http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-4.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd"> <!-- 自动扫描 --><context:component-scan base-package="com.test.dao" /><context:component-scan base-package="com.test.service" /><!-- 配置数据源 --><bean id="dataSource"class="org.springframework.jdbc.datasource.DriverManagerDataSource"><property name="driverClassName" value="com.mysql.jdbc.Driver"/><property name="url" value="jdbc:mysql://localhost:3306/db_mybatis"/><property name="username" value="root"/><property name="password" value="123456"/></bean><!-- 配置mybatis的sqlSessionFactory --><bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"><property name="dataSource" ref="dataSource" /><!-- 自动扫描mappers.xml文件 --><property name="mapperLocations" value="classpath:com/test/mappers/*.xml"></property><!-- mybatis配置文件 --><property name="configLocation" value="classpath:mybatis-config.xml"></property></bean><!-- DAO接口所在包名,Spring会自动查找其下的类 --><bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"><property name="basePackage" value="com.test.dao" /><property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"></property></bean><!-- (事务管理)transaction manager, use JtaTransactionManager for global tx --><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="insert*" propagation="REQUIRED" /> <tx:method name="update*" propagation="REQUIRED" /> <tx:method name="edit*" propagation="REQUIRED" /> <tx:method name="save*" propagation="REQUIRED" /> <tx:method name="add*" propagation="REQUIRED" /> <tx:method name="new*" propagation="REQUIRED" /> <tx:method name="set*" propagation="REQUIRED" /> <tx:method name="remove*" propagation="REQUIRED" /> <tx:method name="delete*" propagation="REQUIRED" /> <tx:method name="change*" propagation="REQUIRED" /> <tx:method name="get*" propagation="REQUIRED" read-only="true" /> <tx:method name="find*" propagation="REQUIRED" read-only="true" /> <tx:method name="load*" propagation="REQUIRED" read-only="true" /> <tx:method name="*" propagation="REQUIRED" read-only="true" /> </tx:attributes> </tx:advice> <!-- 配置事务切面 --> <aop:config> <aop:pointcut id="serviceOperation" expression="execution(* com.test.service.*.*(..))" /> <aop:advisor advice-ref="txAdvice" pointcut-ref="serviceOperation" /> </aop:config> </beans>这个与S2SH中Spring的配置类似:首先配置扫描com.test.dao、com.test.service,把这两个包下的接口都加载成bean。
接下来对mybatis管理:配置数据源,配置sqlSession工厂(这里自动加载成bean,在学习mybatis的时候我们都是手动写的),引入mybatis配置文件mybatis-config.xml;
最后配置事务管理。
6.src目录下引入springmvc配置文件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:aop="http://www.springframework.org/schema/aop" xmlns:context="http://www.springframework.org/schema/context" xmlns:jee="http://www.springframework.org/schema/jee" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation=" http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-4.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd"> <!-- 使用注解的包,包括子集 --><context:component-scan base-package="com.test.controller" /><!-- 视图解析器 --><bean id="viewResolver"class="org.springframework.web.servlet.view.InternalResourceViewResolver"><property name="prefix" value="/" /><property name="suffix" value=".jsp"></property></bean></beans>
这里主要是配置了控制层,以及视图解析器。
7.src目录下新建mybatis配置文件mybatis-config.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><!-- 别名 --><typeAliases><package name="com.test.entity"/></typeAliases></configuration>
8.src目录下建立各个包:com.test.entity(实体层),com.test.dao(数据库操作层),com.test.mappers(数据库操作实现层),com.test.controller(控制层),com.test.service(事务层),com.test.service.impl(事务实现层)。
9.实现一个登录功能:新建用户类User:
package com.test.entity;public class User {private int id;private String userName;private String password;public int getId() {return id;}public void setId(int id) {this.id = id;}public String getUserName() {return userName;}public void setUserName(String userName) {this.userName = userName;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}}
数据库中新建t_user:
10.新建User类的数据库操作接口:
package com.test.dao;import com.test.entity.User;public interface UserDao {public User login(User user);}
11.新建User类的数据库操作接口实现:
<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mapper namespace="com.test.dao.UserDao"><resultMap type="User" id="UserResult"><result property="id" column="id"/><result property="userName" column="userName"/><result property="password" column="password"/></resultMap><select id="login" parameterType="User" resultMap="UserResult">select * from t_user where userName=#{userName} and password=#{password}</select></mapper>
所谓的login方法就是根据用户输入的用户名和密码查询数据库中用户信息。
12.新建User类的事务:
package com.test.service;import com.test.entity.User;public interface UserService {public User login(User user);}
13.新建User类的事务实现方法:
package com.test.service.impl;import javax.annotation.Resource;import org.springframework.stereotype.Service;import com.test.dao.UserDao;import com.test.entity.User;import com.test.service.UserService;@Service("userService")public class UserServiceImpl implements UserService{@Resourceprivate UserDao userDao;@Overridepublic User login(User user) {// TODO Auto-generated method stubreturn userDao.login(user);}}
这里使用注解的方式,自动给userDao对象注入值。注解@Service("userService"),Spring会自动加载这个bean;
14.新建User类的控制:
package com.test.controller;import javax.annotation.Resource;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpSession;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;import com.test.entity.User;import com.test.service.UserService;@Controller@RequestMapping("/user")public class UserController {@Resourceprivate UserService userService;@RequestMapping("login")public String login(User user,HttpServletRequest request){User resultUser = userService.login(user);if(resultUser == null){request.setAttribute("user", user);request.setAttribute("errorMsg", "用户名或密码错误");return "index";}else{HttpSession session = request.getSession();session.setAttribute("currentUser", resultUser);return "redirect:/success.jsp";}}}
Spring会自动对userService对象注入值。
15.以上完成了登录操作的后台处理。新建index.jsp:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>Insert title here</title></head><body><form action="${pageContext.request.contextPath }/user/login.do" method="post">userName:<input type="text" name="userName" value="${user.userName }"/><br/>password:<input type="password" name="password" value="${user.password }"><br/><input type="submit" value="login"/><font color="red">${errorMsg }</font></form></body></html>
这里输入用户名和密码,点击登录的时候发出/user/login.do请求。
16.UserController层处理这个请求,登录成功后重定向到success.jsp页面。登录失败的话,跳转到index.jsp页面。
运行程序:
输入正确的用户名和密码,点击login:
如果输入的用户名和密码不正确:
总结:这一篇博客讲述了SSM框架的搭建,添加过程包括:
1.添加jar包;2.web.xml文件配置Spring和SpringMVC;3.添加Spring、SpringMVC、MyBatis的配置文件。
- J2EE系列之MyBatis学习笔记(十三)-- SSM框架搭建
- J2EE系列之Hibernate4学习笔记(十三)-- -一对一映射
- J2EE系列之MyBatis学习笔记(二)-- mybatis配置
- J2EE系列之MyBatis学习笔记(一)-- 简介
- J2EE系列之MyBatis学习笔记(六)-- 动态sql
- J2EE系列之MyBatis学习笔记(七)-- 动态sql
- J2EE系列之MyBatis学习笔记(八)-- 杂项
- J2EE系列之MyBatis学习笔记(九)-- 杂项
- J2EE系列之Struts2学习笔记(十三)--自定义拦截器示例之登录功能实现
- J2EE系列之Struts2学习笔记(二十三)--Struts2防重复请求
- J2EE系列之Spring4学习笔记(十三)--Spring4整合Struts2和Hibernate4
- J2EE系列之MyBatis学习笔记(四)-- mybatis关系映射(一对一映射)
- J2EE系列之MyBatis学习笔记(五)-- mybatis关系映射(一对多映射)
- 【Mybatis学习】利用SpringBoot搭建SSM框架
- SSM框架实战系列之十三_H-ui框架之一
- JavaWeb学习笔记之SSM框架搭建配置文件
- J2EE系列之MyBatis学习笔记(三)-- 使用XML配置SQL映射器
- J2EE系列之MyBatis学习笔记(十)-- 使用注解配置sql映射器
- Numpy中的ravel_multi_index函数
- PHP 结合 WebHook 实现代码自动部署
- greater<int>()和less<int>()的使用
- Linux下tomcat JVM内存 配置
- Git撤销提交和修改相关操作
- J2EE系列之MyBatis学习笔记(十三)-- SSM框架搭建
- C++类成员冒号初始化以及构造函数内赋值
- [bzoj1922][Sdoi2010]大陆争霸 dijkstra
- 【Ubuntu 16.04中为Chromium、Chrome、Firefox安装Flash播放器插件教程】
- delphi中dbgrideh表格如何多行删除
- spark streaming读取kafka数据,记录offset
- 输入框数字、百分比、价格 自动验证 JS
- 关于inspect模块(Python)
- 同样的错只犯一次