手把手的教你SSM的框架整(CRUD)

使用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项目整合

  1. 引入相关依赖(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

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值