框架整合

今日内容

  • ssm整合

  • 整数改查

  • Spring父子容器

第一章 SSM整合(会用)

1. 整合思路

SSM整合基本思路:使用Spring( 容器 )来整合Mybatis和SpringMVC

整合步骤是这样:

  1. 先各自搭建SSM的环境
  2. 使用Spring整合Mybatis
  3. 使用Spring整合SpringMVC

ssm1

2. 准备数据环境

aidnamebalance
1B01100.00
2B02100.00

3. 搭建Mybatis环境

3.1 创建工程, 导入依赖
<dependencies>
<!--mysql-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.6</version>
</dependency>
<!--mybatis-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.0</version>
</dependency>
<!--log4j-->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.12</version>
</dependency>
<!--junit-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
</dependencies>
3.2创建实体类
/**
* 封装实体
*/
public class Account {
private Integer aid;
private String name;
private Float balance;

public Integer getAid() {
return aid;
}

public void setAid(Integer aid) {
this.aid = aid;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public Float getBalance() {
return balance;
}

public void setBalance(Float balance) {
this.balance = balance;
}

@Override
public String toString() {
return "Account{" +
"aid=" + aid +
", name='" + name + '\'' +
", balance=" + balance +
'}';
}
}
3.3 创建Dao接口
/**
* 到层接口
*/
public interface AccounDao {
/**
* 列表查询
*/
List<Account> findAll();

}
3.4 创建Dao的映射文件

Accountdao.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!--引入约束文件,DTD约束头-->
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!--根标签 命名空间,与下面语句的id一起组成查询的标识-->
<mapper namespace="com.itheima.dao.AccountDao">

<select id="findAll" resultType="com.itheima.domain.Account">
select * from account
</select>
</mapper>
3.5 加入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>
<!--引入外置的properties 文件-->
<properties resource="jdbc.properties"></properties>

<!--java类别别名设置-->
<typeAliases>
<!--把当前包内的所有java类型定义了别名,别名就是类名-->
<package name="com.itheima.domain"/>
</typeAliases>
<!-- 配置数据库环境文件 -->
<!-- default 引入的数据库-->
<environments default="mysql">
<!-- mysql环境 -->
<environment id="mysql">
<!--事物管理器 固定格式-->
<transactionManager type="JDBC"></transactionManager>
<!-- 数据源: 使用内置的连接池 -->
<dataSource type="POOLED">

<property name="driver" value="${jdbc.driver}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</dataSource>
</environment>
</environments>

<!-- 加载映射文件 -->
<mappers>
<package name="com.itheima.dao"/>
</mappers>
</configuration>
3.6 加入日志配置文件
### 设置###
log4j.rootLogger = debug,stdout

### 输出信息到控制抬 ###
log4j.appender.stdout = org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target = System.out
log4j.appender.stdout.layout = org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern = [%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%n%m%n
3.7 测试
package com.itheima.test;
/**
* Mybatis环境测试文件
*/
public class MyBatisTest {

/**
* 测试新增
*/
@Test
public void testFindAll() throws IOException {
// 读取配置文件
InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
// 获取sqlSessionFactory
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
// 获取sqlSession
SqlSession sqlSession = sqlSessionFactory.openSession();
// 获取Dao对象,数据操作
AccountDao accountDao = sqlSession.getMapper(AccountDao.class);
List<Account> accounts = accountDao.findAll();
for (Account account : accounts) {
System.out.println(account);
}
// 关闭资源
sqlSession.close();
}

}

4. 搭建Spring的环境

4.1导入依赖
<!--Spring相关-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.15</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.1.6.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>5.1.6.RELEASE</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.8.7</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>5.1.6.RELEASE</version>
</dependency>
4.2 创建Service接口
/**
* 创建service接口
*/
public interface AccountService {
/**
* 查找
*/
List<Account> findAll();
}
4.3 创建Service实现类
@Service
public class AccountServiceImpl implements AccountService {
//todo 待办,等dao整合结束来完成
/*@Autowired
private AccountDao accountDao;*/
/**
* 实现类
* @return
*/
public List<Account> findAll() {
// todo 待办,等dao整合结束来完成
// return accountDao.findAll();
System.out.println("查询成功!!");
return null;
}
}
4.4 加入一个配置文件

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:aop="http://www.springframework.org/schema/aop"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
https://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/aop
https://www.springframework.org/schema/aop/spring-aop.xsd
http://www.springframework.org/schema/context
https://www.springframework.org/schema/context/spring-context.xsd">
<!--注解扫描-->
<context:component-scan base-package="com.itheima.service"></context:component-scan>
</beans>
4.5 测试
   /**
* 测试新增
*/
@Test
public void testFindAll() throws IOException {
// 创建spring容器
ApplicationContext act = new ClassPathXmlApplicationContext("applicationContext.xml");
// 获取对象,调用方法
AccountService accountService = act.getBean(AccountService.class);
List<Account> accounts = accountService.findAll();
if (accounts != null){
for (Account account : accounts) {
System.out.println(account);
}
}
}

}

5. 搭建SpringMVC的环境

5.1 导入依赖
<!--SpringMVC相关依赖-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.1.6.RELEASE</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jsp-api</artifactId>
<version>2.0</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
</dependency>
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
5.2 加入SpringMVC的配置文件
<?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:aop="http://www.springframework.org/schema/aop"
xmlns:context="http://www.springframework.org/schema/context" xmlns:mvc="http://www.alibaba.com/schema/stat"
xsi:schemaLocation="http://www.springframework.org/schema/beans
https://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/aop
https://www.springframework.org/schema/aop/spring-aop.xsd
http://www.springframework.org/schema/context
https://www.springframework.org/schema/context/spring-context.xsd http://www.alibaba.com/schema/stat http://www.alibaba.com/schema/stat.xsd">
<!--组件扫描-->
<context:component-scan base-package="com.itheima.controller" />

<!--三大组件-->
<mvc:annotation-driven/>
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/" />
<property name="suffix" value=".jsp" />
</bean>
</beans>
5.3 加入web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
version="2.5">
<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:spring-mvc.xml</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>dispatcherServlet</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>
5.4 开发请求页面
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%--
User: mr_yhl
Date: 2020/9/29
Time: 15:06
--%>
<html>
<head>
<title>index</title>
</head>
<body>
<a href="${pageContext.request.contextPath}/accountController/list">账户列表</a>
</body>
</html>
5.5 开发控制器
/**
* 开发控制器
*/
@Controller
public class AccountController {
//TODO 等到service整合后执行
// @Autowired
// private AccountService accountService;
@RequestMapping("/accountController/list")
public String findAll(HttpServletRequest request){
// TODO 等到service整合后执行
// List<Account> accounts = accountService.findAll();
// request.setAttribute("accounts",accounts);
request.setAttribute("accounts","accounts");
return "list";
}
}
5.6 开发响应页面
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%--
User: mr_yhl
Date: 2020/9/29
Time: 15:13
--%>
<html>
<head>
<title>list</title>
</head>
<body>
${accounts}
</body>
</html>

6. Spring整合Mybatis

6.1 整合思路

将mybatis的所有配置信息转移到Spring的配置文件中

将Mybatis的SqlSessionFactory托管到Spring的容器中

6.2 加入一个整合包
<!--Mybatis整合Spring包-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>2.0.1</version>
</dependency>
6.3 将mybatis的所有配置信息转移到Spring的配置文件中
<?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:aop="http://www.springframework.org/schema/aop"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
https://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/aop
https://www.springframework.org/schema/aop/spring-aop.xsd
http://www.springframework.org/schema/context
https://www.springframework.org/schema/context/spring-context.xsd">
<!--注解扫描-->
<context:component-scan base-package="com.itheima.service"></context:component-scan>
<!--引入配置文件-->
<context:property-placeholder location="classpath:jdbc.properties"/>
<!--数据源-->
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
<property name="driverClassName" value="${jdbc.driver}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</bean>
<!--事务管理-->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"></property>
</bean>

<!--引入映射文件-->
<bean id="mapperScannerConfigurer" class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.itheima.dao"/>
</bean>

<!--sqlSessionFactory托管-->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="typeAliasesPackage" value="com.itheima.domain"/>
<!--<property name="configLocation" value="classpath:mybatis-config.xml"/>-->
</bean>
</beans>
6.4 在service中注入dao
@Service
public class AccountServiceImpl implements AccountService {

@Autowired
private AccountDao accountDao;
/**
* 实现类
* @return
*/
public List<Account> findAll() {

return accountDao.findAll();

}
}
6.5 测试
/**
* Mybatis环境测试文件
*/
public class ServiceTest {

/**
* 测试新增
*/
@Test
public void testFindAll() throws IOException {
// 创建spring容器
ApplicationContext act = new ClassPathXmlApplicationContext("applicationContext.xml");
// 获取对象,调用方法
AccountService accountService = act.getBean(AccountService.class);
List<Account> accounts = accountService.findAll();
if (accounts != null){
for (Account account : accounts) {
System.out.println(account);
}
}
}

}

7. Spring整合SpringMVC

7.1 整合思路

Spring和SpringMVC本身就是一家产品,是不用整合的,

但是现在的Spring容器自己无法启动,我们需要在web容器启动的时候,加载Spring的配置文件,启动Spring容器

那么这个工作是在spring-web包中的一个监听器来做的,这个包不用单独导入,他已经在 spring-webmvc 包中了

它会监听WEB容器的启动和停止,然后就可以控制Spring容器的启动和停止了

7.2 配置监听器
<!--Spring监听-->
<!--传递配置文件给监听器,以供监听器读取进而启动spring容器-->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
7.3 在controller中注入service对象
/**
* 开发控制器
*/
@Controller
public class AccountController {

@Autowired
private AccountService accountService;
@RequestMapping("/accountController/list")
public String findAll(HttpServletRequest request){

List<Account> accounts = accountService.findAll();
request.setAttribute("accounts",accounts);

return "list";
}
}
7.4 列表查询
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%--
User: mr_yhl
Date: 2020/9/29
Time: 15:13
--%>
<html>
<head>
<title>list</title>
</head>
<body>
账户列表
<table border="1px" cellpadding="0" cellspacing="0">
<tr>
<td>id</td>
<td>账号名</td>
<td>余额</td>
</tr>
<c:forEach items="${accounts}" var="account">
<tr>
<td>${account.aid}</td>
<td>${account.name}</td>
<td>${account.balance}</td>
</tr>
</c:forEach>

</table>
</body>
</html>

第二章 增删改查案例(重点)

1. 思路图

ssm2

2. 增加

2.1 在列表页添加跳转到增加页面的按钮
<a href="${pageContext.request.contextPath}/accountController/toAdd" >添加</a>
2.2 Controller添加跳转到增加页面的方法
/**
* 跳转到添加页
*/
@RequestMapping("/accountController/toAdd")
public String toAdd(){
return "add";
}
2.3 添加增加页面
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%--
User: mr_yhl
Date: 2020/9/29
Time: 15:45
--%>
<html>
<head>
<title>添加</title>
</head>
<body>
<form method="post" action="${pageContext.request.contextPath}//accountController/add">
账户:<input type="text" name="name"><br>
余额:<input type="text" name="balance"><br>
<input type="submit" value="新增">
</form>

</body>
</html>
2.4 Controller添加增加的方法
/**
* 新增
*/
@RequestMapping("/accountController/add")
public String add(Account account){
accountService.save(account);
return "redirect:/accountController/list";
}
2.5 Service接口添加增加的方法
/**
* 新增
* @param account
*/
void save(Account account);
2.6 Service实现类添加增加的方法
@Override
public void save(Account account) {
accountDao.save(account);
}
2.7 dao添加增加的方法
/**
* 新增
* @param account
*/
void save(Account account);
2.8 映射文件中添加的方法
<insert id="save">
insert into account values (null,#{name},#{balance});
</insert>

3. 修改

3.1 数据回显
3.1.1在list页面上添加修改按钮
<td><a href="${pageContext.request.contextPath}/accountController/toUpdate?aid=${account.aid}">修改</a> </td>
3.1.2 在controller中添加跳转到修改页面的方法
/**
* 跳转到修改页
*/
@RequestMapping("/accountController/toUpdate")
public String toUpdate(Integer aid,HttpServletRequest request){
Account account = accountService.findByAid(aid);
request.setAttribute("account",account);
return "update";
}
3.1.3 在service接口中添加查询方法
/**
* 查询回显
* @param aid
* @return
*/
Account findByAid(Integer aid);
3.1.4 在service实现类中添加查询方法
/**
* 查询一个
* @param aid
* @return
*/
@Override
public Account findByAid(Integer aid) {
return accountDao.findByAid(aid);
}
3.1.5 在dao接口中添加查询方法
/**
* 查询一个
* @param aid
* @return
*/
Account findByAid(Integer aid);
3.1.6 在映射文件中添加查询方法
<select id="findByAid" resultType="com.itheima.domain.Account">
select * from account where aid = #{aid}
</select>
3.1.7 添加修改账户的页面
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%--
User: mr_yhl
Date: 2020/9/29
Time: 15:45
--%>
<html>
<head>
<title>添加</title>
</head>
<body>
<form method="post" action="${pageContext.request.contextPath}/accountController/add">
<input type="hidden" name="aid" value="${account.aid}">
账户:<input type="text" name="name" value="${account.name}"><br>
余额:<input type="text" name="balance" value="${account.balance}"><br>
<input type="submit" value="修改">
</form>

</body>
</html>
3.2 修改提交
3.2.1 在controller中添加修改方法
/**
* 修改
*/
@RequestMapping("/accountController/update")
public String update(Account account){
accountService.upfdate(account);
return "redirect:/accountController/list";
}
3.2.2 在service接口中添加修改方法
/**
* 修改
* @param account
*/
void upfdate(Account account);
3.2.3 在service实现类中添加修改方法
/**
* 修改
* @param account
*/
@Override
public void upfdate(Account account) {
accountDao.update(account);
}
3.2.4 在dao接口中添加修改方法
/**
* 修改一条
* @param account
*/
void update(Account account);
3.2.5 在映射文件中添加修改方法
<update id="update">
update account set name = #{name} , balance = #{balance} where aid = #{aid}
</update>

4. 删除

4.1 修改list页面,添加删除
<td><a href="${pageContext.request.contextPath}/accountController/delete?aid=${account.aid}">删除</a> </td>
4.2 在controller中添加删除的方法
/**
* 删除
*/
@RequestMapping("/accountController/delete")
public String delete(Integer aid){
accountService.delete(aid);
return "redirect:/accountController/list";
}
4.3 在service接口中添加删除的方法
/**
* 删除
* @param aid
*/
void delete(Integer aid);
4.4 在seivice实现类中添加删除的方法
/**
* 删除
* @param aid
*/
@Override
public void delete(Integer aid) {
accountDao.delete(aid);
}
4.5 在dao接口中添加删除的方法
/**
* 删除
* @param aid
*/
void delete(Integer aid);
4.6 在映射文件中添加删除的方法
<delete id="delete">
delete from account where aid = #{aid}
</delete>

5. 添加事务控制

5.1xml版

applicationContext.xml

<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="*"/>
</tx:attributes>
</tx:advice>
<aop:config>
<!--切点-->
<aop:pointcut id="pt" expression="execution(* com.itheima.service.impl.*.*(..))"/>
<!--切面-->
<aop:advisor advice-ref="txAdvice" pointcut-ref="pt"></aop:advisor>
</aop:config>
5.2 注解版

1) 注释掉aop:config tx:advice

2) 引入注解扫描

<tx:annotation-driven/>

3) 方法或者类上添加事务控制注解

@Transactional
public void save(Account account) {
accountDao.save(account);
}

第三章 Spring的父子容器

1. 说明

Spring和SpringMVC的容器具有父子关系,Spring容器为父容器,SpringMVC为子容器

子容器可以引用父容器中的Bean,而父容器不可以引用子容器中的Bean

ssm31

2. 配置

<!--注解扫描-->
<context:component-scan base-package="com.itheima">
<!--按照注解排除所有的Controller对象-->
<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
</context:component-scan>
<!--组件扫描-->
<context:component-scan base-package="com.itheima.controller" />
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Mr.YHL

谢谢您的肯定

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值