Spring+SpringMvc+MyBatis整合教程(入门级)
来源:互联网 发布:海王星股票交易软件 编辑:程序博客网 时间:2024/06/13 02:56
前言
目前流行两款基于JavaEE的企业级MVC开源框架SSH和SSM。这两个框架中SSH出来的时间比较久远,也相对比较笨拙。SSM出来的时间相对比较晚,相较于SSH来说更加的轻量和简单易学。所以有很多近些年从事JavaEE开发的工作者更倾向于使用SSM框架。今天我就SSM框架的整合做一个简单的整理。
1、开发环境
jdk7.0+tomcat7.0+MyEclipse2014+MySql5.7
2、数据库表结构
/*Navicat MySQL Data TransferSource Host : localhost:3306Source Database : mybatisTarget Host : localhost:3306Target Database : mybatisDate: 2017-06-08 16:30:11*/SET FOREIGN_KEY_CHECKS=0;-- ------------------------------ Table structure for user-- ----------------------------DROP TABLE IF EXISTS `user`;CREATE TABLE `user` ( `id` int(11) NOT NULL AUTO_INCREMENT, `username` varchar(32) NOT NULL COMMENT '用户名称', `password` varchar(32) NOT NULL DEFAULT '', `birthday` date DEFAULT NULL COMMENT '生日', `sex` char(1) DEFAULT NULL COMMENT '性别', `address` varchar(256) DEFAULT NULL COMMENT '地址', PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=26 DEFAULT CHARSET=utf8;-- ------------------------------ Records of user-- ----------------------------INSERT INTO `user` VALUES ('1', '小明', '123', '2017-06-08', '2', '陕西省西安市碑林区');INSERT INTO `user` VALUES ('10', '小红', '123', '2017-06-08', '1', '陕西省西安市长安区');INSERT INTO `user` VALUES ('16', '小花', '123', '2017-06-08', '1', '陕西省西安市未央区');INSERT INTO `user` VALUES ('22', '小苗', '123', '2017-06-08', '1', '陕西省西安市新城区');INSERT INTO `user` VALUES ('24', '小丽', '123', '2017-06-08', '1', '陕西省宝鸡市凤县');INSERT INTO `user` VALUES ('25', '小娟', '123', '2017-06-08', '1', '陕西省宝鸡市岐山县');
3、工程结构
在MyEclipse中新建JavaWeb工程“SSMDEMO”,并进行如下配置:
1. 工程配置:
2. jar包管理:
开发所涉及的jar,大家需要去官网下载,要求将下载的jar拷贝进工程的WEB-INF/lib文件夹下:
3. 配置说明:
src:该目录下主要存放java代码,其中:
- com.byzx.ssm.po:管理java实体类;
- com.byzx.ssm.dao:持久层代码管理,主要完成对数据库的CRUD;
- com.byzx.ssm.service:业务层代码管理,主要完成相关的业务处理;
- com.byzx.ssm.controller:控制层代码管理,主要完成模型跟视图之间的交互;
- com.byzx.ssm.test:一般用来进行单元测试;
config:该目录下主要存放配置文件,其中:
- db.properties:配置数据库的driver、url、username、password;
jdbc.driver=com.mysql.jdbc.Driverjdbc.url=jdbc\:mysql\://localhost\:3306/mybatis?characterEncoding\=utf-8jdbc.username=rootjdbc.password=root
- log4j.properties:配置框架日志输出;
# Global logging configuration# developer-->DEBUG productor-->INFO or ERRORlog4j.rootLogger=DEBUG, stdout# MyBatis logging configuration...6log4j.logger.org.mybatis.example.BlogMapper=TRACE# Console output...log4j.appender.stdout=org.apache.log4j.ConsoleAppenderlog4j.appender.stdout.layout=org.apache.log4j.PatternLayoutlog4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n
- mybatis-config.xml:主要进行mybatis框架的配置,我们一般会配置别名、mapper映射等。
<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd"><!-- 这是mybatis的主配置文件,跟spring整合后,dataSources交给spring配置 文件管理 --><configuration> <!-- 配置访问别名--> <typeAliases> <package name="com.byzx.ssm.po" /> </typeAliases> <!-- 配置mappers映射文件 --> <mappers> <package name="com.byzx.ssm.dao" /> </mappers></configuration>
- spring-beans.xml:spring框架配置文件,主要用来配置dataSource、sqlSessionFactory、MapperScannerConfigurer等。
<?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:mvc="http://www.springframework.org/schema/mvc" xmlns:context="http://www.springframework.org/schema/context" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans-3.2.xsdhttp://www.springframework.org/schema/mvchttp://www.springframework.org/schema/mvc/spring-mvc-3.2.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context.xsdhttp://www.springframework.org/schema/aophttp://www.springframework.org/schema/aop/spring-aop-3.2.xsdhttp://www.springframework.org/schema/txhttp://www.springframework.org/schema/tx/spring-tx.xsd"> <context:annotation-config></context:annotation-config> <!-- 配置service中的bean --> <context:component-scan base-package="com.byzx.ssm.service"></context:component-scan> <!-- spring配置文件,跟mybaits整合后,DataSource需要在这里配置 --> <!-- 加载外部db.properties --> <context:property-placeholder location="classpath:db.properties" /> <!-- 数据库连接池,两种方式,可以使用c3p0,这里我们使用的是dbcp --> <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"> <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配置 --> <!-- 将mybatis中的写在代码中的sqlsessionfactory配置在 Spring配置文件中,交由spring管理,从而简化操作 --> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <!-- 数据库连接池 --> <property name="dataSource" ref="dataSource" /> <!-- 加载mybatis的全局配置文件 --> <property name="configLocation" value="classpath:mybatis-config.xml" /> </bean> <!-- 这里主要配置mapper扫描器,我们只需要在使用的时候通过 @AutoWired直接访问dao层的接口就行 --> <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <property name="basePackage" value="com.byzx.ssm.dao"></property> <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory" /> </bean></beans>
- spring-mvc.xml:springmvc框架配置文件,主要用来配置我们自身的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:mvc="http://www.springframework.org/schema/mvc" xmlns:context="http://www.springframework.org/schema/context" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans-3.2.xsdhttp://www.springframework.org/schema/mvchttp://www.springframework.org/schema/mvc/spring-mvc-3.2.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context.xsdhttp://www.springframework.org/schema/aophttp://www.springframework.org/schema/aop/spring-aop-3.2.xsdhttp://www.springframework.org/schema/txhttp://www.springframework.org/schema/tx/spring-tx.xsd"> <!-- 一个配置节解决映射器和适配器的配置注解配置 --> <mvc:annotation-driven></mvc:annotation-driven> <!-- 扫描所有的Controller --> <context:component-scan base-package="com.byzx.ssm.controller"></context:component-scan> <!-- 配置视图解析器 进行jsp解析,默认使用jstl标签,classpath下得有jstl的包 --> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" /></beans>
最后我们再来配置一下工程WEB-INF下的web.xml文件:
<?xml version="1.0" encoding="UTF-8"?><web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"> <display-name>ssm-demo</display-name> <!-- 项目默认的欢迎界面 --> <welcome-file-list> <welcome-file>login.jsp</welcome-file> </welcome-file-list> <!-- 配置spring容器,也就是配置:spring-beans.xml等 --> <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:spring-*.xml</param-value> </context-param> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <!-- 配置前端控制器,也就是配置:springmvc.xml进来 --> <servlet> <servlet-name>ssm-demo</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> </servlet> <!-- 配置拦截器 --> <servlet-mapping> <servlet-name>ssm-demo</servlet-name> <url-pattern>*.action</url-pattern> </servlet-mapping> <!-- 解决数据库响应中文乱码的问题 --> <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>
写到这里,文件配置算是完成了,接下来我们将进入到编码阶段。
- User.java
在com.byzx.ssm.po下新建User.java,要求跟数据库表字段一一对应(我们案例中使用的是resultType),示例如下:
package com.byzx.ssm.po;import java.io.Serializable;import java.util.Date;public class User implements Serializable{ /** * */ private static final long serialVersionUID = -6384316775494692203L; private int id;//用戶ID private String username;//用户名称 private Date birthday;//生日 private String sex;//性别 private String address;//住址 private String password;//密码 public String getPwd() { return password; } public void setPwd(String pwd) { this.password = pwd; } 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 Date getBirthday() { return birthday; } public void setBirthday(Date birthday) { this.birthday = birthday; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } @Override public String toString() { return "User [id=" + id + ", username=" + username + ", birthday=" + birthday + ", sex=" + sex + ", address=" + address + ", pwd=" + pwd + "]"; }}
- UserDao.xml
在com.byzx.ssm.dao下新建UserDao.xml,主要用来配置对数据的操作,示例如下:
<?xml version="1.0" encoding="UTF-8" ?><!-- 映射文件:这里就是对user表进行crud --><!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mapper namespace="com.byzx.ssm.dao.UserDao"> <!-- 通过用户名模糊查询用户信息 --> <select id="findListByName" parameterType="User" resultType="User"> select * from user <where> <choose> <when test="username!=null and username!=''"> username like concat(concat('%',#{username}),'%') </when> </choose> </where> </select> <!-- 登录 --> <select id="login" parameterType="User" resultType="User"> select * from user where username=#{username} and password=#{password} </select></mapper>
- UserDao.java
在com.byzx.ssm.dao下新建UserDao.java,主要对外提供操作数据库的接口,示例如下:
package com.byzx.ssm.dao;import java.util.List;import com.byzx.ssm.po.User;public interface UserDao { /** * 通过用户名模糊查询用户信息 * @param u * @return */ public List<User> findListByName(User u); /** * 登录 * @param user * @return */ public List<User> login(User user);}
dao层的配置完成了,这一层就是对数据库进行相应的增删改查操作,并提供相关的接口给外部使用。接下来我们来完成service层中代码的设计。
- IUserService.java
在com.byzx.ssm.service下新建IUserService.java,主要用来提供service对外访问接口,示例代码如下:
package com.byzx.ssm.service;import java.util.List;import com.byzx.ssm.po.User;public interface IUserService { /** * 通过用户名查询用户信息 * @param u * @return */ public List<User> findListByName(User u); /** * 登录 * @param user * @return */ public List<User> login(User user);}
- UserService.java
在com.byzx.ssm.service.impl下新建UserService.java,实现IUserService接口,主要完成对dao层的访问以及对相关业务的处理,示例代码如下:
package com.byzx.ssm.service.impl;import java.util.List;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Service;import com.byzx.ssm.dao.UserDao;import com.byzx.ssm.po.User;import com.byzx.ssm.service.IUserService;/** * @Service("userService") * <bean id="userService" class="com.byzx.ssm.service.impl.UserService"></bean> * @author Administrator * */@Service("userService")//这里使用注解标签,完成Service对象的实例化public class UserService implements IUserService { @Autowired private UserDao userDao; @Override public List<User> findListByName(User u) { return userDao.findListByName(u); } @Override public List<User> login(User user) { // TODO Auto-generated method stub return userDao.login(user); }}
service层到这里就完成了,service层主要负责跟dao层进行交互,并进行相关业务逻辑的处理。同时提供接口给controller层进行访问,那么接下来我们进行controller层代码的设计。
- UserController.java
在com.byzx.ssm.controller下新建UserController.java,主要负责模型(service)和视图(jsp)的交互,代码示例如下:
package com.byzx.ssm.controller;import java.util.List;import javax.annotation.Resource;import javax.servlet.http.HttpSession;import org.springframework.stereotype.Controller;import org.springframework.ui.Model;import org.springframework.web.bind.annotation.RequestMapping;import com.byzx.ssm.po.User;import com.byzx.ssm.service.IUserService;@Controllerpublic class UserController { @Resource(name="userService") private IUserService userService; /** * 根据用户名称做模糊查询 * @param request * @return */ @RequestMapping("/findlist")//这个就是设置的action。完整写法为:/findlist.action public String findListByName(Model model,User u) { List<User> users = userService.findListByName(u); model.addAttribute("users", users); return "userList.jsp"; } /** * 登录 * @param u * @param session * @return * // return "redirect:queryItems.action";//重定向,地址栏发生变化 // return "forward:queryItems.action";//转发,地址栏不变 */ @RequestMapping("/login") public String login(User u,HttpSession session){ List<User> users = userService.login(u); if(users!=null && users.size()>0){//登录成功 //通过session存储起来 session.setAttribute("username", u.getUsername()); return "forward:findlist.action";//跳转到其他action }else{ return "login.jsp";//直接跳转jsp界面 } }}
所有的代码设计到这里就完成了,接下来我们来看下jsp界面的设计。
- login.jsp
这是关于登录界面的设计,示例代码如下:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><!DOCTYPE html><html><head><title>登录</title></head><body> <form action="${pageContext.request.contextPath }/login.action" method="post"> <table> <tr> <th colspan="2" align="center">登录</th> </tr> <tr> <td>用户名:</td> <td><input type="text" name="username" /></td> </tr> <tr> <td>密码:</td> <td><input type="password" name="password" /></td> </tr> <tr> <td colspan="2" align="center"><input type="submit" value="登录" /></td> </tr> </table> </form></body></html>
- userList.jsp
这是关于用户信息展示界面的设计,示例代码如下:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%><%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%><%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%> <!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>查询用户列表</title></head><body> <form action="${pageContext.request.contextPath }/findlist.action" method="post"> 查询条件: <table width="100%" border=1> <tr> <td> <input type="text" name="username" /> </td> <td> <input type="submit" value="查询" /> </td> </tr> </table> 用户列表: <table width="100%" border=1> <tr> <td>名称</td> <td>生日</td> <td>性别</td> <td>住址</td> <td>操作</td> </tr> <c:forEach items="${users }" var="item"> <tr> <td>${item.username }</td> <td> <fmt:formatDate value="${item.birthday }" pattern="yyyy-MM-dd" /> </td> <td>${item.sex }</td> <td>${item.address }</td> <%-- <td><a href="${pageContext.request.contextPath }/item/editItem.action?id=${item.id}">修改</a> </td> --%> </tr> </c:forEach> </table> </form></body></html>
好了,到了这里ssm框架的整合就算完成了,后续我们还可以加上对于事物的整合等。
4、部署项目
输入地址:http:// localhost:8080/ssm_demo
- Spring+SpringMvc+MyBatis整合教程(入门级)
- (Spring+SpringMVC+MyBatis)整合教程
- 详细整合教程(Spring+SpringMVC+MyBatis)
- SpringMVC+mybatis+spring整合教程
- Spring+SpringMVC+MyBatis整合教程
- mybatis+spring+springmvc整合教程
- Spring+SpringMVC+MyBatis整合教程
- spring整合mybatis(入门级简单教程2)
- SSM框架 - 详细整合教程(Spring+SpringMVC+MyBatis)
- SSM框架—详细整合教程(Spring+SpringMVC+MyBatis)
- ssm框架学习---详细整合教程(Spring+SpringMVC+MyBatis)
- SSM框架—详细整合教程(Spring+SpringMVC+MyBatis)
- SSM框架---详细整合教程(Spring+SpringMVC+MyBatis)
- SSM框架详细整合教程(Spring+SpringMVC+MyBatis)
- SSM框架详细整合教程(Spring+SpringMVC+MyBatis)
- SSM框架—详细整合教程(Spring+SpringMVC+MyBatis)
- Spring+SpringMVC+Mybatis+SSM整合教程(手写)
- spring-springmvc-mybatis(ssm)maven框架整合教程
- go语言学习笔记(2017-06-08)
- Android Audio BSP工程师 需要清楚的基本知识点
- Comparable与Comparator的比较
- FreeRTOS静态任务创建与删除
- android:windowSoftInputMode属性详解以及editText监听键盘回车会执行两次的解决方法
- Spring+SpringMvc+MyBatis整合教程(入门级)
- db2look
- CMS介绍
- 【剑指offer-解题系列(50)】把字符串转换成整数
- linux学习共享服务之samba
- Android弹幕实现:基于B站弹幕开源系统(7)QQ、微信聊天气泡样式的弹幕
- 运维小白的python之路(六)——面向对象
- 面试题21. 包含min函数的栈
- 智能卡脱机支付交易流程分析