ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

简单快速搭建一个SSM框架

2021-01-19 15:31:02  阅读:120  来源: 互联网

标签:框架 springframework SSM org import password com public 搭建


刚学完SSM框架,这里用SSM框架来实现操作数据库的功能,话不多说,直接上代码。

在pom.xml中导入所需要的依赖:
        <!--spring-mvc核心依赖-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>5.2.9.RELEASE</version>
        </dependency>

        <!--jstl支持-->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>jstl</artifactId>
            <version>1.2</version>
        </dependency>

        <!--servlet编译环境-->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>servlet-api</artifactId>
            <version>2.5</version>
            <scope>provided</scope>
        </dependency>

        <!--jsp编译环境-->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>jsp-api</artifactId>
            <version>2.0</version>
            <scope>provided</scope>
        </dependency>

        <!--fastjson依赖-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.62</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-aspects</artifactId>
            <version>5.1.6.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>5.2.9.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>5.1.6.RELEASE</version>
        </dependency>
        <!--用于在测试类中使用-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-test</artifactId>
            <version>5.1.6.RELEASE</version>
        </dependency>
        <!--Spring整合Mybatis-->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis-spring</artifactId>
            <version>2.0.5</version>
        </dependency>
        <!--Mybatis-->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.6</version>
        </dependency>
        <!--mysql依赖-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.22</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>
        </dependency>
配置mvc.xml:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       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-4.3.xsd
                           http://www.springframework.org/schema/mvc
                           http://www.springframework.org/schema/mvc/spring-mvc-4.3.xsd">

    <!--注解扫描-->
    <!--use-default-filters="false":意思是当扫描com.jpx.controller此包时,类中的所有注解都自动忽略-->
    <context:component-scan base-package="com.jpx" use-default-filters="false">
        <!--下面这个配置的意思是,只看有Controller注解的类,同时该类中所有的注解都会被识别到,和上面的配合使用-->
        <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
    </context:component-scan>
    <!--注解驱动-->
    <mvc:annotation-driven>
        <!--安装FastJson,转换器-->
        <mvc:message-converters>
            <bean class="com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter">
                <!--声明转换类型:json-->
                <property name="supportedMediaTypes">
                    <list>
                        <value>application/json</value>
                    </list>
                </property>
            </bean>
        </mvc:message-converters>
    </mvc:annotation-driven>
    <!-- 视图解析器
         作用:①捕获后端控制器的返回值  eg:value="index"
              ②解析:在返回值前后拼接形成"/index.jsp" -->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <!--前缀-->
        <property name="prefix" value="/"></property>
        <!--后缀-->
        <property name="suffix" value=".jsp"></property>
    </bean>

    <!--额外的增加一个handler,且其requestMapping:"/**" 可以匹配所有的请求,但是优先级最低
    所以如果所有其他的handler都匹配不上,请求就会转向"/**",恰好这个handler就是处理静态资源的处理方式:
    将请求转到tomcat中默认的servlet。-->
    <mvc:default-servlet-handler/>
