spring

Spring

一、spring简介

spring框架
    简介spring是一个开源的设计层框架,它的提出主要是用来解决业务逻辑层和其它层的解耦的作用。
    它是将面向接口的编程思想贯穿整个系统。spring是2003年兴起的一个轻量级Java开发框架。
    spring是一个分层的javase/ee  full-stack(一站式)轻量级开源框架。
spring框架作用:
    在项目主要是用来管理所有的对象,之前创建对象new xxx 在使用spring之后就不需要我们手动创建对象,对象
    的创建全部交由spring来进行处理。
spring核心思想:
    AOP:面向切面编程
        可以通过预编译的方式和运行期动态代理来实现不需要修改源代码的情况下给程序统一添加新的功能的技术。
    IOC:反转控制|控制反转
        以后创建对象不需要我们手动,全部对象的创建被spring反转了,由spring来替我们创建对象。
    ---DI:依赖注入
        IOC的实现需要DI来进行技术实现。

二、spring的使用

1、使用步骤

(1)再pom文件中导入相关依赖

<dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-core</artifactId>
      <version>4.3.14.RELEASE</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-beans</artifactId>
      <version>4.3.14.RELEASE</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-web</artifactId>
      <version>4.3.14.RELEASE</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-expression</artifactId>
      <version>4.3.14.RELEASE</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-aop</artifactId>
      <version>4.3.14.RELEASE</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context</artifactId>
      <version>4.3.14.RELEASE</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context-support</artifactId>
      <version>4.3.14.RELEASE</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-aspects</artifactId>
      <version>4.3.14.RELEASE</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-jdbc</artifactId>
      <version>4.3.14.RELEASE</version>
    </dependency>

(2)在resources文件中创建applicationContext.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:p="http://www.springframework.org/schema/p"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans-4.3.xsd
       http://www.springframework.org/schema/aop
       http://www.springframework.org/schema/aop/spring-aop-4.3.xsd
       http://www.springframework.org/schema/context
       http://www.springframework.org/schema/context/spring-context-4.3.xsd ">

</beans>

(3)创建实体类

public class User {
	。。。
}

(4)在applicationContext.xml中配置bean

<!--
name:自定义名称,用于找到此bean
class:对应实体类
-->
<bean name="user1" class="com.ahd.a.User"></bean>

(5)编写测试类

public class TestUser {
    public static void main(String[] args) {
        //通常情况下使用new来实例化对象
        User user = new User();
        System.out.println(user);
        
        //通过spring来实例化对象
        ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
        User user1 = (User) ac.getBean("user1");
        System.out.println(user1);
}

2、bean标签

(1)基本属性

​ id:给注入的对象起一个名字保正唯一性
​ name:给注入对象起一个变量名(见名知意)
​ class:对象的全限定名
​ scope:决定对象的生命周期
​ singleton:spring容器只创建一次对象
​ prototype:对象在使用的时候创建,创建完成之后对象的声明周期不在由spring管理了,每次都会创建新对象
​ init-method 初始化的方法 实体类创建对象的时候会自动执行
​ destroy-method 销毁的方法 当调用close()方法时会执行销毁方法

(2)值注入方式
  • set注入方式
<!--    set注入方式-->
    <bean name="user" class="com.ahd.a.User">
        <!--
        name:实体类中的属性名
        value:具体赋值的内容
        -->
        <property name="id" value="111"></property>
        <property name="name" value="张三"></property>
        <property name="age" value="18"></property>
    </bean>
  • 构造方法注入
    <bean name="user2" class="com.ahd.a.User">
<!--    index属性:是实体类构造方法中属性位置的索引,从0开始
        name:实体类中属性名
        type:数据类型
-->
        <constructor-arg index="0" name="id" value="222" type="java.lang.Integer"></constructor-arg>
        <constructor-arg index="1" name="name" value="lisi" type="java.lang.String"></constructor-arg>
        <constructor-arg index="2" name="age" value="20" type="java.lang.Integer"></constructor-arg>
    </bean>


