Java后端开发——SSM整合实验

文章目录

Java后端开发------SSM整合实验

一、常用方式整合SSM框架

1.搭建数据库环境:MySQL数据库中创建一个名称为ssm的数据库,在该数据库中创建一个名称为tb_book的表

bash 复制代码
CREATE DATABASE ssm;
USE ssm;
CREATE TABLE `tb_book`  ( 
  `id` int(11) ,
  `name` varchar(32) ,
  `press` varchar(32) ,
  `author` varchar(32) ); 
INSERT INTO `tb_book` VALUES 
(1, 'Java EE企业级应用开发教程', '人民邮电出版社', '黑马程序员');


2.引入项目SSM依赖库

3.创建实体类:创建名称为Book的实体类

bash 复制代码
package com.javaweb.domain;

public class Book {
private Integer id; //图书id
private String name; //图书名称
private String press; //出版社
private String author; //作者
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPress() {
return press;
}
public void setPress(String press) {
this.press = press;
}
public String getAuthor() {
return author;
}
public void setAuthor(String author) {
this.author = author;
} 
}

4.创建名称为BookMapper的持久层接口,在BookMapper接口中定义findBookById()方法,通过图书id获取对应的图书信息。

bash 复制代码
package com.javaweb.dao;

import com.javaweb.domain.Book;

public interface BookMapper {
public Book findBookById(Integer id);
}

5.创建BookMapper接口对应的映射文件BookMapper.xml。

bash 复制代码
<?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.javaweb.dao.BookMapper">
<!--根据id查询图书信息 -->
<select id="findBookById" parameterType="int" resultType="com.javaweb.domain.Book">
select * from tb_book where id = #{id}
</select>
</mapper>

6.创建名称为BookService的业务层接口,在BookService接口中定义findBookById()方法,通过id获取对应的Book信息。

bash 复制代码
package com.javaweb.service;

import com.javaweb.domain.Book;

public interface BookService {
public Book findBookById(Integer id);

}

7.建BookService接口的业务层实现类BookServiceImpl。BookServiceImpl类实现BookService接口的findBookById()方法。

bash 复制代码
package com.javaweb.service.impl;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.javaweb.dao.BookMapper;
import com.javaweb.domain.Book;
import com.javaweb.service.BookService;

@Service
public class BookServiceImpl implements BookService {
	
	@Autowired
	private BookMapper bookMapper;


	@Override
	public Book findBookById(Integer id) {
		return bookMapper.findBookById(id);
	}

}

8.创建名称为BookController的类。在BookController类中注入一个BookService对象,并且定义一个名称为findBookById()的方法。

bash 复制代码
package com.javaweb.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import com.javaweb.domain.Book;
import com.javaweb.service.BookService;

@Controller
public class BookController {
	@Autowired
	private BookService bookService;
	
	
	@RequestMapping("/book")
	public String findBookById(Integer id,Model model) {
		Book book = bookService.findBookById(id);
		model.addAttribute("book", book);
		return "book";
	}
}

9.在src/main/java下面创建application.xml配置文件

bash 复制代码
<?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.xsd">
<!-- 1.开启注解扫描, 扫描包 -->
<context:component-scan base-package="com.javaweb" />
<!-- 2.引入属性文件 -->
<context:property-placeholder location="classpath:jdbc.properties" />
<!-- 3.数据源 -->
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
<property name="driverClassName" value="${jdbc.driverClassName}" />
<property name="url" value="${jdbc.url}" />
<property name="username" value="${jdbc.username}" />
<property name="password" value="${jdbc.password}" />
</bean>
<!--4.创建SqlSessionFactory对象 -->
<bean id="sqlSessionFactory"
class="org.mybatis.spring.SqlSessionFactoryBean">
<!-- 数据源 -->
<property name="dataSource" ref="dataSource" />
</bean>
<!--5.扫描Dao包,创建动态代理对象, 会自动存储到spring IOC容器中 -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<!--指定要扫描的dao的包 -->
<property name="basePackage" value="com.javaweb.dao" />
</bean>
</beans>

10.创建数据源属性文件jdbc.properties

bash 复制代码
jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/ssm?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai&useSSL=false
jdbc.username=root
jdbc.password=root

11.在项目的web.xml文件中配置Spring的监听器来加载Spring容器及Spring的配置文件。

bash 复制代码
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
id="WebApp_ID" version="4.0">
<display-name>ssm</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.jsp</welcome-file>
<welcome-file>default.htm</welcome-file>
</welcome-file-list>

<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:application.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

<filter>
<filter-name>encoding</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>encoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<servlet>
<servlet-name>dispatcher</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>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>dispatcher</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>

</web-app>

12.在项目的src\main\resources目录下创建Spring MVC的配置文件spring-mvc.xml。spring-mvc.xml文件配置完成之后,在web.xml中配置Spring MVC的前端控制器,并在初始化前端控制器时加载Spring MVC的配置文件。

bash 复制代码
<?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
https://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/mvc
https://www.springframework.org/schema/mvc/spring-mvc.xsd">
<context:component-scan
base-package="com.javaweb.controller" /> <!-- 声明注解扫描 -->
<mvc:default-servlet-handler /> <!-- 启用默认Servlet处理静态资源 -->
<mvc:annotation-driven /> <!-- 开启 SpringMVC 的注解模式 -->
<bean
class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <!-- 视图解析器 -->
<property name="prefix" value="/WEB-INF/jsp/"></property>
<property name="suffix" value=".jsp"></property>
</bean>
</beans>

