当前位置: 代码迷 >> 综合 >> 9.ssm整合-基于idea的maven项目
  详细解决方案

9.ssm整合-基于idea的maven项目

热度:37   发布时间:2024-03-10 02:13:08

ssm整合

1 环境搭建

1.1 创建项目

? 这里使用的是idea开发工具,创建maven项目。

1.2 添加pom依赖

<dependencies><!--1.导入mybatis相关的包--><!--导入mybatis的包--><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.5.3</version></dependency><!--导入mysql驱动--><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.37</version></dependency><!--spring和mybaites的兼容包--><dependency><groupId>org.mybatis</groupId><artifactId>mybatis-spring</artifactId><version>1.3.2</version></dependency><!--2.导入spring相关的包--><!--ioc四个包--><dependency><groupId>org.springframework</groupId><artifactId>spring-core</artifactId><version>4.3.7.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>4.3.7.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-expression</artifactId><version>4.3.7.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-beans</artifactId><version>4.3.7.RELEASE</version></dependency><!--aop包--><dependency><groupId>org.springframework</groupId><artifactId>spring-aop</artifactId><version>4.3.7.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-tx</artifactId><version>4.3.7.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-jdbc</artifactId><version>4.3.7.RELEASE</version></dependency><!--日志包--><dependency><groupId>commons-logging</groupId><artifactId>commons-logging</artifactId><version>1.2</version></dependency><!--3.javaweb的包--><!--web两个包--><dependency><groupId>org.springframework</groupId><artifactId>spring-web</artifactId><version>4.3.7.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>4.3.7.RELEASE</version></dependency><!--web常用的包:jstl,json,文件上传下载--><dependency><groupId>jstl</groupId><artifactId>jstl</artifactId><version>1.2</version></dependency><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-core</artifactId><version>2.11.2</version></dependency><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>2.11.2</version></dependency><!--文件上传下载的jar--><dependency><groupId>commons-fileupload</groupId><artifactId>commons-fileupload</artifactId><version>1.3.2</version></dependency><dependency><groupId>org.apache.commons</groupId><artifactId>commons-io</artifactId><version>1.3.2</version></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>RELEASE</version><scope>compile</scope></dependency></dependencies>

1.3 添加web框架

? 点击项目,右键,添加框架,出现如下界面:

image-20201030102846349

image-20201030102856976

1.4 添加tomcat服务器

image-20201030102909466

点击Edit Configurations,在下图选中添加tomcat服务

image-20201030102927079

添加工件artifact:

image-20201030102938854

修改名字和访问路径

image-20201030102951705

1.5 将pom文件的jar包添加到web的输出目录

? 在项目结构中进行修改web的输出目录

image-20201030103003191

注:每次修改pom文件都要导入一次

1.6 写包的结构

? 编写各层包,根据自己的意愿,但是注意配置文件中修改

image-20201030103014847

1.7 编写mybatis-config.xml配置文件

? 数据源之类的都交给spring进行管理,因此该文件是空的。

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration></configuration>

1.8 编写spring的配置文件

? 编写spring的配置文件,log4j的配置文件,jdbc的配置文件

1.8.1 jdbc.properties文件
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/java26
jdbc.username=root
jdbc.password=19971001
1.8.2 log4j.properties文件
### 设置###
log4j.rootLogger = warn,stdout,D### 输出信息到控制抬 ###
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### 输出DEBUG 级别以上的日志到=E://logs/error.log ###
log4j.appender.D = org.apache.log4j.DailyRollingFileAppender
log4j.appender.D.File = E://logs/log.log
log4j.appender.D.Append = true
log4j.appender.D.Threshold = DEBUG 
log4j.appender.D.layout = org.apache.log4j.PatternLayout
log4j.appender.D.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss}  [ %t:%r ] - [ %p ]  %m%n
1.8.3 spring-config.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 http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd"><!--1.配置包扫描:排除controller--><context:component-scan base-package="com.zhiyou100"><context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/></context:component-scan><!--2.指定数据源--><context:property-placeholder location="classpath:jdbc.properties" /><bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"><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><!--3.创建事务管理器:将数据源交给事务管理器--><bean class="org.springframework.jdbc.datasource.DataSourceTransactionManager"><property name="dataSource" ref="dataSource" /></bean><!--4.创建sqlSession和sql--><bean class="org.mybatis.spring.SqlSessionFactoryBean"><property name="dataSource" ref="dataSource" /><property name="configLocation" value="classpath:mybatis-config.xml" /><property name="mapperLocations" value="classpath:mapper/StudentMapper.xml" /></bean><!--5.为接口生成实现类对象--><bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"><property name="basePackage" value="com.zhiyou100.dao" /></bean></beans>