    <!--
    实体类(User)中的属性有其他类(Customer)
    可以先使用set方式为其他类赋值,再使用ref标签引用
    -->
    <bean name="customer" class="com.ahd.a.Customer">
        <property name="id" value="444"></property>
        <property name="name" value="wanwu"></property>
    </bean>
    <bean name="user3" class="com.ahd.a.User">
        <constructor-arg index="0" name="id" value="222" type="java.lang.Integer"></constructor-arg>
        <constructor-arg index="1" name="name" value="lisi" type="java.lang.String"></constructor-arg>
        <constructor-arg index="2" name="age" value="20" type="java.lang.Integer"></constructor-arg>
        <constructor-arg index="3" ref="customer"></constructor-arg>
    </bean>
  • p名称命名方式
<bean name="user" class="com.ahd.a.Customer" p:id="11" p:name="lisi"></bean>
  • spel表达式注入
 <bean name="user1" class="com.ahd.a.User">
        <property name="id" value="111"></property>
        <property name="name" value="张三"></property>
        <property name="age" value="18"></property>
    </bean>
    <!--spel表达式方式注入-->
    <bean name="user2" class="com.ahd.a.User">
        <property name="id" value="#{user1.id}"></property>
        <property name="name" value="#{user1.name}"></property>
        <property name="age" value="#{user1.age}"></property>
    </bean>
  • 数组注入方式
<!--    复杂类型,数组注入方式-->
<!--    如果数组中要存放的数据只有一个那么还是采用set方式注入-->
    <bean name="arrEntity" class="com.ahd.a.ArrEntity">
        <property name="arrStr" value="lisi"></property>
    </bean>
<!--    存放多个数据-->
    <bean name="arrEntity2" class="com.ahd.a.ArrEntity">
        <property name="arrStr"><!--为哪个数组赋值-->
            <array><!--使用array标签对多个属性赋值-->
                <value>aaa</value>
                <value>bbb</value>
                <value>ccc</value>
                <value>ddd</value>
            </array>
        </property>
    </bean>
  • 数组中保存其他对象
<!--    数组中保存其他对象-->
    <bean name="customer1" class="com.ahd.a.Customer">
        <property name="id" value="44"></property>
        <property name="name" value="eee"></property>
    </bean>
    <bean name="customer2" class="com.ahd.a.Customer">
        <property name="id" value="55"></property>
        <property name="name" value="rrr"></property>
    </bean>
    <bean name="arrEntity3" class="com.ahd.a.ArrEntity">
        <property name="cusArr">
            <array><!--使用array标签对多个属性赋值-->
                <!--bean指定对象实体类的对象名-->
                <ref bean="customer1"></ref>
                <ref bean="customer2"></ref>
            </array>
        </property>
    </bean>
  • list注入
<!--    如果数list要存放的数据只有一个-->
    <bean name="listEntity1" class="com.a.ListEntity">
        <property name="list" value="张三"></property>
    </bean>
    <!--    如果数list要存放的数据有多个-->
    <bean name="listEntity2" class="com.a.ListEntity">
        <property name="list">
            <list>
                <value>list1</value>
                <value>list2</value>
                <value>list3</value>
                <value>list4</value>
                <value>list5</value>
            </list>
        </property>
    </bean>
    <!--    如果数list要存放的数据有多个且为其他对象 先注入 然后↓-->
    <bean name="listEntity3" class="com.a.ListEntity">
        <property name="customers">
            <list>
                <ref bean="cumtomer1"></ref>
                <ref bean="cumtomer2"></ref>
                <ref bean="cumtomer3"></ref>
            </list>
        </property>
    </bean>
  • map注入
 <!--复杂类型 map注入-->
 <!-- 
	key-ref:key可以以引用其它对象
    value-ref: value 以引用其它对象
-->
    <bean name="map1" class="com.a.MapEntity">
        <property name="map">
            <map>
                <entry key="key1" value="value1"></entry>
                <entry key="key2" value="value2"></entry>
                <entry key="key3" value="value3"></entry>
                <entry key="key4" value="value4"></entry>

