使用SSM(Spring、SpringMVC和Mybatis)已经有三个多月了,项目在技术上已经没有什么难点了,基于现有的技术就可以实现想要的功能,当然肯定有很多可以改进的地方。之前没有记录SSM整合的过程,这次刚刚好基于自己的一个小项目重新搭建了一次,而且比项目搭建的要更好一些。以前解决问题的过程和方法并没有及时记录,以后在自己的小项目中遇到我再整理分享一下。这次,先说说三大框架整合过程。个人认为使用框架并不是很难,关键要理解其思想,这对于我们提高编程水平很有帮助。不过,如果用都不会,谈思想就变成纸上谈兵了!!
1,基本概念
1.1 Spring
Spring是一个开源框架,Spring是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnson 在其著作Expert One-On-One J2EE Development and Design中阐述的部分理念和原型衍生而来。它是为了解决企业应用开发的复杂性而创建的。Spring使用基本的JavaBean来完成以前只可能由EJB完成的事情。然而,Spring的用途不仅限于服务器端的开发。从简单性、可测试性和松耦合的角度而言,任何Java应用都可以从Spring中受益。 简单来说,Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架。
1.2 SpringMVC
Spring MVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面。Spring MVC 分离了控制器、模型对象、分派器以及处理程序对象的角色,这种分离让它们更容易进行定制
1.3 Mybatis
MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis 。MyBatis是一个基于Java的持久层框架。iBATIS提供的持久层框架包括SQL Maps和Data Access Objects(DAO)MyBatis 消除了几乎所有的JDBC代码和参数的手工设置以及结果集的检索。MyBatis 使用简单的 XML或注解用于配置和原始映射,将接口和 Java 的POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。
2.开发环境搭建
1.windows10+mysql5.5+Maven+bootstrap+jQuery+jdk1.8
2.我的包结构
3.SSM项目整合
- 引入相关依赖(pom.xml)
<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.youcai</groupId>
<artifactId>SSM_CRUD</artifactId>
<packaging>war</packaging>
<version>0.0.1-SNAPSHOT</version>
<name>SSM_CRUD Maven Webapp</name>
<url>http://maven.apache.org</url>
<dependencies>
<!-- Junit spring-web-4.0.0.RELEASE.jar -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>4.3.21.RELEASE</version>
<scope>test</scope>
</dependency>
<!-- Mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.5</version>
</dependency>
<!-- Mysql -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.43</version>
</dependency>
<!-- springmvc -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>4.3.10.RELEASE</version>
</dependency>
<!-- spring -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>4.3.10.RELEASE</version>
</dependency>
<!-- mybatis-spring整合 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.3.1</version>
</dependency>
<!-- c3p0 -->
<dependency>
<groupId>com.mchange</groupId>
<artifactId>c3p0</artifactId>
<version>0.9.5.1</version>
</dependency>
<!-- servlet -->
<!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.1</version>
<scope>provided</scope>
</dependency>
<!-- JSTL -->
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>4.2.1</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework/spring-core -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>4.3.10.RELEASE</version>
</dependency>
</dependencies>
<build>
<finalName>SSM_CRUD</finalName>
</build>
</project>
2.实体类代码块(User)
package com.youcai.entity;
public class User {
private int id;
private String username;
private String password;
private String phone;
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;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
public User(int id, String username, String password, String phone) {
super();
this.id = id;
this.username = username;
this.password = password;
this.phone = phone;
}
public User(String username, String password, String phone) {
super();
this.username = username;
this.password = password;
this.phone = phone;
}
public User() {
super();
// TODO Auto-generated constructor stub
}
@Override
public String toString() {
return "User [id=" + id + ", username=" + username + ", password=" + password + ", phone=" + phone + "]";
}
}
3.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.youcai.dao.UserDao">
<!-- 添加 -->
<insert id="addUser" parameterType="com.youcai.entity.User">
insert into
user(username,password,phone) values(#{username},#{password},#{phone})
</insert>
<!-- 查询所有 -->
<select id="getUser" resultType="com.youcai.entity.User">
select * from user
</select>
<!-- 根据id查询 -->
<select id="getById" resultType="com.youcai.entity.User">
select * from user where id=#{id}
</select>
<select id="getList" resultType="com.youcai.entity.User">
select * from user limit pageNum=#{pageNum}
</select>
<!-- 删除 -->
<delete id="deleteUser" parameterType="com.youcai.entity.User">
delete from user where id=#{id};
</delete>
<!-- 修改 -->
<update id="updateUser" parameterType="com.youcai.entity.User">
update user set username=#{username},password=#{password},phone=#{phone} where id= #{id};
</update>
</mapper>
4.dao层接口
package com.youcai.dao;
import java.util.List;
import com.youcai.entity.User;
public interface UserDao {
public void addUser(User user);
public int deleteUser(int id);
public List<User> getUser();
public int updateUser(User user);
public User getById(int id);
List<User> getList(int page,int size);
}
5.service层(这里的service层值写了一个,用来返回分页数据的,分页使用的是pageHelper)
package com.youcai.service;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.youcai.dao.UserDao;
import com.youcai.entity.User;
@Service
public class UserService {
@Autowired
UserDao userDao;
public List<User> getAllUser() {
return userDao.getUser();
}
}
6.控制层(我基本的逻辑都是写在Controller里面 练手的小demo就没有那么规范啦,这边的删除功能目前还没有写)
/**
* 分页
* @return
*/
@Autowired
UserService userService;
@RequestMapping("/getUser")
public String getUser(@RequestParam(value="pn",defaultValue="1")int pn,Model model){
PageHelper.startPage(pn, 5);
List<User> users= userService.getAllUser();
System.out.println(users);
PageInfo page = new PageInfo(users,5);
model.addAttribute("pageInfo", page);
return "list";
}
/**
* 添加
*/
@Autowired
UserDao userDao;
@RequestMapping("/addUser")
public ModelAndView addUser(User user){
userDao.addUser(user);
System.out.println("添加成功,添加的对象是"+user.toString());
List<User> list=userDao.getUser();
ModelAndView andView=new ModelAndView("show");
andView.addObject("list", list);
return andView;
}
/**
* 删除
*/
@RequestMapping("/delete")
public String deleteUser(@RequestParam("id") int id,Model model){
userDao.deleteUser(id);
List<User> users= userService.getAllUser();
System.out.println(users);
PageInfo page = new PageInfo(users,5);
model.addAttribute("pageInfo", page);
System.out.println("删除成功,删除的对象的id是"+id);
return "show" ;
}
/**
* 修改之前
* @param id
* @return
*/
@RequestMapping("/upodate")
public ModelAndView getById(int id){
User users = userDao.getById(id);
ModelAndView view=new ModelAndView("update");
System.out.println("得到的id为"+id);
System.out.println("修改对象是:"+users.toString());
view.addObject("users", users);
return view;
}
/**
* 修改之后
* @param user
* @param map
* @return
*/
@RequestMapping("/updateUser")
public ModelAndView updateUser(User user,Model model){
System.out.println("修改后的对象是:"+user.toString());
int updateUser = userDao.updateUser(user);
System.out.println(updateUser);
System.out.println("修改成功");
List<User> users= userService.getAllUser();
PageInfo page = new PageInfo(users,5);
model.addAttribute("pageInfo", page);
ModelAndView view=new ModelAndView("show");
return view;
}
7.配置文件
7.1 application.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:context="http://www.springframework.org/schema/context"
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-4.3.xsd">
<context:property-placeholder location="classpath:db.properties" />
<!-- 配置数据源 -->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="user" value="${jdbc.username}"></property>
<property name="password" value="${jdbc.password}"></property>
<property name="driverClass" value="${jdbc.driver}"></property>
<property name="jdbcUrl" value="${jdbc.url}"></property>
<property name="initialPoolSize" value="${initPoolSize}"></property>
<property name="maxPoolSize" value="${maxPoolSize}"></property>
</bean>
<!-- 配置SqlSessionFcatroy -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<!-- 引入数据源 -->
<property name="dataSource" ref="dataSource"></property>
<!-- 加载MyBatis文件 -->
<property name="configLocation" value="classpath:MyBatis-config.xml"></property>
<!-- 加载配置文件 -->
<property name="mapperLocations" value="classpath:com/youcai/entity/*.xml"></property>
<!-- 配置分页插件 -->
<property name="plugins">
<array>
<bean class="com.github.pagehelper.PageHelper">
<property name="properties">
<value>
dialect=mysql
reasonable=true
</value>
</property>
</bean>
</array>
</property>
</bean>
<!-- 配置实体类文件 -->
<bean id="userDao" class="org.mybatis.spring.mapper.MapperFactoryBean">
<property name="sqlSessionFactory" ref="sqlSessionFactory"></property>
<property name="mapperInterface" value="com.youcai.dao.UserDao"></property>
</bean>
<bean id="scannerConfigurer" class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.youcai.dao"></property>
</bean>
</beans>
7.2 db.properties(用来链接数据库的,配置用户名,密码等等)
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/test
jdbc.username=root
jdbc.password=root
initPoolSize=5
maxPoolSize=10
7.3springmvc.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:mvc="http://www.springframework.org/schema/mvc"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.3.xsd
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-4.3.xsd">
<!-- 添加扫描器 -->
<context:component-scan base-package="com.youcai"></context:component-scan>
<mvc:default-servlet-handler/>
<mvc:annotation-driven></mvc:annotation-driven>
<!-- 视图解析器 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/"></property>
<property name="suffix" value=".jsp"></property>
</bean>
</beans>
7.4 web.xml(配置前端过滤器)
<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd" >
<web-app>
<display-name>Archetype Created Web Application</display-name>
<!-- needed for ContextLoaderListener -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml</param-value>
</context-param>
<!-- 定义过滤器 -->
<filter>
<filter-name>encoding</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<!-- 初始化 参数 设置编码是UTF-8 -->
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<!-- 设置过滤对象 -->
<filter-mapping>
<filter-name>encoding</filter-name>
<!--对所有的都过滤,并走 过滤器 名称是encoding的所对应的类-->
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- Bootstraps the root web application context before servlet initialization -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!-- The front controller of this Spring Web application, responsible for
handling all application requests -->
<servlet>
<servlet-name>springDispatcherServlet</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>
<load-on-startup>1</load-on-startup>
</servlet>
<!-- Map all requests to the DispatcherServlet for handling -->
<servlet-mapping>
<servlet-name>springDispatcherServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
我也是才学完ssm整合,希望有一起共同学习的人来,我会在微信群里面分享一些我自己在学习过程中整理的个人资料一起来学习
图片过期了 可以加我的微信 我拉你进群vx:dk15111149616