1.9 配置springmvc.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.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 http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd"><!--1.配置包扫描--><context:component-scan base-package="com.zhiyou100" use-default-filters="false"><context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/></context:component-scan><!--2.配置视图解析器--><bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"><property name="prefix" value="/WEB-INF/pages/" /><property name="suffix" value=".jsp" /></bean><!--3.开启注解驱动:内部注册了很多个bean--><mvc:default-servlet-handler /><mvc:annotation-driven /><!--4.配置多路径解析器:用于文件上传:可选--><bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver" /></beans>

1.10 编写web.xml

<?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"><!--1.配置spring核心配置文件--><context-param><param-name>contextConfigLocation</param-name><param-value>classpath:spring-config.xml</param-value></context-param><!--2配置上下文监听器:web.xml加载的时候启动spring容器--><listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener><!--3.配置前端控制器--><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:springmvc.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><!--4设置编码集,优先于doDispatcher执行--><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><init-param><param-name>forceResponseEncoding</param-name><param-value>true</param-value></init-param><init-param><param-name>forceRequestEncoding</param-name><param-value>true</param-value></init-param></filter><filter-mapping><filter-name>CharacterEncodingFilter</filter-name><!--拦截所有请求,包含jsp,--><url-pattern>/*</url-pattern></filter-mapping><!--5.配置restful风格:可选--><filter><filter-name>HiddenHttpMethodFilter</filter-name><filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class></filter><filter-mapping><filter-name>HiddenHttpMethodFilter</filter-name><url-pattern>/*</url-pattern></filter-mapping><!--6.配置文件上传,下载的基础目录:可选--><context-param><param-name>filePath</param-name><param-value>e:/file</param-value></context-param></web-app>

2 测试代码编写

2.1 entity层

? 主要写javabean

package com.zhiyou100.entity;import java.io.Serializable;public class Student implements Serializable {
    private Integer sid;private String sname;private Integer sage;public Student() {
    }public Student(Integer sid, String sname, Integer sage) {
    this.sid = sid;this.sname = sname;this.sage = sage;}public Integer getSid() {
    return sid;}public void setSid(Integer sid) {
    this.sid = sid;}public String getSname() {
    return sname;}public void setSname(String sname) {
    this.sname = sname;}public Integer getSage() {
    return sage;}public void setSage(Integer sage) {
    this.sage = sage;}@Overridepublic String toString() {
    return "Student{" +"sid=" + sid +", sname='" + sname + '\'' +", sage=" + sage +'}';}
}

2.2 dao层

package com.zhiyou100.dao;import com.zhiyou100.entity.Student;
import org.apache.ibatis.annotations.Select;import java.util.List;public interface StudentMapper {
    @Select("select * from student")List<Student> getAllStudents();Student getStudentById(Integer sid);}

2.3 mapper文件

? 需要写在resource下

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org/DTD Mapper 3.0""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.zhiyou100.dao.StudentMapper"><select id="getStudentById" resultType="com.zhiyou100.entity.Student">select * from student where sid=#{sid}</select>
</mapper>

注意:

  1. 名字和dao的接口一致,名字为StudentMapper.xml

  2. namespace要对应接口全类名

2.4 service层

接口层:

package com.zhiyou100.service;import com.zhiyou100.entity.Student;
import java.util.List;public interface StudentService {
    List<Student> getAllStudents();Student getStudentById(Integer sid);
}

实现层:

package com.zhiyou100.service.impl;import com.zhiyou100.dao.StudentMapper;
import com.zhiyou100.entity.Student;
import com.zhiyou100.service.StudentService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;@Service
public class StudentServiceImpl implements StudentService {
    @Autowiredprivate StudentMapper studentMapper;@Overridepublic List<Student> getAllStudents() {
    return studentMapper.getAllStudents();}@Overridepublic Student getStudentById(Integer sid) {
    return studentMapper.getStudentById(sid);}
}

2.5 controller

package com.zhiyou100.controller;import com.zhiyou100.service.StudentService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;@Controller
public class HelloController {
    @Autowiredprivate StudentService studentService;@RequestMapping("/hello")public String hello(){
    System.out.println("hello!");return "success";}@RequestMapping("/getAllStudents")@ResponseBodypublic Object getAllStudents(){
    System.out.println("获取所有学生");return studentService.getAllStudents();}@RequestMapping("/getStudentById")@ResponseBodypublic Object getStudentById(Integer sid){
    System.out.println("获取所有学生");return studentService.getStudentById(sid);}
}

3 测试

3.1 测试注解的方法

image-20201030103255129

3.2 测试配置的方法

image-20201030103310282

  相关解决方案