            </map>
        </property>
    </bean>

3、注解

(1)注解扫描
<context:component-scan base-package="com.ahd"></context:component-scan>
(2)分层的注解
@Component (实体类一般用Component)
他可以标注java分层的三层架构  <bean name="userController" class=com.anno.controller.UserController">
都使用components会自动识别Controller Dao和Service 注解自动识别类名首字母小写当name
    @Controller 标注web层
    @Service    标注service层
    @Repository 标注dao层

@Scope bean 生命周期
singleton:只创建一次
prototype:创建多次

@PostConstruct 初始化注解
@PreDestroy 销毁注解

@Value  属性赋值
    可以直接在属性上加
        @Value("111")
        private String id;
    也可以在set方法上加
        @Value("112")
        public void setId(String id) {
            this.id = id;
        }
对象注入
@AutoWired 自动装配
    @Autowired
    private User user;

三、SpringMVC

1、简介

(1)mvc:
model :模型
view :视图
controller: 控制器
(2)springmvc是spring c层提供的一个框架它的核心是DispatcherServlet,它的主要作用就是将请求分发给不同的后端处理器。 主要是由处理器映射器、处理器适配器、视图解析器这三个主要处理器来进行共同完成c层的工作。
springmvc其实主要是将业务逻辑处理完的数据结果和要返回的响应视图封装成一个对象这个对象是ModelAndView,最终展示给用户。

2、mvc配置

(1)导入包
 <dependencies>
    <!-- https://mvnrepository.com/artifact/org.springframework/spring-jms -->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-jms</artifactId>
      <version>4.3.14.RELEASE</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.springframework/spring-messaging -->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-messaging</artifactId>
      <version>4.3.14.RELEASE</version>
    </dependency>

    <!-- https://mvnrepository.com/artifact/commons-logging/commons-logging -->
    <dependency>
      <groupId>commons-logging</groupId>
      <artifactId>commons-logging</artifactId>
      <version>1.2</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc -->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-webmvc</artifactId>
      <version>4.3.14.RELEASE</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.springframework/spring-web -->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-web</artifactId>
      <version>4.3.14.RELEASE</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-expression</artifactId>
      <version>4.3.14.RELEASE</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-core</artifactId>
      <version>4.3.14.RELEASE</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context</artifactId>
      <version>4.3.14.RELEASE</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-beans</artifactId>
      <version>4.3.14.RELEASE</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.springframework/spring-jdbc -->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-jdbc</artifactId>
      <version>4.3.14.RELEASE</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-aop</artifactId>
      <version>4.3.14.RELEASE</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.springframework/spring-aspects -->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-aspects</artifactId>
      <version>4.3.14.RELEASE</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.springframework/spring-tx -->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-tx</artifactId>
      <version>4.3.14.RELEASE</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
    <dependency>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis</artifactId>
      <version>3.4.5</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis-spring -->
    <dependency>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis-spring</artifactId>
      <version>1.3.2</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/commons-io/commons-io -->
    <dependency>
      <groupId>commons-io</groupId>
      <artifactId>commons-io</artifactId>
      <version>2.4</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/commons-fileupload/commons-fileupload -->
    <dependency>
      <groupId>commons-fileupload</groupId>
      <artifactId>commons-fileupload</artifactId>
      <version>1.2.2</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind -->
    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-databind</artifactId>
      <version>2.9.5</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-core -->
    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-core</artifactId>
      <version>2.9.5</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-annotations -->
    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-annotations</artifactId>
      <version>2.9.5</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/com.mchange/c3p0 -->
    <dependency>
      <groupId>com.mchange</groupId>
      <artifactId>c3p0</artifactId>
      <version>0.9.5.2</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/javax.servlet/jstl -->
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>jstl</artifactId>
      <version>1.2</version>
    </dependency>

    <!-- https://mvnrepository.com/artifact/junit/junit -->
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.12</version>
      <scope>test</scope>
    </dependency>
    <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>5.1.38</version>
    </dependency>

