Java应用学习(三)-SSM框架整合及基本使用
我的个人博客Alexios,欢迎大家来吐槽交流。
SSM框架多种整合方式,这里使用注解+XML文件的方式来进行整合开发
一、前期准备
1.1、创建数据库与表
打开数据库可视化工具,执行以下sql语句
CREATE DATABASE ssm;USE ssm;CREATE TABLE `student`(id INT PRIMARY KEY AUTO_INCREMENT,`name` VARCHAR(32),score DOUBLE
);
INSERT INTO `student` VALUES (1, 'A', 80);
INSERT INTO `student` VALUES (2, 'B', 95);
INSERT INTO `student` VALUES (3, 'C', 90);
INSERT INTO `student` VALUES (4, 'D', 100);
1.2、创建maven项目
注:这里需要以maven-archetype-webapp为骨架构建项目

设置项目路径与坐标后,点击next
选择项目使用的maven版本及settings.xml文件,在属性中添加一键值对:(archetypeCatalog:internal),这个键值对可以解决maven项目构建速度过慢的问题。

1.3、编辑pom.xml
在pom.xml文件中引入项目依赖与版本锁定
<properties><project.build.sourceEncoding>UTF-8project.build.sourceEncoding><maven.compiler.source>1.8maven.compiler.source><maven.compiler.target>1.8maven.compiler.target><spring.version>5.0.2.RELEASEspring.version><slf4j.version>1.6.6slf4j.version><log4j.version>1.2.12log4j.version><mysql.version>8.0.19mysql.version><mybatis.version>3.4.5mybatis.version>properties><dependencies><dependency><groupId>org.aspectjgroupId><artifactId>aspectjweaverartifactId><version>1.6.8version>dependency><dependency><groupId>org.springframeworkgroupId><artifactId>spring-aopartifactId><version>${spring.version}version>dependency><dependency><groupId>org.springframeworkgroupId><artifactId>spring-contextartifactId><version>${spring.version}version>dependency><dependency><groupId>org.springframeworkgroupId><artifactId>spring-webartifactId><version>${spring.version}version>dependency><dependency><groupId>org.springframeworkgroupId><artifactId>spring-webmvcartifactId><version>${spring.version}version>dependency><dependency><groupId>org.springframeworkgroupId><artifactId>spring-testartifactId><version>${spring.version}version>dependency><dependency><groupId>org.springframeworkgroupId><artifactId>spring-txartifactId><version>${spring.version}version>dependency><dependency><groupId>org.springframeworkgroupId><artifactId>spring-jdbcartifactId><version>${spring.version}version>dependency><dependency><groupId>junitgroupId><artifactId>junitartifactId><version>4.12version><scope>compilescope>dependency><dependency><groupId>mysqlgroupId><artifactId>mysql-connector-javaartifactId><version>${mysql.version}version>dependency><dependency><groupId>javax.servletgroupId><artifactId>servlet-apiartifactId><version>2.5version><scope>providedscope>dependency><dependency><groupId>javax.servlet.jspgroupId><artifactId>jsp-apiartifactId><version>2.0version><scope>providedscope>dependency><dependency><groupId>jstlgroupId><artifactId>jstlartifactId><version>1.2version>dependency><dependency><groupId>log4jgroupId><artifactId>log4jartifactId><version>${log4j.version}version>dependency><dependency><groupId>org.slf4jgroupId><artifactId>slf4j-apiartifactId><version>${slf4j.version}version>dependency><dependency><groupId>org.slf4jgroupId><artifactId>slf4j-log4j12artifactId><version>${slf4j.version}version>dependency><dependency><groupId>org.mybatisgroupId><artifactId>mybatisartifactId><version>${mybatis.version}version>dependency><dependency><groupId>org.mybatisgroupId><artifactId>mybatis-springartifactId><version>1.3.0version>dependency><dependency><groupId>com.alibabagroupId><artifactId>druidartifactId><version>1.0.9version>dependency><dependency><groupId>org.projectlombokgroupId><artifactId>lombokartifactId><version>1.18.16version>dependency>dependencies>
1.4、完善目录结构
- 在src/main目录下创建java文件夹与resource文件夹。
- 在上一步创建的java目录下创建com.hzx.entity、com.hzx.dao、com.hzx.controller、com.hzx.service和com.hzx.test包
完善后的目录如下:

