Spring – SSM框架整合(Spring+SpringMVC+MyBatis)
SSM框架是spring MVC ,spring和mybatis框架的整合,是标准的MVC模式,将整个系统划分为表现层,controller层,service层,DAO层。
- 使用spring MVC负责请求的转发和视图管理
- spring实现业务对象管理
- mybatis作为数据对象的持久化引擎
1.搭建SSM架构步骤:
- 设计数据库
- 先写实体类entity,定义对象的属性,(参照数据库中表的字段来设置)。
- 编写Mapper.xml(Mybatis),定义功能,对应要对数据库进行的那些操作,比如 insert、selectAll、selectByKey、delete、update等。
- 编写Mapper.java(DAO接口),将Mapper.xml中的操作按照id映射成Java函数。
- 配置spring和mybatis框架的整合(applicationContext.xml)
- 编写Service.java,为控制层提供服务,接受控制层的参数,完成相应的功能,并返回给控制层。
- 配置SpringMVC(web.xml)
- 编写Controller.java,连接页面请求和服务层,获取页面请求的参数,通过自动装配,映射不同的URL到相应的处理函数,并获取参数,对参数进行处理,之后传给服务层。
- 编写JSP页面调用,请求哪些参数,需要获取什么数据。
DataBase –> Entity –> Mapper.xml –> Mapper.Java(DAO) –> Service.java –> Controller.java –> Jsp
2.搭建SSM架构实例(管理员登录)
2.1 设计数据库(以MySql为例)
建立web项目,在src下新建sql脚本(admin.sql),并在数据库中执行
CREATE DATABASE exam_sys;
/** 管理员表 */
DROP TABLE admin;
CREATE TABLE admin(
id INT AUTO_INCREMENT COMMENT '管理员ID',
name VARCHAR(30) NOT NULL COMMENT '管理员账号',
password VARCHAR(30) COMMENT '管理员密码',
CONSTRAINT et_admin_id_pk PRIMARY KEY(id),
CONSTRAINT et_admin_name_uk UNIQUE(NAME)
);
/** 插入数据 */
INSERT INTO admin (name, password) VALUES('admin', '123456');
SELECT * FROM admin;
COMMIT;
2.2 先写实体类entity,定义对象的属性
参照数据库中表的字段来设置
package com.exam.entity;
public class Admin {
private int id;
private String name;
private String password;
/** 添加 getter/setter方法
* 添加 无参,有参构造
* 重写toString()以便于测试
*/
// ...
}
2.3 编写AdminMapper.xml(Mybatis),定义功能
对应要对数据库进行的那些操作,比如 insert、selectAll、selectByKey、delete、update等。
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//ibatis.apache.org//DTD Mapper 3.0//EN" "http://ibatis.apache.org/dtd/ibatis-3-mapper.dtd">
<!-- namespace指定和哪个Mapper映射器接口对应 -->
<mapper namespace="com.exam.mapper.AdminDao">
<!-- 定义SQL语句 -->
<select id="findByNameAndPassword" resultType="com.exam.entity.Admin">
select * from admin where name=#{name, jdbcType=VARCHAR} and password=#{password, jdbcType=VARCHAR}
</select>
</mapper>
2.4 编写AdminDao.java,将AdminMapper.xml中的操作按照id映射成Java函数。
导入Mybatis相关jar包:mybatis.jar、mysql-connector-java.jar(数据库驱动)、mybatis-spring.jar(SM整合)
package com.exam.mapper;
import org.apache.ibatis.annotations.Param;
import com.exam.entity.Admin;
public interface AdminDao {
public Admin findByNameAndPassword(@Param("name") String name, @Param("password") String password);
}
2.5 配置spring和mybatis框架的整合
导入Spring相关jar包:ioc/aop/dao/连接池;添加Spring配置文件(applicationContext.xml)到src下。
<!-- 配置连接池对象 -->
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName" value="com.mysql.cj.jdbc.Driver"></property>
<property name="url" value="jdbc:mysql://localhost:3306/exam_sys"></property>
<property name="username" value="root"></property>
<property name="password" value="123456"></property>
</bean>
<!-- 配置SqlSessionFactoryBean来创建SqlSessionFactory
属性dataSource:注入连接池对象
属性mapperLocations:指定MyBatis的映射器XML配置文件的位置
属性typeAliasesPackage:对应我们的实体类所在的包,配置此项可在Mapper映射器直接使用类名,而非包名.类名
-->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"></property>
<property name="mapperLocations" value="classpath:com/exam/mapper/*.xml"></property>
<!-- <property name="typeAliasesPackage" value="com.exam.entity"></property> -->
</bean>
<!-- 批量生产DAO接口实现类 ,实现类id为类名首字母小写 -->
<bean id="mapperScanner" class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<!-- <property name="sqlSessionFactory" ref="sqlSessionFactory"></property> -->
<property name="basePackage" value="com.exam.mapper"></property>
<!-- 自定义注解可以让只让有注解的接口产生实现类,另一部分一部分不产生 -->
<!-- <property name="annotationClass" value="com.annotation.MyAnnotation"></property> -->
</bean>
<!-- 开启服务层组件扫描 -->
<context:component-scan base-package="com.exam.service"/>
2.6 编写Service.java,为控制层提供服务
接受控制层的参数,完成相应的功能,并返回给控制层。
package com.exam.service;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.exam.mapper.AdminDao;
@Service("adminService")
public class AdminService {
@Autowired
private AdminDao dao;
public boolean Login(String name, String password) {
try {
return dao.findByNameAndPassword(name, password)!=null?true:false;
} catch (Exception e) {
e.printStackTrace();
}
return false;
}
}
2.7 配置SpringMVC
导入jar包(spring-web.jar,spring-webmvc.jar),生成web.xml并配置DispatcherServlet分发请求。
<!-- 配置编码过滤器 -->
<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>
</filter>
<filter-mapping>
<filter-name>CharacterEncodingFilter</filter-name>
<url-pattern>/</url-pattern>
</filter-mapping>
<!-- 配置DispatcherServlet分发请求 -->
<servlet>
<servlet-name>DispatcherServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>DispatcherServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<!-- 在applicationContext.xml对静态资源进行放行 :mvc:default-servlet-handler-->
在applicationContext.xml中开启组件扫描(com.controller),开启标注形式mvc,配置视图处理器 并 对静态资源进行放行。
<!-- 开启控制器组件扫描 -->
<context:component-scan base-package="com.exam.controller"/>
<!-- 开启标注形式mvc -->
<mvc:annotation-driven />
<!-- 配置视图处理器 -->
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/"></property>
<property name="suffix" value=".jsp"></property>
</bean>
<!-- 对静态资源进行放行 -->
<mvc:default-servlet-handler/>
2.8 编写Controller.java,连接页面请求和服务层
获取页面请求的参数,通过自动装配,映射不同的URL到相应的处理函数,并获取参数,对参数进行处理,之后传给服务层。(导入Json相关包:jackson-core.jar,jackson-databind.jar,jackson-annotations.jar)
package com.exam.controller;
import javax.servlet.http.HttpServletRequest;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import com.exam.entity.Admin;
import com.exam.service.AdminService;
@Controller
@RequestMapping("/admin")
public class AdminController {
@Autowired
private AdminService as;
@RequestMapping("/tologin")
public String toLogin() {
return "admin/login";
}
@RequestMapping(value="/login",method=RequestMethod.POST)
@ResponseBody
public boolean addUser(Admin admin, HttpServletRequest request) {
System.out.println("add:"+admin);
System.out.println(admin.getName()+"---"+admin.getPassword());
boolean bl = as.Login(admin.getName(), admin.getPassword());
if(bl) {
//登录成功的逻辑
request.getSession().setAttribute("admin", admin);
return true;
}
//登录失败的逻辑
request.setAttribute("msg", "登录失败");
return false;
}
}
2.9 编写JSP页面调用
<form>
管理员: <input id="aName" type="text"><br>
密码:<input id="aPassword" type="text"><br>
<input id="loginBtn" type="button" value="登录">
</form>
<script src="js/jquery.min.js"></script>
<script>
$("#loginBtn").on("click", function(){
$.ajax({
url: "admin/login",
type: "post",
data: {
name: $("#aName").val(),
password: $("#aPassword").val()
},
success: function(res){
alert(res);
}
});
});
</script>
相关系列文章
- Spring -- SSM框架整合(Spring+SpringMVC+MyBatis)
- Spring -- 持久层框架Mybatis
- Spring -- MVC 框架
- Spring -- 面向切面编程(AOP模块)
- Spring -- 事务管理
- Spring -- JDBC详解
- Spring -- IoC注解实现
- Spring -- IoC控制反转