    <!-- https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-core -->
    <dependency>
      <groupId>org.apache.logging.log4j</groupId>
      <artifactId>log4j-core</artifactId>
      <version>2.7</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-api -->
    <dependency>
      <groupId>org.apache.logging.log4j</groupId>
      <artifactId>log4j-api</artifactId>
      <version>2.7</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/log4j/log4j -->
    <dependency>
      <groupId>log4j</groupId>
      <artifactId>log4j</artifactId>
      <version>1.2.17</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/aopalliance/aopalliance -->
    <dependency>
      <groupId>aopalliance</groupId>
      <artifactId>aopalliance</artifactId>
      <version>1.0</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.aspectj/aspectjweaver -->
    <dependency>
      <groupId>org.aspectj</groupId>
      <artifactId>aspectjweaver</artifactId>
      <version>1.8.10</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/cglib/cglib -->
    <dependency>
      <groupId>cglib</groupId>
      <artifactId>cglib</artifactId>
      <version>3.2.5</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-api -->
    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-api</artifactId>
      <version>1.7.25</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-log4j12 -->
    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-log4j12</artifactId>
      <version>1.7.25</version>
      <scope>test</scope>
    </dependency>
    <!-- https://mvnrepository.com/artifact/ognl/ognl -->
    <dependency>
      <groupId>ognl</groupId>
      <artifactId>ognl</artifactId>
      <version>3.1.15</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.apache.ant/ant -->
    <dependency>
      <groupId>org.apache.ant</groupId>
      <artifactId>ant</artifactId>
      <version>1.9.6</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.apache.ant/ant-launcher -->
    <dependency>
      <groupId>org.apache.ant</groupId>
      <artifactId>ant-launcher</artifactId>
      <version>1.9.6</version>
    </dependency>

    <!-- 配置serlvet-api -->
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>javax.servlet-api</artifactId>
      <version>3.1.0</version>
      <scope>provided</scope>
    </dependency>

    <!-- https://mvnrepository.com/artifact/taglibs/standard -->
    <dependency>
      <groupId>taglibs</groupId>
      <artifactId>standard</artifactId>
      <version>1.1.2</version>
    </dependency>
  </dependencies>
(2)配置web.xml
 <servlet>
    <servlet-name>springmvc</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>classpath:spring.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>springmvc</servlet-name>
    <url-pattern>*.do</url-pattern>
  </servlet-mapping>
(3)配置springmvc.xml
     <!--配置包扫描-->
    <context:component-scan base-package="com.ahd"></context:component-scan>
     <!-- 配置适配器-->
    <mvc:annotation-driven />
     <!--配置视图解析器-->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/jsp"></property>
        <property name="suffix" value=".jsp"></property>
    </bean>

3、参数接收

    //接收方式1:属性接收 适用 3~5个属性
    @RequestMapping("/getParam1")
    public ModelAndView getParam1(String username,String password,String sex) throws Exception{
        System.out.println(username+" "+password+" "+sex);
        ModelAndView mv = new ModelAndView();
        mv.setViewName("index");
        return mv;
    }

    //接收方式2:对象接收
    @RequestMapping("/getParam2")
    public String getParam2(User user) throws Exception{
        System.out.println(user.getUsername()+" "+user.getPassword()+" "+user.getSex());
        return "index";
    }

    //接收方式3:原生HttpServletRequest接收
    @RequestMapping("/getParam3")
    public String getParam3(HttpServletRequest request) throws Exception{
        String username = request.getParameter("username");
        String password = request.getParameter("password");
        String sex = request.getParameter("sex");
        System.out.println(username+" "+password+" "+sex);
        return "index";
    }

4、请求转发、重定向

    //请求转发:forward:请求路径
        return "forward:/index.do";
    //重定向:redirect:重定向路径
        return "redirect:/index.do";

5、json格式数据

    导包 jackson-annotaions
    接收前台传过来的json格式数据使用@RequestBody
    将后台处理完的数据以json格式的数据返回 @ResponseBody

四、ssm整合

1、整合思路

ssm(spring springmvc mybatis)整合思路:
    1、导包 (spring核心包+aop包+事务包+整合Junit包+web包+webmvc包+日志包+mybatis+spring整合mybatis包)
    2、配置web.xml (加载spring核心配置文件+springmvc核心配置文件+编码过滤器)
    3、创建spring核心配置文件applicationContext.xml
        加载数据源
        配置连接池
        配置aop事务
        扫描包
    4、创建springmvc核心配置文件springmvc.xml
        扫描controller层
        配置注解驱动
        配置视图解析器
        配置放行静态资源
     5、测试启动

2、整合步骤

(1)导包
 <dependencies>
    <!-- https://mvnrepository.com/artifact/org.springframework/spring-jms -->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-jms</artifactId>
      <version>4.3.14.RELEASE</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.springframework/spring-messaging -->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-messaging</artifactId>
      <version>4.3.14.RELEASE</version>
    </dependency>

