Spring+SpringMVC+MyBatis整合

241 阅读14分钟

Spring+SpringMVC+MyBatis(SSM)在我们项目中是经常用到的,这篇文章主要讲解使用Intellij IDEA整合SSM,具体环境如下:

数据库:MySQL5.7 依赖管理:Maven IDE:Intellij IDEA JDK:1.8 服务器:Tomcat 9 首先用Intellij IDEA创建Maven项目,如果还不知道怎么创建的朋友可以先去百度谷歌,网上很多这种教程,这里我主要讲解SSM整合的过程,项目目录结构如下: 这里写图片描述

1.创建表,插入数据 CREATE TABLE user ( id INTEGER PRIMARY KEY AUTO_INCREMENT, name CHAR(20) NOT NULL, password CHAR(40) NOT NULL ) ENGINE = InnoDB AUTO_INCREMENT = 16 DEFAULT CHARSET = utf8; 1 2 3 4 5 6 7 8 INSERT INTO user (id,name, password) VALUES (1,'A', '123'); INSERT INTO user (id,name, password) VALUES (2,'B', '456'); 1 2 2.添加Maven依赖

4.0.0

<groupId>com.demo</groupId>
<artifactId>SSM</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>war</packaging>
<name>SSM</name>
<description/>

<properties>
    <spring.version>4.3.4.RELEASE</spring.version>
    <mybatis.version>3.4.2</mybatis.version>
    <log4j.version>2.7</log4j.version>
    <junit.version>4.12</junit.version>
    <driver.version>5.1.40</driver.version>
</properties>

<dependencies>
    <!--Spring start-->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-core</artifactId>
        <version>${spring.version}</version>
    </dependency>

    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>${spring.version}</version>
    </dependency>

    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-web</artifactId>
        <version>${spring.version}</version>
    </dependency>

    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-webmvc</artifactId>
        <version>${spring.version}</version>
    </dependency>

    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-jdbc</artifactId>
        <version>${spring.version}</version>
    </dependency>

    <!--绑定XML-->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-oxm</artifactId>
        <version>${spring.version}</version>
    </dependency>

    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-test</artifactId>
        <version>${spring.version}</version>
    </dependency>

    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context-support</artifactId>
        <version>${spring.version}</version>
    </dependency>

    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-aspects</artifactId>
        <version>${spring.version}</version>
    </dependency>
    <!--Spring end-->

    <!--AOP start-->
    <dependency>
        <groupId>aopalliance</groupId>
        <artifactId>aopalliance</artifactId>
        <version>1.0</version>
    </dependency>

    <dependency>
        <groupId>org.aspectj</groupId>
        <artifactId>aspectjweaver</artifactId>
        <version>1.8.10</version>
    </dependency>
    <!--AOP end-->

    <!--文件上传start-->
    <dependency>
        <groupId>commons-fileupload</groupId>
        <artifactId>commons-fileupload</artifactId>
        <version>1.3.2</version>
    </dependency>
    <!--文件上传end-->

    <!--json start-->
    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-core</artifactId>
        <version>2.8.4</version>
    </dependency>

    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-databind</artifactId>
        <version>2.8.4</version>
    </dependency>
    <!--json end-->

    <!--mybatis start-->
    <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis</artifactId>
        <version>3.4.2</version>
    </dependency>

    <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis-spring</artifactId>
        <version>1.3.1</version>
    </dependency>
    <!--mybatis end-->

    <!--log start-->
    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-core</artifactId>
        <version>${log4j.version}</version>
    </dependency>
    <!--log end-->

    <!--单元测试start-->
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>${junit.version}</version>
    </dependency>
    <!--单元测试end-->

    <!--数据库驱动start-->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>5.1.40</version>
    </dependency>
    <!--数据库驱动end-->

    <!--druid start-->
    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>druid</artifactId>
        <version>1.0.29</version>
    </dependency>
    <!--druid end-->
</dependencies>

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.6.1</version>
            <configuration>
                <source>1.8</source>
                <target>1.8</target>
            </configuration>
        </plugin>

        <!--MBG-->
        <plugin>
            <groupId>org.mybatis.generator</groupId>
            <artifactId>mybatis-generator-maven-plugin</artifactId>
            <version>1.3.5</version>
            <configuration>
                <verbose>true</verbose>
                <overwrite>true</overwrite>
            </configuration>
        </plugin>
    </plugins>
