实验十二:SSM框架整合
一、实验目的
1.熟悉SSM框架整合时的配置文件
2.掌握SSM框架整合应用程序
二、实验内容
1.项目基础结构搭建、Spring和MyBatis整合、Spring和Spring MVC整合
2.纯注解方式、SSM框架整合
三、实验步骤
1.项目基础结构搭建、Spring和MyBatis整合、Spring和Spring MVC整合
(1)项目基础结构搭建
① 搭建数据库环境
创建ssm数据库,创建tb_book表并存入数据
CREATE DATABASES ssm;
USE ssm;
create table tb_book(
id int(11),
name varchar(32),
press varchar(32),
author varchar(32))ENGINE=INNODB DEFAULT CHARSET=UTF8;
insert into tb_book(id,name,press,author) values(1,'javaee企业级应用开发教程','人民邮电出版社','黑马程序员');
② 引入项目依赖
在项目的pom.xml文件中引入相关依赖
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.2.8.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>5.2.8.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>5.2.8.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>5.2.8.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.2.8.RELEASE</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.2</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>2.0.1</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.20</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>2.2</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.16</version>
</dependency>
</dependencies>
③ 创建实体类
在src\main\java文件夹中创建com\sun\domain文件夹,并创建Book实体类
package com.sun.domain;
public class Book {
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;
}
private Integer id;
private String name;
private String press;
private String author;
}
④ 创建三层架构对应模块的类和接口
- 创建接口
在src\main\java文件夹下创建com\sun\dao文件夹,并创建名为BookMapper持久层接口
package com.sun.dao;
import com.sun.domain.Book;
public interface BookMapper {
public Book findBookById(Integer id);
}
- 创建BookMapper.xml映射文件
在src\main\resources文件夹下创建com.sun.dao文件夹,并创建BookMapper接口映射文件
<?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>
<select id="findBookById" parameterType="int" resultType="com.sun.domain.Book">
select * from tb_book where id=#{id}
</select>
</mapper>
- 创建业务层
在src\main\java文件夹下创建com.sun.service文件夹,并创建业务层
package com.sun.service;
导入相关包....
@Service
public interface BookService {
public Book findBookById(Integer id);
}
- 创建接口业务层的实现类
在src\main\java文件夹下创建com.sun.service.impl文件夹,并创建接口实现层
package com.sun.service.impl;
导入相关包....
public class BookServiceImpl implements BookService {
@Autowired
private BookMapper bookMapper;
public Book findBookById(Integer id) {
return bookMapper.findBookById(id);
}
}
- 创建BookController.java
在src\main\java文件夹下创建com\sun\controller文件夹并创建BookController类
package com.sun.controller;
导入相关包.....
@Controller
public class BookController {
@Autowired
private BookService bookService;
@RequestMapping("/book")
public ModelAndView findBookById(Integer id) {
Book book = bookService.findBookById(id);
ModelAndView modelAndView = new ModelAndView();
modelAndView.setViewName("book.jsp");
modelAndView.addObject("book", book);
return modelAndView;
}
}
(2)Spring和MyBatis整合
① Spring的配置文件
在src\main\resources文件夹中创建配置文件application-service.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.xsd">
<context:component-scan base-package="com.sun.service"/>
</beans>
② Spring和Mybatis整合的配置
- 创建数据源属性文件
在src\main\resources文件夹中创建数据源属性文件jdbc.properties
mysql.driver=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/ssm?useUnicode=true\
&characterEncoding=utf-8&serverTimezone=Asia/Shanghai
mysql.username=root
mysql.password=1234
- 创建配置文件
在src\main\resources文件夹中创建配置文件application-dao.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.xsd
">
<context:property-placeholder location="classpath:jdbc.properties"/>
<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>
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
</bean>
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.sun.dao"/>
</bean>
</beans>
③ 整合测试
在src\main\java文件夹下创建com\sun\test文件夹,并创建测试类 BookServiceTest
package com.sun.test;
导入相关包.....
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"classpath:application-service.xml",
"classpath:application-dao.xml"})
public class BookServiceTest {
@Autowired
private BookService bookService;
@Test
public void findBookById() {
Book book = bookService.findBookById(1);
System.out.println("图书id:" + book.getId());
System.out.println("图书名称:" + book.getName());
System.out.println("作者:" + book.getAuthor());
System.out.println("出版社:" + book.getPress());
}
}
运行结果:
(3)Spring和Spring MVC整合
① Spring的配置
在web.xml文件中配置spring的监听器来加载Spring容器和Spring的配置文件
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
version="3.0">
<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>
</web-app>
② SpringMVC的配置
- 配置spring-mvc.xml
在src\main\resources目录下创建SpringMVC的配置文件spring-mvc.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.alibaba.com/schema/stat"
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.alibaba.com/schema/stat http://www.alibaba.com/schema/stat.xsd">
<context:component-scan base-package="com.sun.controller"/>
<mvc:annotation-driven/>
</beans>
- 在web.xml中配置SpringMVC的前端控制器
在web.xml中配置SpringMVC的前端控制器
<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>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>DispatcherServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
③ SSM框架整合测试
在src\main\webapp文件夹下创建名称book.jsp
<%@ 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>
运行结果:
启动项目后在浏览器输入http://localhost:8090/sy_ch12/book?id=1
2.纯注解方式、SSM框架整合
(1)创建包存放项目中的配置类
在src\mian\java文件夹中创建com\sun\config文件夹,并创建JdbcConfig类
package com.sun.config;
导入相关包......
@PropertySource("classpath:jdbc.properties")
public class JdbcConfig {
@Value("${jdbc.driverClassName}")
private String driver;
@Value("${jdbc.url}")
private String url;
@Value("${jdbc.username}")
private String userName;
@Value("${jdbc.password}")
private String password;
@Bean("dataSource")
public DataSource getDataSource() {
DruidDataSource ds = new DruidDataSource();
ds.setDriverClassName(driver);
ds.setUrl(url);
ds.setUsername(userName);
ds.setPassword(password);
return ds;
}
}
(2)创建MyBatisConfig.java
在src\mian\java\com\sun\config文件夹中创建MyBatisConfig类
package com.sun.config;
导入相关包......
public class MyBatisConfig {
@Bean
public SqlSessionFactoryBean getSqlSessionFactoryBean(@Autowired DataSource dataSource) {
SqlSessionFactoryBean ssfb = new SqlSessionFactoryBean();
ssfb.setDataSource(dataSource);
return ssfb;
}
@Bean
public MapperScannerConfigurer getMapperScannerConfigurer() {
MapperScannerConfigurer msc = new MapperScannerConfigurer();
msc.setBasePackage("com.sun.dao");
return msc;
}
}
(3)创建SpringConfig.java
在src\mian\java\com\sun\config文件夹中创建 SpringConfig类
package com.sun.config;
导入相关包......
@Configuration
@Import({MyBatisConfig.class, JdbcConfig.class})
@ComponentScan(value = "com.sun.service")
public class SpringConfig {
}
(4)创建SpringMvcConfig.java
在src\mian\java\com\sun\config文件夹中创建 SpringMvcConfig类
package com.sun.config;
导入相关包......
@Configuration
@ComponentScan("com.sun.controller")
@EnableWebMvc
public class SpringMvcConfig {
}
(5)创建ServletContatinerslnitConfig.java
在src\mian\java\com\sun\config文件夹中创建 ServletContatinerslnitConfig类
package com.sun.config;
导入相关包......
public class ServletContainersInitConfig extends
AbstractAnnotationConfigDispatcherServletInitializer {
protected Class<?>[] getRootConfigClasses() {
return new Class[]{SpringConfig.class};
}
protected Class<?>[] getServletConfigClasses() {
return new Class[]{SpringMvcConfig.class};
}
protected String[] getServletMappings() {
return new String[]{"/"};
}
}
运行结果:
启动项目后在浏览器输入http://localhost:8090/sy_ch12/book?id=1