    <!-- https://mvnrepository.com/artifact/commons-logging/commons-logging -->
    <dependency>
      <groupId>commons-logging</groupId>
      <artifactId>commons-logging</artifactId>
      <version>1.2</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc -->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-webmvc</artifactId>
      <version>4.3.14.RELEASE</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.springframework/spring-web -->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-web</artifactId>
      <version>4.3.14.RELEASE</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-expression</artifactId>
      <version>4.3.14.RELEASE</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-core</artifactId>
      <version>4.3.14.RELEASE</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context</artifactId>
      <version>4.3.14.RELEASE</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-beans</artifactId>
      <version>4.3.14.RELEASE</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.springframework/spring-jdbc -->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-jdbc</artifactId>
      <version>4.3.14.RELEASE</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-aop</artifactId>
      <version>4.3.14.RELEASE</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.springframework/spring-aspects -->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-aspects</artifactId>
      <version>4.3.14.RELEASE</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.springframework/spring-tx -->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-tx</artifactId>
      <version>4.3.14.RELEASE</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
    <dependency>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis</artifactId>
      <version>3.4.5</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis-spring -->
    <dependency>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis-spring</artifactId>
      <version>1.3.2</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/commons-io/commons-io -->
    <dependency>
      <groupId>commons-io</groupId>
      <artifactId>commons-io</artifactId>
      <version>2.4</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/commons-fileupload/commons-fileupload -->
    <dependency>
      <groupId>commons-fileupload</groupId>
      <artifactId>commons-fileupload</artifactId>
      <version>1.2.2</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind -->
    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-databind</artifactId>
      <version>2.9.5</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-core -->
    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-core</artifactId>
      <version>2.9.5</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-annotations -->
    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-annotations</artifactId>
      <version>2.9.5</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/com.mchange/c3p0 -->
    <dependency>
      <groupId>com.mchange</groupId>
      <artifactId>c3p0</artifactId>
      <version>0.9.5.2</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/javax.servlet/jstl -->
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>jstl</artifactId>
      <version>1.2</version>
    </dependency>

    <!-- https://mvnrepository.com/artifact/junit/junit -->
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.12</version>
      <scope>test</scope>
    </dependency>
    <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>5.1.38</version>
    </dependency>

    <!-- https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-core -->
    <dependency>
      <groupId>org.apache.logging.log4j</groupId>
      <artifactId>log4j-core</artifactId>
      <version>2.7</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-api -->
    <dependency>
      <groupId>org.apache.logging.log4j</groupId>
      <artifactId>log4j-api</artifactId>
      <version>2.7</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/log4j/log4j -->
    <dependency>
      <groupId>log4j</groupId>
      <artifactId>log4j</artifactId>
      <version>1.2.17</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/aopalliance/aopalliance -->
    <dependency>
      <groupId>aopalliance</groupId>
      <artifactId>aopalliance</artifactId>
      <version>1.0</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.aspectj/aspectjweaver -->
    <dependency>
      <groupId>org.aspectj</groupId>
      <artifactId>aspectjweaver</artifactId>
      <version>1.8.10</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/cglib/cglib -->
    <dependency>
      <groupId>cglib</groupId>
      <artifactId>cglib</artifactId>
      <version>3.2.5</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-api -->
    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-api</artifactId>
      <version>1.7.25</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-log4j12 -->
    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-log4j12</artifactId>
      <version>1.7.25</version>
      <scope>test</scope>
    </dependency>
    <!-- https://mvnrepository.com/artifact/ognl/ognl -->
    <dependency>
      <groupId>ognl</groupId>
      <artifactId>ognl</artifactId>
      <version>3.1.15</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.apache.ant/ant -->
    <dependency>
      <groupId>org.apache.ant</groupId>
      <artifactId>ant</artifactId>
      <version>1.9.6</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.apache.ant/ant-launcher -->
    <dependency>
      <groupId>org.apache.ant</groupId>
      <artifactId>ant-launcher</artifactId>
      <version>1.9.6</version>
    </dependency>