</build>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 代码都加了注释,很容易看懂。需要说一下的是MBG,全称是MyBatis Generator,是一个生成MyBatis代码的插件,后面会用到。具体可以看看 MyBatis Generator官方文档

3.配置文件 3.1 Mybatis配置文件mybatis-config.xml

1 2 3 4 5 6 7 3.2 数据库配置文件database.properties db.driver=com.mysql.jdbc.Driver db.url=jdbc:mysql://localhost:3306/mybatis?characterEncoding=UTF-8 db.user=root db.password=123456 db.maxActive=10 db.initialSize=2 db.minIdle=2 db.maxWait=60000 db.timeBetweenEvictionRunsMillis=3000 db.minEvictableIdleTimeMillis=300000 db.validationQuery=SELECT 'x' FROM DUAL db.testWhileIdle=true db.testOnBorrow=false db.testOnReturn=false 1 2 3 4 5 6 7 8 9 10 11 12 13 14 3.3 Spring配置文件application.xml
<import resource="classpath:spring/spring-mybatis.xml"/>
1 2 3 4 5 6 7 8 9 这里为了方便项目扩展,用import标签引入另一个配置文件spring-mybatis.xml

<context:property-placeholder location="classpath:properties/database.properties"/>

<!--数据源配置-->
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close">
    <!--驱动-->
    <property name="driverClassName" value="${db.driver}"/>
    <!-- 数据库地址 -->
    <property name="url" value="${db.url}"/>
    <!-- 用户名 -->
    <property name="username" value="${db.user}"/>
    <!-- 密码 -->
    <property name="password" value="${db.password}"/>
    <!-- 最大连接池数量 -->
    <property name="maxActive" value="${db.maxActive}"/>
    <!-- 初始化物理连接个数 -->
    <property name="initialSize" value="${db.initialSize}"/>
    <!-- 最小连接池数量 -->
    <property name="minIdle" value="${db.minIdle}"/>
    <!-- 最大等待时间 -->
    <property name="maxWait" value="${db.maxWait}"/>
    <property name="timeBetweenEvictionRunsMillis" value="${db.timeBetweenEvictionRunsMillis}"/>
    <property name="minEvictableIdleTimeMillis" value="${db.minEvictableIdleTimeMillis}"/>
    <!-- 检测连接是否有效的SQL -->
    <property name="validationQuery" value="${db.validationQuery}"/>
    <property name="testWhileIdle" value="${db.testWhileIdle}"/>
    <!-- 申请连接时是否执行validationQuery -->
    <property name="testOnBorrow" value="${db.testOnBorrow}"/>
    <!-- 归还连接时是否执行validationQuery -->
    <property name="testOnReturn" value="${db.testOnReturn}"/>
</bean>

<!-- 配置Mybatis的文件 ,mapperLocations配置**Mapper.xml文件位置,configLocation配置mybatis-config文件位置-->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
    <property name="dataSource" ref="dataSource"/>
    <property name="mapperLocations" value="classpath:mapper/*.xml"/>
    <property name="configLocation" value="classpath:mybatis/mybatis-config.xml"/>
</bean>

<!-- 自动扫描了所有的XxxxMapper.xml对应的mapper接口文件,这样就不用一个一个手动配置Mpper的映射了,
       只要Mapper接口类和Mapper映射文件对应起来就可以了 -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
    <property name="basePackage" value="com.demo.dao"/>
    <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
</bean>

<!-- 事物管理器 -->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    <property name="dataSource" ref="dataSource"/>
</bean>

<tx:annotation-driven transaction-manager="transactionManager"/>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 3.4 SpringMVC配置文件spring-mvc.xml
<!-- 注解的支持,可以将请求参数绑定到控制器参数-->
<mvc:annotation-driven/>

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

<!--静态资源处理,mapping:匹配URL,location:静态资源在WebApp中的位置-->
<mvc:resources mapping="/common/**" location="/common/"/>
<mvc:resources mapping="/css/**" location="/css/"/>
<mvc:resources mapping="/image/**" location="/image/"/>
<mvc:resources mapping="/js/**" location="/js/"/>

<!-- 注解的映射器 -->
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"/>

<!-- 注解的适配器 -->
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"/>

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