</beans>
配置application.xml:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:tx="http://www.springframework.org/schema/tx"
       xmlns:aop="http://www.springframework.org/schema/aop"
       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/tx
                http://www.springframework.org/schema/tx/spring-tx.xsd
                http://www.springframework.org/schema/aop
                http://www.springframework.org/schema/aop/spring-aop.xsd
                http://www.springframework.org/schema/context
                http://www.springframework.org/schema/context/spring-context-4.2.xsd">

    <!--配置文件参数化(参数占位符)-->
    <context:property-placeholder location="classpath:jdbc.properties"/>
    <!--与DruidDataSource集成-->
    <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close">
        <!--基本配置-->
        <property name="driverClassName" value="${jdbc.driverClass}"/>
        <property name="url" value="${jdbc.url}"/>
        <property name="username" value="${jdbc.username}"/>
        <property name="password" value="${jdbc.password}"/>
        <!--Druid连接池可选参数-->
        <!--配置初始化大小:最小、最大-->
        <property name="initialSize" value="${jdbc.init}"/>
        <property name="minIdle" value="${jdbc.minIdle}"/>
        <property name="maxActive" value="${jdbc.maxActive}"/>
        <!--配置获取连接等待超时的时间-->
        <property name="maxWait" value="60000"/>
        <!--配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒-->
        <property name="timeBetweenEvictionRunsMillis" value="60000"/>
        <!-- 配置一个连接在池中最小生存的时间,单位是毫秒-->
        <property name="minEvictableIdleTimeMillis" value="300000"/>
    </bean>
    <!--生产:SqlSessionFactory-->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <!--注入连接池-->
        <property name="dataSource" ref="dataSource"></property>
        <!--注入dao-mapper文件信息,如果映射文件和dao接口同包且同名,则此配置可省略-->
        <property name="mapperLocations">
            <list>
                <value>classpath:com/jpx/dao/*.xml</value>
            </list>
        </property>
        */
        <!--为dao-mapper文件中的实体 定义缺省包路径
        如:<select id="queryAll" resultType="User"/>中User类可以不用定义包-->
        <property name="typeAliasesPackage" value="com.jpx.entity"></property>
    </bean>
    <!--管理DAO实现类的创建,并创建DAO对象,存入工厂管理
                1.扫描所有dao接口,去构建dao实现;
                2.将dao实现存入工厂管理;
                3.dao实现对象在工厂中的id是:首字母小写的接口类名,例如:UserDao==>userDao-->
    <bean id="mapperScannerConfigurer" class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <!--dao接口所在的包,如果有多个包,可以用逗号或者分号分隔
        eg:<property name="basePackage" value="com.a.dao,com.b.dao"></property>-->
        <property name="basePackage" value="com.jpx.dao"></property>
        <!--如果工厂中只有一个SqlSessionFactory的bean,此配置可省略-->
        <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"></property>
    </bean>

    <!--告知Spring注解位置,即注解扫描-->
    <!--use-default-filters="true":默认为true,意思是当扫描com.jpx.controller此包时,类中的所有注解都扫描-->
    <context:component-scan base-package="com.jpx" use-default-filters="true">
        <!--下面这个注解的意思是:除了Controller注解的类,所有的注解都扫描,刚好和mvc相反-->
        <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
    </context:component-scan>

    <!--引入一个事务管理器,其中依赖DataSource借以获得连接,进而控制事务逻辑-->
    <bean id="tx" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource"></property>
    </bean>

    <!--配置@Transactional-->
    <tx:annotation-driven transaction-manager="tx"/>
</beans>
用到的数据库配置文件:jdbc.properties
jdbc.driverClass=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/数据库名?serverTimezone=UTC
jdbc.username=root
jdbc.password=root
jdbc.init=1
jdbc.minIdle=1
jdbc.maxActive=3
配置web.xml:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xmlns="http://java.sun.com/xml/ns/javaee"
         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
	     http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
         id="WebApp_ID" version="3.0">
    <display-name>Archetype Created Web Application</display-name>

    <!--spring-mvc前端核心控制器
          作用:①接收所有前端请求
               ②启动SpringMVC工厂(mvc.xml)
               ③负责整个SpringMVC的流程调度
      -->
    <servlet>
        <servlet-name>spring-mvc</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <!--初始化参数-->
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:mvc.xml</param-value>
        </init-param>
        <!--可选操作。servlet默认是懒加载,添加完load-on-startup就成为了饿汉式加载-->
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>spring-mvc</servlet-name>
        <!-- 这种方法可以解决静态资源无法访问的问题,但是访问其他资源时需要加上.后缀,过于麻烦-->
        <!--<url-pattern>*.action</url-pattern>-->
        <url-pattern>/</url-pattern>
    </servlet-mapping>

    <!--用于防止出现中文乱码的过滤器-->
    <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>forceEncoding</param-name>
            <param-value>true</param-value>
        </init-param>
    </filter>

    <filter-mapping>
        <filter-name>CharacterEncodingFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
*/
    <!--启动Spring工厂-->
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:applicationContext.xml</param-value>
    </context-param>
</web-app>
实体类User,类中字段名称最好和数据表中属性同名,便于操作
package com.jpx.entity;