    <!-- 配置serlvet-api -->
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>javax.servlet-api</artifactId>
      <version>3.1.0</version>
      <scope>provided</scope>
    </dependency>

    <!-- https://mvnrepository.com/artifact/taglibs/standard -->
    <dependency>
      <groupId>taglibs</groupId>
      <artifactId>standard</artifactId>
      <version>1.1.2</version>
    </dependency>
  </dependencies>
(2)配置web.xml
<!DOCTYPE web-app PUBLIC
 "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
 "http://java.sun.com/dtd/web-app_2_3.dtd" >

<web-app>
  <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:applicationContext.xml</param-value>
  </context-param>
  <!-- 字符编码过滤器 -->
  <filter>
    <filter-name>encoding</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>
  </filter>
  <filter-mapping>
    <filter-name>encoding</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>
  <!--配置spring监听器-->
  <listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  </listener>


  <!--在web.xml中配置核心控制器-->
  <servlet>
    <servlet-name>springmvc</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>springmvc</servlet-name>
    <!--一般会设置成过滤所有请求-->
    <url-pattern>/</url-pattern>
  </servlet-mapping>
</web-app>

(3)配置applicationContext.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:p="http://www.springframework.org/schema/p"
       xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
       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-4.0.xsd
	http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd
	http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd
	http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.0.xsd">
    <!-- 引入外部资源配置文件 -->
    <context:property-placeholder location="classpath:db.properties"/>
    <!-- 配置数据源 -->
    <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
        <property name="driverClass" value="${jdbc.driver}"></property>
        <property name="jdbcUrl" value="${jdbc.url}"></property>
        <property name="user" value="${jdbc.username}"></property>
        <property name="password" value="${jdbc.password}"></property>
    </bean>
    <!-- 配置sqlSessionFactory -->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <!-- <property name="configLocation" value="classpath:mybatis.xml"></property> -->
        <property name="dataSource" ref="dataSource"></property>
    </bean>
    <!-- 配置mapper包扫描 -->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <property name="basePackage" value="com.ahd.mapper"></property>
    </bean>
    <!-- 配置事务 -->
    <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="save*" propagation="REQUIRED" />
            <tx:method name="insert*" propagation="REQUIRED" />
            <tx:method name="update*" propagation="REQUIRED" />
            <tx:method name="delete*" propagation="REQUIRED" />
            <tx:method name="select*" propagation="REQUIRED" read-only="true" />
            <tx:method name="find*" propagation="SUPPORTS" read-only="true" />
            <tx:method name="get*" propagation="SUPPORTS" read-only="true" />
        </tx:attributes>
    </tx:advice>
    <!-- 配置切面  = 切点+通知 -->
    <aop:config>
        <aop:advisor advice-ref="txAdvice"
                     pointcut="execution(* com.ahd.service.*.*(..))" />
    </aop:config>
    <!-- 配置service包扫描 -->
    <context:component-scan base-package="com.ahd.service"></context:component-scan>
</beans>
(4)配置springmvc.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns="http://www.springframework.org/schema/beans" xmlns:p="http://www.springframework.org/schema/p"
       xmlns:aop="http://www.springframework.org/schema/aop" xmlns:context="http://www.springframework.org/schema/context"
       xmlns:tx="http://www.springframework.org/schema/tx" xmlns:mvc="http://www.springframework.org/schema/mvc"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.2.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.1.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.1.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.2.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.3.xsd ">

    <!-- 开启注解扫描 -->
    <context:component-scan base-package="com.ahd.controller"></context:component-scan>

    <!-- 配置注解驱动 -->
    <mvc:annotation-driven />

    <!-- 视图解析器 -->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/jsp/"></property>
        <property name="suffix" value=".jsp"></property>
    </bean>

    <!--放行静态资源-->
    <mvc:resources location="/img/" mapping="/img/**"/>
    <mvc:resources location="/css/" mapping="/css/**"/>
    <mvc:resources location="/js/" mapping="/js/**"/>

</beans>
(4)测试启动
  • controller层(UserController)
package com.ahd.controller;

import com.ahd.entity.User;
import com.ahd.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

@Controller
public class UserController {

    @Autowired
    private UserService userService;