<!--上传文件配置-->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
    <!-- 默认编码 -->
    <property name="defaultEncoding" value="UTF-8"/>
    <!-- 启用是为了推迟文件解析,以便捕获文件大小异常 -->
    <property name="resolveLazily" value="true"/>
    <!-- 文件大小最大值 -->
    <property name="maxUploadSize" value="209715200"/>
    <!-- 内存中的最大值 -->
    <property name="maxInMemorySize" value="40960"/>
</bean>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 3.5 log4j配置文件log4j.xml 1 2 3 4 5 6 7 8 9 10 11 12 13 3.6 MyBatis Generator配置文件generatorConfig.xml
<context id="mybatis" targetRuntime="MyBatis3">
    <!-- 防止生成的代码中有很多注释-->
    <commentGenerator>
        <property name="suppressAllComments" value="true"/>
        <property name="suppressDate" value="true"/>
    </commentGenerator>

    <jdbcConnection driverClass="com.mysql.jdbc.Driver"
                    connectionURL="jdbc:mysql://localhost:3306/mybatis"
                    userId="root"
                    password="199498xy">
    </jdbcConnection>

    <!--Java类型解析器不应该强制型对象字段BigDecimal的使用,此功能是为了使数据库DECIMAL和NUMERIC列容易处理-->
    <javaTypeResolver>
        <property name="forceBigDecimals" value="false"/>
    </javaTypeResolver>

    <!--生成Model类存放位置-->
    <javaModelGenerator targetPackage="com.demo.bean" targetProject="E:/workspace/java/project/SSM/src/main/java">
        <property name="enableSubPackages" value="true"/>
        <property name="trimStrings" value="true"/>
    </javaModelGenerator>

    <!--生成映射文件存放位置-->
    <sqlMapGenerator targetPackage="mapper" targetProject="E:/workspace/java/project/SSM/src/main/resources">
        <property name="enableSubPackages" value="true"/>
    </sqlMapGenerator>

    <!--生成Dao类存放位置-->
    <javaClientGenerator type="XMLMAPPER" targetPackage="com.demo.dao" targetProject="E:/workspace/java/project/SSM/src/main/java">
        <property name="enableSubPackages" value="true"/>
    </javaClientGenerator>

    <!--生成对应表及类名-->
    <table tableName="user" domainObjectName="User"/>

</context>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 命令行运行maven命令

mvn mybatis-generator:generate 1 生成User表的Mapper.xml文件、bean和对应的接口,bean和接口下面会说到

and ${criterion.condition} and ${criterion.condition} #{criterion.value} and ${criterion.condition} #{criterion.value} and #{criterion.secondValue} and ${criterion.condition} #{listItem} and ${criterion.condition} and ${criterion.condition} #{criterion.value} and ${criterion.condition} #{criterion.value} and #{criterion.secondValue} and ${criterion.condition} #{listItem} id, name, password select distinct from user order by ${orderByClause} select from user where id = #{id,jdbcType=INTEGER} delete from user where id = #{id,jdbcType=INTEGER} delete from user insert into user (id, name, password) values (#{id,jdbcType=INTEGER}, #{name,jdbcType=CHAR}, #{password,jdbcType=CHAR}) insert into user id, name, password, #{id,jdbcType=INTEGER}, #{name,jdbcType=CHAR}, #{password,jdbcType=CHAR}, select count(*) from user update user id = #{record.id,jdbcType=INTEGER}, name = #{record.name,jdbcType=CHAR}, password = #{record.password,jdbcType=CHAR}, update user set id = #{record.id,jdbcType=INTEGER}, name = #{record.name,jdbcType=CHAR}, password = #{record.password,jdbcType=CHAR} update user name = #{name,jdbcType=CHAR}, password = #{password,jdbcType=CHAR}, where id = #{id,jdbcType=INTEGER} update user set name = #{name,jdbcType=CHAR}, password = #{password,jdbcType=CHAR} where id = #{id,jdbcType=INTEGER} 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 3.7 web配置文件web.xml
<!-- 起始欢迎界面 -->
<welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
</welcome-file-list>

<!-- 错误跳转页面 -->
<error-page>
    <!-- 路径不正确 -->
    <error-code>404</error-code>
    <location>/error/404.jsp</location>
</error-page>

<error-page>
    <!-- 没有访问权限,访问被禁止 -->
    <error-code>405</error-code>
    <location>/error/405.jsp</location>
</error-page>

<error-page>
    <!-- 内部错误 -->
    <error-code>500</error-code>
    <location>/error/500.jsp</location>