1.5、创建基本类
根据数据库的表结构创建实体类,这里使用了Lombok简化开发
package com.hzx.entity;
@Data
public class Student implements Serializable {private Integer id;private String name;private Double score;
}
在service包下创建一个StudentService接口,再创建一个impl包,然后在impl包下新建一个StudentServiceImpl实现类,这个类实现StudentService接口。
- 接口
package com.hzx.service;
public interface StudentService {
}
- 实现类
package com.hzx.service.impl;
public class StudentServiceImpl implements StudentService {
}
在mapper包下创建StudentMapper接口
package com.hzx.mapper;
public interface StudentMapper {
}
在controller包下创建一个StudentController接口
package com.hzx.controller;
public class StudentController {
}
二、Spring相关环境配置
2.1、编写Spring核心配置文件
在resource目录下创建Spring核心配置文件–applicationContext.xml
在这个核心配置文件中,我们需要
- 开启组件扫描,扫描com.hzx包下的所有组件
- 由于controller包下的控制器组件属于SpringMVC,所以我们需要在组件扫描中排除com.hzx包下所有添加了@Controller注解的组件。
<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/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context.xsdhttp://www.springframework.org/schema/aophttp://www.springframework.org/schema/aop/spring-aop.xsdhttp://www.springframework.org/schema/txhttp://www.springframework.org/schema/tx/spring-tx.xsd"><context:component-scan base-package="com.hzx"><context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>context:component-scan>beans>
2.2、测试
在StudentServiceImpl上添加@Service注解,同时添加两个方法进行测试
@Service
public class StudentServiceImpl implements StudentService {@Overridepublic List<Student> getAllStudent() {System.out.println("Service层的getAll方法,需要调用Mapper层与数据库交互.");return null;}
}
在com.hzx.test包下创建一个TestSpring类,编写方法使用junit进行测试
public class TestSpring {@Testpublic void testGetAll() {ApplicationContext ioc = new ClassPathXmlApplicationContext("applicationContext.xml");StudentService studentService = ioc.getBean(StudentServiceImpl.class);studentService.getAllStudent();}
}
结果

出现以上结果证明Spring基本环境已经搭建完成,下面配置SpringMVC
三、SpringMVC相关环境配置
3,1、配置web.xml
配置SpringMVC的核心前端控制器:DispatcherServlet
web.xml文件位置如下