13.整合测试

(1)在webapps/WEB-INF/jsp下创建名称为book.jsp的文件,用于展示处理器返回的图书信息。

bash 复制代码
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html><head><title>图书信息查询</title></head><body>
<table border="1">
<tr><th>图书id</th><th>图书名称</th>
       <th>出版社</th><th>作者</th></tr>
<tr><td>${book.id}</td><td>${book.name}</td>
        <td>${book.press}</td>
        <td>${book.author}</td></tr>
</table></body>
</html>

将项目部署到Tomcat中,启动项目,在浏览器中访问地址http://localhost:8080/ssm/book?id=1来进行图书查询,页面显示效果如图所示。

从图中所示的信息可以看出,程序成功查询到了id为1的图书信息。表明Controller层成功将Service层获取的图书信息返回给页面了,由此可以得出SSM框架整合成功。

二、纯注解方式整合SSM框架

接下来,将项目中的XML配置文件删除,使用纯注解的配置类依次替换对应的XML文件内容,以完成

纯注解的SSM框架整合。具体实现步骤如下所示。

创建名称为JdbcConfig的类,用于获取数据库连接信息并定义创建数据源的对象方法,并定义getDataSource()方法,用于创建DruidDataSource对象。

bash 复制代码
@PropertySource("classpath:jdbc.properties")
public class JdbcConfig {
    // 下面为使用注入的形式。定义dataSource的bean,省略
    @Value("${jdbc.driverClassName}")	private String driver;
    @Value("${jdbc.url}")	private String url;
    @Value("${jdbc.username}")	private String userName;
    @Value("${jdbc.password}")	private String password;
}

在这里插入代码片

创建名称为MyBatisConfig的类,在MyBatisConfig类中定义getSqlSessionFactoryBean()方法,用于创建SqlSessionFactoryBean对象并返回。

bash 复制代码
public class MyBatisConfig {
    // 定义MyBatis的核心连接工厂bean
    @Bean
    public SqlSessionFactoryBean getSqlSessionFactoryBean(
                                       @Autowired DataSource dataSource){
        SqlSessionFactoryBean ssfb = new SqlSessionFactoryBean();
        ssfb.setDataSource(dataSource); return ssfb;	}
    // 定义MyBatis的映射扫描,省略
}

创建名称为SpringConfig的类作为项目定义Bean的源头,并扫描Service层对应的包。

bash 复制代码
@Configuration
@Import({MyBatisConfig.class,JdbcConfig.class})
// 等同于<context:component-scan base-package="com.itheima.service">
@ComponentScan(value = "com.itheima.service")
// 将MyBatisConfig类和JdbcConfig类交给Spring管理
public class SpringConfig {
}

创建名称为SpringMvcConfig的类作为Spring MVC的配置类,在配置类中指定Controller层的扫描路径。

bash 复制代码
package com.javaweb.config;

import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;

@Configuration
//等同于<context:component-scan base-package="com.itheima.controller"/>
@ComponentScan("com.javaweb.controller")
//等同于<mvc:annotation-driven/>,还不完全相同
@EnableWebMvc
public class SpringMvcConfig {
}

创建名称为ServletContainersInitConfig的类,继承AbstractAnnotationConfigDispatcherServletInitializer抽象类,重写抽象类的方法。用于替代之前web.xml文件配置的信息 ,初始化Servlet容器时加载指定初始化的信息。

bash 复制代码
public class ServletContainersInitConfig extends
                AbstractAnnotationConfigDispatcherServletInitializer {
    // 加载Spring配置类中的信息,初始化Spring容器
    protected Class<?>[] getRootConfigClasses() {
        return new Class[]{SpringConfig.class};	}
    // 加载Spring MVC配置类中的信息,初始化Spring MVC容器
    protected Class<?>[] getServletConfigClasses() {
        return new Class[]{SpringMvcConfig.class}; }
    // 配置DispatcherServlet的映射路径
    protected String[] getServletMappings() { return new String[]{"/"}; }}

启动chapter14项目,在浏览器中访问图书信息查询地址,地址为http://localhost:8080/book?id=1,页面显示效果如图所示。

从图中所示的信息可以看出,程序成功查询到了id为1的图书信息。表明Controller将Service获取的图书信息成功返回给页面了,由此可以得出纯注解的SSM框架整合成功。

相关推荐
Json____几秒前
学法减分交管12123模拟练习小程序源码前端和后端和搭建教程
前端·后端·学习·小程序·uni-app·学法减分·驾考题库
五味香4 分钟前
Linux学习,ip 命令
linux·服务器·c语言·开发语言·git·学习·tcp/ip
欧阳枫落10 分钟前
python 2小时学会八股文-数据结构
开发语言·数据结构·python
何曾参静谧17 分钟前
「QT」文件类 之 QTextStream 文本流类
开发语言·qt
monkey_meng21 分钟前
【Rust类型驱动开发 Type Driven Development】
开发语言·后端·rust
落落落sss29 分钟前
MQ集群
java·服务器·开发语言·后端·elasticsearch·adb·ruby
我救我自己29 分钟前
UE5运行时创建slate窗口
java·服务器·ue5
管理大亨32 分钟前
大数据微服务方案
大数据
2401_853275731 小时前
ArrayList 源码分析
java·开发语言
zyx没烦恼1 小时前
【STL】set,multiset,map,multimap的介绍以及使用
开发语言·c++