</error-page>

<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:application.xml</param-value>
</context-param>

<!-- Spring字符集过滤器 -->
<filter>
    <filter-name>SpringEncodingFilter</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>SpringEncodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

<listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

<servlet>
    <servlet-name>dispatcher</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:spring/spring-mvc.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
    <servlet-name>dispatcher</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 4.接口和类 4.1 com.demo.bean下的User.java和UserExample.java 这两个类是由MBG生成的

package com.demo.bean;

public class User { private Integer id;

private String name;

private String password;

public Integer getId() {
    return id;
}

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

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name == null ? null : name.trim();
}

public String getPassword() {
    return password;
}

public void setPassword(String password) {
    this.password = password == null ? null : password.trim();
}

} 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 Example类用于构造复杂的筛选条件

package com.demo.bean;

import java.util.ArrayList; import java.util.List;

public class UserExample { protected String orderByClause;

protected boolean distinct;

protected List<Criteria> oredCriteria;

public UserExample() {
    oredCriteria = new ArrayList<Criteria>();
}

public void setOrderByClause(String orderByClause) {
    this.orderByClause = orderByClause;
}

public String getOrderByClause() {
    return orderByClause;
}

public void setDistinct(boolean distinct) {
    this.distinct = distinct;
}

public boolean isDistinct() {
    return distinct;
}

public List<Criteria> getOredCriteria() {
    return oredCriteria;
}

public void or(Criteria criteria) {
    oredCriteria.add(criteria);
}

public Criteria or() {
    Criteria criteria = createCriteriaInternal();
    oredCriteria.add(criteria);
    return criteria;
}

public Criteria createCriteria() {
    Criteria criteria = createCriteriaInternal();
    if (oredCriteria.size() == 0) {
        oredCriteria.add(criteria);
    }
    return criteria;
}

protected Criteria createCriteriaInternal() {
    Criteria criteria = new Criteria();
    return criteria;
}

public void clear() {
    oredCriteria.clear();
    orderByClause = null;
    distinct = false;
}

protected abstract static class GeneratedCriteria {
    protected List<Criterion> criteria;

    protected GeneratedCriteria() {
        super();
        criteria = new ArrayList<Criterion>();
    }

    public boolean isValid() {
        return criteria.size() > 0;
    }

    public List<Criterion> getAllCriteria() {
        return criteria;
    }

    public List<Criterion> getCriteria() {
        return criteria;
    }

    protected void addCriterion(String condition) {
        if (condition == null) {
            throw new RuntimeException("Value for condition cannot be null");
        }
        criteria.add(new Criterion(condition));
    }

    protected void addCriterion(String condition, Object value, String property) {
        if (value == null) {
            throw new RuntimeException("Value for " + property + " cannot be null");
        }
        criteria.add(new Criterion(condition, value));
    }

    protected void addCriterion(String condition, Object value1, Object value2, String property) {
        if (value1 == null || value2 == null) {
            throw new RuntimeException("Between values for " + property + " cannot be null");
        }
        criteria.add(new Criterion(condition, value1, value2));
    }

    public Criteria andIdIsNull() {
        addCriterion("id is null");
        return (Criteria) this;
    }

    public Criteria andIdIsNotNull() {
        addCriterion("id is not null");
        return (Criteria) this;
    }

    public Criteria andIdEqualTo(Integer value) {
        addCriterion("id =", value, "id");
        return (Criteria) this;
    }

    public Criteria andIdNotEqualTo(Integer value) {
        addCriterion("id <>", value, "id");
        return (Criteria) this;
    }

    public Criteria andIdGreaterThan(Integer value) {
        addCriterion("id >", value, "id");
        return (Criteria) this;
    }

    public Criteria andIdGreaterThanOrEqualTo(Integer value) {
        addCriterion("id >=", value, "id");
        return (Criteria) this;
    }

    public Criteria andIdLessThan(Integer value) {
        addCriterion("id <", value, "id");
        return (Criteria) this;
    }

    public Criteria andIdLessThanOrEqualTo(Integer value) {
        addCriterion("id <=", value, "id");
        return (Criteria) this;
    }

    public Criteria andIdIn(List<Integer> values) {
        addCriterion("id in", values, "id");
        return (Criteria) this;
    }

    public Criteria andIdNotIn(List<Integer> values) {
        addCriterion("id not in", values, "id");
        return (Criteria) this;
    }