<servlet><servlet-name>dispatcherServletservlet-name><servlet-class>org.springframework.web.servlet.DispatcherServletservlet-class><init-param><param-name>contextConfigLocationparam-name><param-value>classpath:springmvc.xmlparam-value>init-param><load-on-startup>1load-on-startup>servlet><servlet-mapping><servlet-name>dispatcherServletservlet-name><url-pattern>/url-pattern>servlet-mapping>
-
配置前端控制器的过程中,可以直接指定springmvc的核心配置文件位置,在resource目录下创建springmvc核心配置文件–springmvc.xml
-
使用该前端控制器拦截所有请求,在服务器启动时创建该servlet
配置字符编码过滤器,用于解决中文乱码
注:如果配置了多个过滤器,那么这个字符编码过滤器必须放在最前
<filter><filter-name>characterEncodingFilterfilter-name><filter-class>org.springframework.web.filter.CharacterEncodingFilterfilter-class><init-param><param-name>encodingparam-name><param-value>UTF-8param-value>init-param>
filter>
<filter-mapping><filter-name>characterEncodingFilterfilter-name><url-pattern>/*url-pattern>
filter-mapping>
可选:如果你在SSM框架中想使用REST风格的API,那么需要配置一个HiddenHttpMethodFilter
<filter><filter-name>hiddenHttpMethodFilterfilter-name><filter-class>org.springframework.web.filter.HiddenHttpMethodFilterfilter-class>filter><filter-mapping><filter-name>hiddenHttpMethodFilterfilter-name><url-pattern>/*url-pattern>filter-mapping>
3.2、配置springmvc.xml
在resource目录下创建一个springmvc.xml配置文件
-
创建配置文件,引入命名空间
-
开启组件扫描,由于Spring核心配置文件中已经扫描除控制器之外的组件,所以在springmvc核心配置文件中只需要扫描控制器即可。
<context:component-scan base-package="com.hzx"><context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
context:component-scan>
- 配置视图解析器,在WEB-INF文件夹下创建一个pages文件夹
<bean id="org" class="org.springframework.web.servlet.view.InternalResourceViewResolver"><property name="prefix" value="/WEB-INF/pages/"/><property name="suffix" value=".jsp"/>
bean>
- 在webapp目录下创建三个用于存放静态资源的文件夹(css、images、js),并放行静态资源
<mvc:resources mapping="/css/**" location="/css/"/>
<mvc:resources mapping="/images/**" location="/images/"/>
<mvc:resources mapping="/js/**" location="/js/"/>
- 开启注解支持
<mvc:annotation-driven/>
- springmvc.xml配置如下:
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:mvc="http://www.springframework.org/schema/mvc"xmlns:context="http://www.springframework.org/schema/context"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/mvchttp://www.springframework.org/schema/mvc/spring-mvc.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context.xsd"><context:component-scan base-package="com.hzx"><context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>context:component-scan><bean id="org" class="org.springframework.web.servlet.view.InternalResourceViewResolver"><property name="prefix" value="/WEB-INF/pages/"/><property name="suffix" value=".jsp"/>bean><mvc:resources mapping="/css/**" location="/css/"/><mvc:resources mapping="/images/**" location="/images/"/><mvc:resources mapping="/js/**" location="/js/"/><mvc:annotation-driven/>
beans>
3.3、编写页面
修改index.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
主页
查询所有学生
在WEB-INF/pages目录下创建一个list.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
查询所有页面
这是学生列表
3.4、测试
在StudentController添加一方法,这个方法用于跳转到list.jsp页面
@Controller
@RequestMapping("/student")
public class StudentController {@RequestMapping("/getAll")public ModelAndView getAll() {ModelAndView mv = new ModelAndView();mv.setViewName("list");return mv;}
}
配置tomcat

点击超链接后跳转成功,证明Springmvc基本配置完成

四、Spring整合Spring MVC
4.1、配置监听器
通过对 Spring MVC 的代码编写,我们知道,在服务器启动的时候就回去加载 springmvc.xml 这个配置,现在我们就需要继续在 web.xml 中配置,使得在项目启动的时候,就去加载applicationContext.xml的配置文件
所以我们可以在 web.xml 中,配置spring核心监听器,它默认会以 /WEB-INF/applicationContext.xml作为配置文件,这里需要注意web.xml文件中各个组件的存放位置
<context-param><param-name>contextConfigLocationparam-name><param-value>classpath:applicationContext.xmlparam-value>context-param><listener><listener-class>org.springframework.web.context.ContextLoaderListenerlistener-class>listener>
4.2、使用controller调用service
@Controller
@RequestMapping("/student")
public class StudentController {@Autowiredprivate StudentService studentService;@RequestMapping("/getAll")public ModelAndView getAll() {System.out.println("控制层的getAll方法...");studentService.getAllStudent();ModelAndView mv = new ModelAndView();mv.setViewName("list");return mv;}
}
4.3、重新启动tomcat,测试
在tomcat的VM options中填入:-Dfile.encoding=UTF-8,用于解决IDEA的控制台乱码问题

五、使用Spring整合Mybatis
5.1、编写Mybatis核心配置文件
在resource目录下新建一个SqlMapConfig.xml,这个文件其实可以省略,但我们还是用它来编写类名简化配置。
- 创建SqlMapConfig.xml配置文件
- 扫描com.hzx包,为包下的实体类起一个别名,并在控制台输出执行的sql
- 与数据库连接相关的配置我们放在Spring的核心配置文件中配置。
<configuration><settings><setting name="logImpl" value="STDOUT_LOGGING" />settings><typeAliases><package name="com.hzx"/>typeAliases>
configuration>
5.2、编写StudentMapper接口
使用注解形式编写sql语句,也可以使用xml配置文件的方式
@Repository
public interface StudentMapper {/**** 查询所有学生* @return*/@Select("select * from `ssm`.`student`")List<Student> getAll();/**** 向数据库中插入一个学生* @param student* @return*/@Insert("insert into `ssm`.`student`(name,score) values(#{name},#{score})")int addStudent(Student student);
}
5.3、编写链接数据库的配置文件
jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/ssm?useUnicode=true&characterEncoding=utf8&useSSL=false&nullCatalogMeansCurrent=true&serverTimezone=Asia/Shanghai
jdbc.username=root
jdbc.password=tianxin1230.
5.4、修改Spring核心配置文件
在Spring核心配置文件配置数据库连接池,引入properties文件
<context:property-placeholder location="classpath:db.properties" ignore-unresolvable="true" />
<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="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean" ><property name="dataSource" ref="dataSource" />
bean>
<bean id="mapperScanner" class="org.mybatis.spring.mapper.MapperScannerConfigurer" ><property name="basePackage" value="com.hzx.mapper" />
bean>
5.5、修改service实现类和controller层
service实现类
@Service
public class StudentServiceImpl implements StudentService {@Autowiredprivate StudentMapper studentMapper;@Overridepublic List<Student> getAllStudent() {System.out.println("Service层的getAll方法,需要调用Mapper层与数据库交互.");return studentMapper.getAll();}@Overridepublic int addStudent(Student student) {System.out.println("Service层的addStudent方法,需要调用Mapper层与数据库交互.");return studentMapper.addStudent(student);}
}
controller层
修改getAll方法,并添加add方法
@Controller
@RequestMapping("/student")
public class StudentController {@Autowiredprivate StudentService studentService;@RequestMapping("/getAll")public ModelAndView getAll() {System.out.println("控制层的getAll方法...");List<Student> students = studentService.getAllStudent();ModelAndView mv = new ModelAndView();mv.addObject("students",students);mv.setViewName("list");return mv;}@RequestMapping("/add")public void add(Student student, HttpServletRequest request, HttpServletResponse response) throws IOException, IOException {studentService.addStudent(student);response.sendRedirect(request.getContextPath()+"/student/getAll");return;}
}
5.6、修改index.jsp和
index.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
主页
查询所有学生
list.jsp
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
学生列表
学生列表
${student.name} 的成绩为: ${student.score}
测试查询所有学生方法

测试添加所有学生方法

结果

5.7、添加事务控制
修改spring核心配置文件
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"><property name="dataSource" ref="dataSource" />
bean>
<tx:advice id="txAdvice" transaction-manager="transactionManager"><tx:attributes><tx:method name="find*" read-only="true"/><tx:method name="*" isolation="DEFAULT"/>tx:attributes>
tx:advice>
<aop:config><aop:advisor advice-ref="txAdvice" pointcut="execution(* cn.ideal.service.impl.*ServiceImpl.*(..))"/>
aop:config>
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