    /**跳转到增加页面*/
    @RequestMapping(value = "/save")
    public String save() throws Exception{
        return "save";
    }
    /**跳转到删除页面*/
    @RequestMapping(value = "/delete")
    public String delete() throws Exception{
        return "delete";
    }
    /**跳转到更新页面*/
    @RequestMapping(value = "/update")
    public String update() throws Exception{
        return "update";
    }
    /**增加用户*/
    @RequestMapping(value = "saveUser")
    public String saveUser(User user)throws Exception{
        Integer flag = userService.saveUser(user);
        if(flag != null){
            return "success";
        }else {
            return "save";
        }
    }
    /**查询所有用户*/
    @RequestMapping(value = "findUserAll")
    public ModelAndView findUserAll() throws Exception{
        ModelAndView mv = new ModelAndView();
        mv.setViewName("find");
        mv.addObject("list", userService.findUserAll());
        return mv;
    }
    /**根据id删除用户用户*/
    @RequestMapping(value = "/deleteUser")
    public String deleteUser(Integer id) throws Exception{
        Integer flag = userService.deleteUser(id);
        if(flag != null){
            return "success";
        }else {
            return "delete";
        }
    }
    /**更新用户信息*/
    @RequestMapping(value = "/updateUser")
    public String updateUser(User user)throws Exception{
        Integer flag = userService.updateUser(user);
        if(flag != null){
            return "success";
        }else {
            return "update";
        }
    }
}

  • entity实体类(User)
package com.ahd.entity;

public class User {
    /**id*/
    private String id;
    /**用户名*/
    private String username;
    /**密码*/
    private String password;

    public User() {
    }

    public User(String id, String username, String password) {
        this.id = id;
        this.username = username;
        this.password = password;
    }

    public String getId() {
        return id;
    }

    public void setId(String 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;
    }

    @Override
    public String toString() {
        return "User{" +
                "id='" + id + '\'' +
                ", username='" + username + '\'' +
                ", password='" + password + '\'' +
                '}';
    }
}
  • mapper层(UserMapper)
package com.ahd.mapper;

import com.ahd.entity.User;
import org.apache.ibatis.annotations.Mapper;

import java.util.List;

@Mapper
public interface UserMapper {
    /**保存用户*/
    Integer saveUser(User user);
    /**查询所有用户信息*/
    List<User> findUserAll();
    /**根据id删除用户*/
    Integer deleteUser(Integer id);
    /**修改用户信息*/
    Integer updateUser(User user);
}

<?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.ahd.mapper.UserMapper">
    <insert id="saveUser" parameterType="com.ahd.entity.User">
      INSERT INTO `user`(username,password) VALUES(#{username},#{password})
    </insert>

    <select id="findUserAll" resultType="com.ahd.entity.User">
        SELECT * FROM `user`
    </select>

    <delete id="deleteUser" parameterType="java.lang.Integer">
        DELETE FROM `user` WHERE id = #{id}
    </delete>

    <update id="updateUser" parameterType="com.ahd.entity.User">
        UPDATE `user` SET username = #{username},password = #{password} WHERE id = #{id}
    </update>
</mapper>
  • service层(User Service)
package com.ahd.service;

import com.ahd.entity.User;

import java.util.List;

public interface UserService {
    /**保存用户*/
    Integer saveUser(User user);
    /**查询所有用户*/
    List<User> findUserAll();
    /**根据id删除用户*/
    Integer deleteUser(Integer id);
    /**修改用户信息*/
    Integer updateUser(User user);
}

package com.ahd.service.impl;

import com.ahd.entity.User;
import com.ahd.mapper.UserMapper;
import com.ahd.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class UserServiceImpl implements UserService {
    @Autowired
    private UserMapper userMapper;

    @Override
    public Integer saveUser(User user) {
        return userMapper.saveUser(user);
    }

    @Override
    public List<User> findUserAll() {
        return userMapper.findUserAll();
    }

    @Override
    public Integer deleteUser(Integer id) {
        return userMapper.deleteUser(id);
    }

    @Override
    public Integer updateUser(User user) {
        return userMapper.updateUser(user);
    }

}
posted @ 2020-08-27 14:27  Foreverless  阅读(192)  评论(0)    收藏  举报