    public Criteria andIdBetween(Integer value1, Integer value2) {
        addCriterion("id between", value1, value2, "id");
        return (Criteria) this;
    }

    public Criteria andIdNotBetween(Integer value1, Integer value2) {
        addCriterion("id not between", value1, value2, "id");
        return (Criteria) this;
    }

    public Criteria andNameIsNull() {
        addCriterion("name is null");
        return (Criteria) this;
    }

    public Criteria andNameIsNotNull() {
        addCriterion("name is not null");
        return (Criteria) this;
    }

    public Criteria andNameEqualTo(String value) {
        addCriterion("name =", value, "name");
        return (Criteria) this;
    }

    public Criteria andNameNotEqualTo(String value) {
        addCriterion("name <>", value, "name");
        return (Criteria) this;
    }

    public Criteria andNameGreaterThan(String value) {
        addCriterion("name >", value, "name");
        return (Criteria) this;
    }

    public Criteria andNameGreaterThanOrEqualTo(String value) {
        addCriterion("name >=", value, "name");
        return (Criteria) this;
    }

    public Criteria andNameLessThan(String value) {
        addCriterion("name <", value, "name");
        return (Criteria) this;
    }

    public Criteria andNameLessThanOrEqualTo(String value) {
        addCriterion("name <=", value, "name");
        return (Criteria) this;
    }

    public Criteria andNameLike(String value) {
        addCriterion("name like", value, "name");
        return (Criteria) this;
    }

    public Criteria andNameNotLike(String value) {
        addCriterion("name not like", value, "name");
        return (Criteria) this;
    }

    public Criteria andNameIn(List<String> values) {
        addCriterion("name in", values, "name");
        return (Criteria) this;
    }

    public Criteria andNameNotIn(List<String> values) {
        addCriterion("name not in", values, "name");
        return (Criteria) this;
    }

    public Criteria andNameBetween(String value1, String value2) {
        addCriterion("name between", value1, value2, "name");
        return (Criteria) this;
    }

    public Criteria andNameNotBetween(String value1, String value2) {
        addCriterion("name not between", value1, value2, "name");
        return (Criteria) this;
    }

    public Criteria andPasswordIsNull() {
        addCriterion("password is null");
        return (Criteria) this;
    }

    public Criteria andPasswordIsNotNull() {
        addCriterion("password is not null");
        return (Criteria) this;
    }

    public Criteria andPasswordEqualTo(String value) {
        addCriterion("password =", value, "password");
        return (Criteria) this;
    }

    public Criteria andPasswordNotEqualTo(String value) {
        addCriterion("password <>", value, "password");
        return (Criteria) this;
    }

    public Criteria andPasswordGreaterThan(String value) {
        addCriterion("password >", value, "password");
        return (Criteria) this;
    }

    public Criteria andPasswordGreaterThanOrEqualTo(String value) {
        addCriterion("password >=", value, "password");
        return (Criteria) this;
    }

    public Criteria andPasswordLessThan(String value) {
        addCriterion("password <", value, "password");
        return (Criteria) this;
    }

    public Criteria andPasswordLessThanOrEqualTo(String value) {
        addCriterion("password <=", value, "password");
        return (Criteria) this;
    }

    public Criteria andPasswordLike(String value) {
        addCriterion("password like", value, "password");
        return (Criteria) this;
    }

    public Criteria andPasswordNotLike(String value) {
        addCriterion("password not like", value, "password");
        return (Criteria) this;
    }

    public Criteria andPasswordIn(List<String> values) {
        addCriterion("password in", values, "password");
        return (Criteria) this;
    }

    public Criteria andPasswordNotIn(List<String> values) {
        addCriterion("password not in", values, "password");
        return (Criteria) this;
    }

    public Criteria andPasswordBetween(String value1, String value2) {
        addCriterion("password between", value1, value2, "password");
        return (Criteria) this;
    }

    public Criteria andPasswordNotBetween(String value1, String value2) {
        addCriterion("password not between", value1, value2, "password");
        return (Criteria) this;
    }
}

public static class Criteria extends GeneratedCriteria {

    protected Criteria() {
        super();
    }
}

public static class Criterion {
    private String condition;

    private Object value;

    private Object secondValue;

    private boolean noValue;

    private boolean singleValue;

    private boolean betweenValue;

    private boolean listValue;

