复习到SSM框架 使用分模块实现一个小案例
示例:
二、操作流程
1.引入数据库Items
SET FOREIGN_KEY_CHECKS=0;
-- ----------------------------
-- Table structure for `items`
-- ----------------------------
DROP TABLE IF EXISTS `items`;
CREATE TABLE `items` (
`id` int(10) NOT NULL auto_increment,
`name` varchar(20) default NULL,
`price` float(10,0) default NULL,
`pic` varchar(40) default NULL,
`createtime` datetime default NULL,
`detail` varchar(200) default NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8;
-- ----------------------------
-- Records of items
-- ----------------------------
INSERT INTO `items` VALUES ('1', '化学', '1000', null, '2018-03-13 09:29:30', 'test');
INSERT INTO `items` VALUES ('2', '英语', null, null, '2018-03-28 10:05:52', 'test1');
INSERT INTO `items` VALUES ('3', '数学', '199', null, '2018-03-07 10:08:04', 'test2');
INSERT INTO `items` VALUES ('4', '机械自动', null, null, null, null);
2.创建父工程(名字为xxx_parent)
2.1修改pom文件的打包方式为pom
2.2添加版本锁定(这里并不是添加依赖 只是管理子模块导入的版本号)
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.ysx</groupId>
<artifactId>ssm_parent_2</artifactId>
<version>1.0-SNAPSHOT</version>
<modules>
<module>ssm_pojo</module>
<module>ssm_dao</module>
<module>ssm_service</module>
<module>ssm_web</module>
</modules>
<!--修改打包方式为pom 既管理所有的子模块-->
<packaging>pom</packaging>
<!--
特殊属性定义,一般是版本号
-->
<properties>
<spring.version>5.0.2.RELEASE</spring.version>
<slf4j.version>1.6.6</slf4j.version>
<mysql.version>5.1.6</mysql.version>
<mybatis.version>3.4.5</mybatis.version>
<aspectjweaver.version>1.6.8</aspectjweaver.version>
<junit.version>4.12</junit.version>
<jsp-api.version>2.0</jsp-api.version>
<servlet-api.version>2.5</servlet-api.version>
<jstl.version>1.2</jstl.version>
<mybatis-spring.version>1.3.0</mybatis-spring.version>
<druid.version>1.0.9</druid.version>
<lombok.version>1.18.8</lombok.version>
<!--文件的编码格式-->
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
</properties>
<!--
【注意】dependencyManagement:并非导入依赖,而只是管理依赖的版本
-->
<dependencyManagement>
<!--引入版本管理-->
<dependencies>
<!-- spring(切面) -->
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>${aspectjweaver.version}</version>
</dependency>
<!-- spring(aop) -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>${spring.version}</version>
</dependency>
<!--spring包(核心)-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring.version}</version>
</dependency>
<!--用于SpringMVC-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>${spring.version}</version>
</dependency>
<!--用于数据库源相关操作-->
<!-- spring(整合jdbc) -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>${spring.version}</version>
</dependency>
<!-- spring(事务) -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>${spring.version}</version>
</dependency>
<!--Servlet相关API(可以使用Request、Response)-->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>${servlet-api.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>${jsp-api.version}</version>
<scope>provided</scope>
</dependency>
<!--jstl标签-->
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
<version>${jstl.version}</version>
</dependency>
<!--MySQL数据库驱动-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${mysql.version}</version>
<scope>runtime</scope>
</dependency>
<!--spring测试-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>${junit.version}</version>
<scope>test</scope>
</dependency>
<!-- log日志 start -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>${slf4j.version}</version>
</dependency>
<!-- log end -->
<!--mybatis-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>${mybatis.version}</version>
</dependency>
<!--MyBatis集成Spring-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>${mybatis-spring.version}</version>
</dependency>
<!--数据源-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>${druid.version}</version>
</dependency>
<!--lombok-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>${lombok.version}</version>
</dependency>
</dependencies>
</dependencyManagement>
<!--真正的引入依赖的地方-->
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
</project>
3. 创建子模块(ssm_pojo) 用于管理对象类
3.1 修改子模块打包方式为jar包 导入Lombok依赖
<packaging>jar</packaging>
<dependencies>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
</dependencies>
3.2 按照下图结构在子模块下创建对象
4.创建子模块 ssm_dao
4.1修改dao模块的打包方式为jar 导入依赖
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>ssm_parent_2</artifactId>
<groupId>com.ysx</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>ssm_dao</artifactId>
<!--jar包-->
<packaging>jar</packaging>
<!--引入依赖-->
<dependencies>
<!--model的依赖-->
<dependency>
<groupId>com.ysx</groupId>
<artifactId>ssm_pojo</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<!--mybatis-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
</dependency>
<!--MyBatis集成Spring-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
</dependency>
<!--数据源-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
</dependency>
<!--MySQL数据库驱动-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<!--SpringJdbc -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
</dependency>
<!-- log start -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
</dependency>
<!-- log end -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
</dependency>
</dependencies>
</project>
4.2在resoures下面创建spring-dao配置文件
4.3在resources下面创建数据库配置文件
<?xml version="1.0" encoding="UTF8"?>
<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
https://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
https://www.springframework.org/schema/context/spring-context.xsd">
<!--导入数据库配置文件-->
<context:property-placeholder location="classpath:jdbc.properties"/>
<!--配置数据源-->
<bean class="com.alibaba.druid.pool.DruidDataSource" id="dataSource">
<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>
<!--创建sqlsessionFactoryBean对象-->
<bean class="org.mybatis.spring.SqlSessionFactoryBean" id="sqlSessionFactory">
<!--设置类的别名-->
<property name="typeAliasesPackage" value="com.ysx.pojo"/>
<!--设置数据源-->
<property name="dataSource" ref="dataSource"/>
</bean>
<!--创建mapperScannerConfig对象-->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer" id="scannerConfigurer">
<!--扫描com.ysx.dao下的所有接口 让SqlsessionFactoryBean生成代理对象实例化到容器中-->
<property name="basePackage" value="com.ysx.dao"/>
</bean>
</beans>
4.4创建接口文件ItemsDao
4.4创建接口映射文件
4.5编写映射文件
<?xml version="1.0" encoding="UTF8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ysx.dao.ItemsDao">
<!--查询所有的学科-->
<select id="getItems" resultType="Items">
select * from items
</select>
<!--新增学科-->
<insert id="add" parameterType="Items">
insert into items values(null,#{name},#{price},#{pic},#{createtime},#{detail})
</insert>
</mapper>
4.6 测试dao能否成功执行sql
测试结果
5 创建service子模块 ssm_service
在pom文件中 修改打包方式为jar包 导入事务依赖
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>ssm_parent_2</artifactId>
<groupId>com.ysx</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>ssm_service</artifactId>
<!--修改打包方式jar包-->
<packaging>jar</packaging>
<!--依赖-->
<dependencies>
<!--依赖dao-->
<dependency>
<groupId>com.ysx</groupId>
<artifactId>ssm_dao</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<!-- spring -->
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
</dependency>
</dependencies>
</project>
5.1创建包的结构 在com.ysx.service下创建ItemsService接口 方法和dao接口一致
5.2在service包下创建实现类对象 实现servcie接口
package com.ysx.service.impl;
import com.ysx.dao.ItemsDao;
import com.ysx.pojo.Items.Items;
import com.ysx.service.ItemsService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
@Transactional//注解方式实现事务
@Component//为了能够让容器托管
public class ItemsServiceImpl implements ItemsService {
// 注入dao接口的代理对象
@Autowired
private ItemsDao itemDao;
/**
* 查询所有的记录封装集合返回
* @return
*/
public List<Items> getItems() {
return itemDao.getItems();
}
/**
* 添加一条记录
* @param item
* @return
*/
public int add(Items item) {
return itemDao.add(item);
}
}
5.3当然 现在注解还不能生效 spring容器没有托管到我们的实现类 接下来需要配置spring-service层的配置文件
具体的代码
<?xml version="1.0" encoding="UTF8"?>
<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:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans
https://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/tx
http://www.springframework.org/schema/tx/spring-tx.xsd">
<!--导入dao层的配置文件-->
<import resource="spring-dao.xml"/>
<!--创建事务的管理员-->
<bean class="org.springframework.jdbc.datasource.DataSourceTransactionManager" id="manager">
<!--前面的dataSource是数据源类型 后面的是引入dao层配置好的数据源
ref:引入已经在spring中托管的对象-->
<property name="dataSource" ref="dataSource"/>
</bean>
<!--开启事务的注解支持-->
<tx:annotation-driven transaction-manager="manager"/>
<!--开启组件的扫描-->
<context:component-scan base-package="com.ysx"/>
</beans>
5.4测试代码
6.最后最后一个模块ssm_web
- 注意:这是一个web项目 所以需要将打包方式需改为war包
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>ssm_parent_2</artifactId>
<groupId>com.ysx</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>ssm_web</artifactId>
<!--!!!!!!修改打包的方式为:war包-->
<packaging>war</packaging>
<!--依赖引入-->
<dependencies>
<!--依赖service-->
<dependency>
<groupId>com.ysx</groupId>
<artifactId>ssm_service</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<!--导入springmvc-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
</dependency>
<!--servletAPI -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<scope>provided</scope>
</dependency>
<!--jstl表达式 -->
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
</dependency>
</dependencies>
</project>
创建项目结构
6.2 当前的模块没有导入web的模块 所以需要手动的添加 右键 add…
如果没有 可以在项目结构 手动添加
可以看到在项目结构多了一个文件夹
6.4打开web.xml配置文件 配置dispatcharServlet总控制器
<?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">
<servlet>
<servlet-name>Dispatcherservlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!--在服务器启动的时候就加载 spring容器-->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring-web.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>
</web-app>
6.5 在resource下面创建spring-web的配置文件
具体代码(配置完成后可以web.xml爆红的地方已经恢复了)
<?xml version="1.0" encoding="UTF8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:mvc="http://www.springframework.org/schema/mvc"
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/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
<!--这里不需要再开启组件扫描了 之前在service已经扫描过了-->
<!--<context:component-scan base-package="com.ysx"/>-->
<!--导入spring-service的配置文件-->
<import resource="spring-service.xml"/>
<!--开启注解支持-->
<mvc:annotation-driven/>
<!--静态资源过滤-->
<mvc:default-servlet-handler/>
<!--配置视图解析器-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" id="viewResolver">
<property name="prefix" value="/WEB-INF/"/>
<property name="suffix" value=".jsp"/>
</bean>
</beans>
测试ssm 连接前在父工程pom中安装一下插件 tomcat7
6.5编写contorller 测试
6.6测试发现找不到指定的路径 原因是我们的web文件夹不属于项目部署的web包 所以需要重新导入 这里我使用了一个插件 生成了web文件夹
将配置过的web.xml放入到插件生成的webapp/WEB-INF/下面
插件下载地址:https://gitee.com/yeshuxiang/ssm.git
启动服务器 访问指定端口号 映射路径
总结
SSM整合
1.一个父工程 打包方式:pom (用于管理子模块的依赖版本)
2.ssm_dao子模块 打包方式 jar
3.ssm_service子模块 打包方式 jar
4.ssm_web 子模块 打包方式为 war