import java.util.Date;

public class User {

    private Integer id;
    private String username;
    private String password;
    private int gender;
    private Date regist_time;

    public User() {
    }

    public User(Integer id, String username, String password, int gender, Date regist_time) {
        this.id = id;
        this.username = username;
        this.password = password;
        this.gender = gender;
        this.regist_time = regist_time;
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public int getGender() {
        return gender;
    }

    public void setGender(int gender) {
        this.gender = gender;
    }

    public Date getRegist_time() {
        return regist_time;
    }

    public void setRegist_time(Date regist_time) {
        this.regist_time = regist_time;
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", username='" + username + '\'' +
                ", password='" + password + '\'' +
                ", gender=" + gender +
                ", regist_time=" + regist_time +
                '}';
    }
}


UserDao,定义相关操作
package com.jpx.dao;

import com.jpx.entity.User;

import java.util.List;

public interface UserDao {
    List<User> queryUsers();
}

UserDao映射文件UserDaoMapper
<?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.jpx.dao.UserDao">
    <select id="queryUsers" resultType="User">
        select id,username,password,gender,regist_time
        from t_user
    </select>
</mapper>
编写UserService
package com.jpx.service;

import com.jpx.entity.User;

import java.util.List;

public interface UserService {
    List<User> queryUsers();
}

编写UserService实现类UserServiceImpl
package com.jpx.service.impl;

import com.github.pagehelper.PageHelper;
import com.jpx.dao.UserDao;
import com.jpx.entity.User;
import com.jpx.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

@Service
public class UserServiceImpl implements UserService {
    @Autowired
    private UserDao userDao;

    @Override
    //将事务控制放在此方法上,此事务控制仅对这个方法有效
    @Transactional(propagation = Propagation.SUPPORTS)
    public List<User> queryUsers() {
        List<User> users = userDao.queryUsers();
        return users;
    }
}

后端控制器UserController
package com.jpx.controller;

import com.jpx.entity.User;
import com.jpx.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;

import java.util.List;

@Controller
public class UserController {
    @Autowired
    @Qualifier("userServiceImpl")
    //这属于跨工厂注入,之所以可以这样做是因为
    // SpringMVC工厂是Spring的子工厂,所以子工厂可以随意使用父工厂的所有对象
    private UserService userService;

    @GetMapping("/users")
    public String queryUsers(Model model) {
        List<User> users = userService.queryUsers();
        model.addAttribute("users", users);
        return "user";
    }
}

用于显示查询结果的jsp页面,user.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %><%--该标签用于格式化--%>
<html>
<head>
    <title>用户列表</title>
</head>
<body>
<table width="500px" align="center" border="1px">
    <thead>
    <tr>
        <th>id</th>
        <th>username</th>
        <th>password</th>
        <th>gender</th>
        <th>registerTime</th>
    </tr>
    </thead>
    <tbody>
    <c:forEach items="${requestScope.users}" var="user">
        <tr>
            <td>${user.id}</td>
            <td>${user.username}</td>
            <td>${user.password}</td>
            <td>${user.gender}</td>
            <td><fmt:formatDate value="${user.regist_time}" pattern="yyyy-MM-dd"/></td>
        </tr>
    </c:forEach>
    </tbody>
</table>
</body>
</html>

到这里一个完整的SSM框架就搭建完成了
在这里插入图片描述

剩余一些小问题,如上图所示项目结构,其中UserDao的映射文件UserDaoMappe.xml没有放在resource资源目录中,这就需要我们在pom.xml文件中加入一些配置,如下所示:

	<build>
        <resources>
            <resource>
                <!--资源目录-->
                <directory>src/main/java</directory>
                <includes>
                    <include>*.xml</include><!--默认,新添加自定义则失效-->
                    <include>**/*.xml</include><!--新添加,*/代表一级目录**/代表多级目录-->
                </includes>
                <filtering>true</filtering>
            </resource>
        </resources>
    </build>

end…

标签:框架,springframework,SSM,org,import,password,com,public,搭建
来源: https://blog.csdn.net/qq_42190335/article/details/112830075

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有