    private String typeHandler;

    public String getCondition() {
        return condition;
    }

    public Object getValue() {
        return value;
    }

    public Object getSecondValue() {
        return secondValue;
    }

    public boolean isNoValue() {
        return noValue;
    }

    public boolean isSingleValue() {
        return singleValue;
    }

    public boolean isBetweenValue() {
        return betweenValue;
    }

    public boolean isListValue() {
        return listValue;
    }

    public String getTypeHandler() {
        return typeHandler;
    }

    protected Criterion(String condition) {
        super();
        this.condition = condition;
        this.typeHandler = null;
        this.noValue = true;
    }

    protected Criterion(String condition, Object value, String typeHandler) {
        super();
        this.condition = condition;
        this.value = value;
        this.typeHandler = typeHandler;
        if (value instanceof List<?>) {
            this.listValue = true;
        } else {
            this.singleValue = true;
        }
    }

    protected Criterion(String condition, Object value) {
        this(condition, value, null);
    }

    protected Criterion(String condition, Object value, Object secondValue, String typeHandler) {
        super();
        this.condition = condition;
        this.value = value;
        this.secondValue = secondValue;
        this.typeHandler = typeHandler;
        this.betweenValue = true;
    }

    protected Criterion(String condition, Object value, Object secondValue) {
        this(condition, value, secondValue, null);
    }
}

} 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 4.2 com.demo.dao下的UserMapper.java 这个DAO也是MBG生成的,这下体会到MBG的好处了吧,一下子帮你生成了这么多代码,年轻人可以少熬点夜了~

package com.demo.dao;

import com.demo.bean.User; import com.demo.bean.UserExample; import java.util.List; import org.apache.ibatis.annotations.Param;

public interface UserMapper { long countByExample(UserExample example);

int deleteByExample(UserExample example);

int deleteByPrimaryKey(Integer id);

int insert(User record);

int insertSelective(User record);

List<User> selectByExample(UserExample example);

User selectByPrimaryKey(Integer id);

int updateByExampleSelective(@Param("record") User record, @Param("example") UserExample example);

int updateByExample(@Param("record") User record, @Param("example") UserExample example);

int updateByPrimaryKeySelective(User record);

int updateByPrimaryKey(User record);

} 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 4.3 com.demo.service下的UserService.java接口 这里只定义了简单的增删查改方法

package com.demo.service;

import com.demo.bean.User;

import java.util.List;

public interface UserService {

void insertUser(User user);

void deleteUser(int id);

User findUserById(Integer id);

List<User> findAllUsers();

void updateUser(User user);

} 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 4.4 com.demo.serviceImpl下的UserServiceImpl.java UserServiceImpl实现了UserService,通过注入UserMapper 对数据进行操作

package com.demo.serviceImpl;

import com.demo.bean.User; import com.demo.bean.UserExample; import com.demo.dao.UserMapper; import com.demo.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 void insertUser(User user) {
    userMapper.insert(user);
}

@Override
public void deleteUser(int id) {
    UserExample userExample = new UserExample();
    userExample.createCriteria().andIdEqualTo(id);
    userMapper.deleteByExample(userExample);
}

@Override
public User findUserById(Integer id) {
    return userMapper.selectByPrimaryKey(id);
}

@Override
public List<User> findAllUsers() {
    return userMapper.selectByExample(null);
}

@Override
public void updateUser(User user) {
    userMapper.updateByPrimaryKey(user);
}

} 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 4.5 com.demo.controller下的UserController.java MVC模式下的控制器,通过注入的UserService完成相关业务

package com.demo.controller;

import com.demo.bean.User; import com.demo.service.UserService; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.ResponseBody;

@Controller @RequestMapping(value = "/user") public class UserController {

private static Logger logger = LogManager.getLogger();

@Autowired
private UserService userService;

@RequestMapping(value = "/{id}", method = RequestMethod.GET)
@ResponseBody
public User findUserById(@PathVariable("id") Integer id) {
    User user = userService.findUserById(id);
    logger.info(user.toString());
    return user;
}

} 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 5.测试 将项目部署到本地的Tomcat上,打开你的chrome,访问:

http://localhost:8080/user/1 1 浏览器访问服务器,服务器成功返回一个json数据

这里写图片描述

ok,到这里我们整个SSM整合过程已经完成,后面只要在这个基础上开发就可以了。github项目地址,欢迎star和fork~