Spring-SpringMVC-MyBatis详细整合
文章目录
1:环境搭建
1.1:整合思路
- 搭建整合环境
- 搭建Spring的配置环境
- 搭建Spring整合SpringMVC框架
- 使用Spring整合MyBatis框架
1.2:数据库环境
#创建一个管理员表manage
CREATE TABLE `manage` (
`id` int NOT NULL AUTO_INCREMENT,
`userName` varchar(255) DEFAULT NULL,
`passWord` varchar(255) DEFAULT NULL,
`realName` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;
#插入一条数据
INSERT INTO `manage` VALUES (1,'admin','111','管理员');
1.3:创建相关类
框架结构
实体类Manage的创建
public class Manage implements Serializable {
private Integer id;//主键
private String userName;//登录名
private String passWord;//密码
private String realName;//姓名
public Manage(){};
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 getRealName() {
return realName;
}
public void setRealName(String realName) {
this.realName = realName;
}
@Override
public String toString() {
return "Manage{" +
"id=" + id +
", userName='" + userName + '\'' +
", passWord='" + passWord + '\'' +
", realName='" + realName + '\'' +
'}';
}
}
mapper层开发–其实现类可以在MyBatis整合的时候可以通过mapper代理对象进行实现
<1>ManageMappper接口的编写
<2>ManageMappper.xml的配置
public interface ManageService {
//查询数据库返回一个Manage对象
Manage findByEntity(Manage manage);
}
ManageMappper.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.yjr.mapper.ManageMapper">
<select id="findByEntity" resultType="com.yjr.pojo.Manage" parameterType="com.yjr.pojo.Manage">
select * from manage where userName=#{userName} and passWord=#{passWord}
</select>
</mapper>
service层编写
ManageService接口和ManageServiceImpl实现类
public interface ManageService {
Manage findByEntity(Manage manage);
}
import org.springframework.beans.factory.annotation.Autowired;
public class ManageServiceImpl implements ManageService {
//暂时先不写这个
//@Autowired
// private ManageMapper manageMapper;
public Manage findByEntity(Manage manage) {
System.out.println("这里通过查询表Manage返回一个Manage对象");
//模拟在阶段不实现
return new Manage();
}
}
controller层
ManageController:控制器
/**
* 控制器层
*/
public class ManageController {
}
2:搭建Spring框架
2.1: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: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/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx.xsd">
<!-- 1、 开启注解扫描,希望只处理 Service 和 mapper 层 -->
<context:component-scan base-package="com.yjr">
<!-- 配置哪些注解不扫描 -->
<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
</context:component-scan>
</beans>
2.2:测试spring是否配置成功
public class ManageTest {
@Test
public void springTest(){
ApplicationContext applicationContext=new ClassPathXmlApplicationContext("applicationContext.xml");
ManageServiceImpl bean=applicationContext.getBean(ManageServiceImpl.class);
System.out.println(bean);
bean.findByEntity(new Manage());
}
}
3:搭建SpringMVC
3.1:springmvc.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"
xmlns:mvc="http://www.springframework.org/schema/mvc"
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.xsd
http://www.springframework.org/schema/mvc
https://www.springframework.org/schema/mvc/spring-mvc.xsd">
<!-- 1、开启注解扫描,只扫描 Controller 注解下的类 -->
<context:component-scan base-package="com.yjr">
<context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
</context:component-scan>
<!-- 2、配置视图解析器 -->
<bean id="internalResourceViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/jsp/"/>
<property name="suffix" value=".jsp"/>
</bean>
<!-- 3、开启SpringMVC 注解的支持 -->
<mvc:annotation-driven/>
</beans>
3.2:web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
<!-- SpringMVC 前端控制器 DispatcherServlet -->
<servlet>
<servlet-name>springMVC</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!-- 加载 spring-mvc 配置文件 -->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring-mvc.xml</param-value>
</init-param>
<!-- 启动服务器时,创建该 Servlet -->
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>springMVC</servlet-name>
<url-pattern>/</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>
</filter>
<filter-mapping>
<filter-name>characterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
3.3编写Controller层
/**
* 控制器层
*/
@Controller
public class ManageController {
@RequestMapping("/login")
public String login(){
//转向登录页面
return "mLogin";
}
}
/WEB-INF/jsp/mLogin.jsp(简单登录页面)
<%@page language="java" contentType="text/html; character=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>
<title>管理员登录</title>
</head>
<body>
<h1>登录界面</h1>
<form action="${ctx}/toLogin" method="post">
<input type="text" id="userName" name="userName" placeholder="登录账号" ><br/>
<input type="password" id="passWord" name="passWord" placeholder="登录密码" data-validate="required:请填写密码" /><br/>
<input type="submit" value="登录" />
</form>
</body>
</html>
4:Spring整合SpringMVC
启动 Tomcat 服务器的时候,就加载 spring 的配置文件,目的是将 spring 注解下的类所产生的对象注入到 IOC容器中。
4.1:在web,xml中添加Spring监听
这样就实现了controller层对service层的调用
<!-- 配置Spring 的监听器 默认只加载WEB-INF 目录下的 applicationContext.xml 文件 -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!-- 设置配置文件的路径 -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml</param-value>
</context-param>
4.2:ManageController
/**
* 控制器层
*/
@Controller
public class ManageController {
@Autowired
private ManageService manageService;
@RequestMapping("/login")
public String login(){
//转向登录页面
return "mLogin";
}
}
4.3:测试
5:搭建MyBatis
5.1:ManageMapper.xml
这里通过数据绑定传入参数注入Manage对象
<?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.yjr.mapper.ManageMapper">
<select id="findByEntity" resultType="com.yjr.pojo.Manage" parameterType="com.yjr.pojo.Manage">
select * from manage where userName=#{userName} and passWord=#{passWord}
</select>
</mapper>
5.2:MyBatis的核心配置文件
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<!-- 配置环境 -->
<environments default="mysql">
<environment id="mysql">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/shop?useSSL=false&serverTimezone=UTC"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
</dataSource>
</environment>
</environments>
<!-- 引入映射文件 -->
<mappers>
<mapper class="com.yjr.mapper.ManageMapper"/>
</mappers>
</configuration>
5.3检测是否搭建成功
测试方法
@Test
public void myBatisTest() throws IOException {
Manage manage=new Manage();
manage.setUserName("y");
manage.setPassWord("1");
// 加载配置文件
InputStream io = Resources.getResourceAsStream("mybatis-config.xml");
// 创建 SqlSessionFactory ,解析配置资源
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(io);
// 创建 SqlSession 对象
SqlSession session = sqlSessionFactory.openSession();
// 获得代理对象
ManageMapper manageMapper = session.getMapper(ManageMapper.class);
// 遍历集合
Manage manage1 = manageMapper.findByEntity(manage);
System.out.println(manage1);
// 关闭资源
session.close();
io.close();
}
表中数据
测试结果
6:Spring 整合 MyBatils
6.1:applicationContext.xml(加入mybatis框架)
<?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"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
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.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx.xsd">
<!-- 1、 开启注解扫描,希望只处理 Service 和 Dao 层 -->
<context:component-scan base-package="com.yjr">
<!-- 配置哪些注解不扫描 -->
<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
</context:component-scan>
<!-- Spring 整合 MyBatis 框架 -->
<!-- 1、配置连接池-->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="driverClass" value="com.mysql.cj.jdbc.Driver"/>
<property name="jdbcUrl" value="jdbc:mysql://localhost:3306/shop?useSSL=false&serverTimezone=UTC"/>
<property name="user" value="root"/>
<property name="password" value="123456"/>
</bean>
<!-- 配置SqlSessionFactory 工厂
会创建其 SqlSession ,进而进一步创建 代理对象
-->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
</bean>
<!-- 配置 ManageMapper 接口所在包 -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer" id="mapper">
<property name="basePackage" value="com.yjr.mapper"/>
</bean>
</beans>
6.2controller层注入Service
/**
* 控制器层
*/
@Controller
public class ManageController {
@Autowired
private ManageService manageService;
@RequestMapping("/login")
public String login(){
//转向登录页面
return "mLogin";
}
@RequestMapping("/toLogin")
public String toLogin(Manage manage, Model model){//这个参数是通过前端数据绑定传过来的数据
Manage manage1= manageService.findByEntity(manage);
System.out.println(manage1);
if (manage1!=null){
model.addAttribute("msg","登录成功!");
return "success";//转向一个登录成功页面
}
else {
return "mLogin";//密码不合适的时候继续到登录页面
}
}
}
6.3:整合测试(和数据库中的数据对比)
登录页面–成功后调到成功页面
END