似水无痕

个人技术博客

嗨,我是似水无痕。


我是一名90后的java开发者,欢迎了解更多。

ssm框架搭建

1、新建一个项目,如下图所示

ssm框架搭建步骤

2、选择maven-archetype-webapp

ssm框架搭建步骤

3、填写GroupId和ArtifactId

ssm框架搭建步骤

4、配置maven仓库地址

ssm框架搭建步骤

5、填写项目名称并点击完成

ssm框架搭建步骤

6、新建java、resource等资源包,项目结构如下图所示:

ssm框架搭建步骤

7、修改pom.xml文件添加依赖

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
        <spring.version>4.3.9.RELEASE</spring.version>
        <druid.version>1.0.18</druid.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.11</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>${spring.version}</version>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.39</version>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>${druid.version}</version>
        </dependency>
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.4.1</version>
        </dependency>
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis-spring</artifactId>
            <version>1.3.0</version>
        </dependency>
        <dependency>
            <groupId>com.oracle</groupId>
            <artifactId>oracle-jdbc-driver</artifactId>
            <version>11.2.0</version>
            <scope>runtime</scope>
        </dependency>

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

        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>3.0.1</version>
            <scope>provided</scope>
        </dependency>
    </dependencies>

8、resources添加jdbc.properties配置文件

#oracle数据库
jdbc.driver=oracle.jdbc.driver.OracleDriver
jdbc.url=jdbc:oracle:thin:@ip:port:orcl
jdbc.username=username
jdbc.password=password
#pool settings
jdbc.pool.init=100
jdbc.pool.minIdle=3000
jdbc.pool.maxActive=10000
jdbc.testSql=SELECT 'x' FROM DUAL

9、修改web.xml配置文件

<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
  <display-name>Archetype Created Web Application</display-name>
  <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-*.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>
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
</web-app>

10、resources添加spring-context.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">

    <context:component-scan base-package="com"/>
    <context:property-placeholder ignore-unresolvable="true" location="classpath:jdbc.properties"/>
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/views/"/>
        <property name="suffix" value=".jsp"/>
    </bean>
</beans>

11、resources添加mybatis-config.xml配置文件

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration >
    <!-- 全局参数 -->
    <settings>
        <!-- 使全局的映射器启用或禁用缓存 -->
        <setting name="cacheEnabled" value="true"/>

        <!-- 全局启用或禁用延迟加载当禁用时所有关联对象都会即时加载 -->
        <setting name="lazyLoadingEnabled" value="true"/>

        <!-- 当启用时有延迟加载属性的对象在被调用时将会完全加载任意属性否则每种属性将会按需要加载 -->
        <setting name="aggressiveLazyLoading" value="true"/>

        <!-- 是否允许单条sql 返回多个数据集  (取决于驱动的兼容性) default:true -->
        <setting name="multipleResultSetsEnabled" value="true"/>

        <!-- 是否可以使用列的别名 (取决于驱动的兼容性) default:true -->
        <setting name="useColumnLabel" value="true"/>

        <!-- 允许JDBC 生成主键需要驱动器支持如果设为了true这个设置将强制使用被生成的主键有一些驱动器不兼容不过仍然可以执行  default:false  -->
        <setting name="useGeneratedKeys" value="false"/>

        <!-- 指定 MyBatis 如何自动映射 数据基表的列 NONE不隐射 PARTIAL:部分  FULL:全部  -->
        <setting name="autoMappingBehavior" value="PARTIAL"/>

        <!-- 这是默认的执行类型  SIMPLE: 简单 REUSE: 执行器可能重复使用prepared statements语句BATCH: 执行器可以重复执行语句和批量更新  -->
        <setting name="defaultExecutorType" value="SIMPLE"/>

        <!-- 使用驼峰命名法转换字段 -->
        <setting name="mapUnderscoreToCamelCase" value="true"/>

        <!-- 设置本地缓存范围 session:就会有数据的共享  statement:语句范围 (这样就不会有数据的共享 ) defalut:session -->
        <setting name="localCacheScope" value="SESSION"/>

        <!-- 设置但JDBC类型为空时,某些驱动程序 要指定值,default:OTHER插入空值时不需要指定类型 -->
        <setting name="jdbcTypeForNull" value="NULL"/>

    </settings>
</configuration>

12、resources添加spring-datasource.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"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd ">


    <!-- 定义事务 -->
    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource" />
    </bean>
    <!-- 数据源配置, 使用 BoneCP 数据库连接池 -->
    <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close">
        <!-- 数据源驱动类可不写,Druid默认会自动根据URL识别DriverClass -->
        <property name="driverClassName" value="${jdbc.driver}" />

        <!-- 基本属性 url、user、password -->
        <property name="url" value="${jdbc.url}" />
        <property name="username" value="${jdbc.username}" />
        <property name="password" value="${jdbc.password}" />

        <!-- 配置初始化大小、最小、最大 -->
        <property name="initialSize" value="${jdbc.pool.init}" />
        <property name="minIdle" value="${jdbc.pool.minIdle}" />
        <property name="maxActive" value="${jdbc.pool.maxActive}" />

        <!-- 配置获取连接等待超时的时间 -->
        <property name="maxWait" value="60000" />

        <!-- 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 -->
        <property name="timeBetweenEvictionRunsMillis" value="60000" />

        <!-- 配置一个连接在池中最小生存的时间,单位是毫秒 -->
        <property name="minEvictableIdleTimeMillis" value="300000" />

        <property name="validationQuery" value="${jdbc.testSql}" />
        <property name="testWhileIdle" value="true" />
        <property name="testOnBorrow" value="false" />
        <property name="testOnReturn" value="false" />

        <!-- 打开PSCache,并且指定每个连接上PSCache的大小(Oracle使用) -->
        <property name="poolPreparedStatements" value="true" />
        <property name="maxPoolPreparedStatementPerConnectionSize" value="20" />

        <!-- 配置监控统计拦截的filters -->
        <property name="filters" value="stat" />
    </bean>

    <!-- MyBatis begin -->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource"/>
        <property name="typeAliasesPackage" value="com.entity"/>
        <property name="mapperLocations" value="classpath:/mapper/*.xml"/>
        <property name="configLocation" value="classpath:/mybatis-config.xml"></property>
    </bean>

    <!-- 扫描basePackage下所有以@MyBatisDao注解的接口 -->
    <bean id="mapperScannerConfigurer" class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory" />
        <property name="basePackage" value="com.mapper"/>
    </bean>

</beans>

13、resources/mapper目录下添加TestMapper.xml映射文件

<?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.mapper.TestMapper">

        <parameterMap id="parameterMap" type="com.entity.Test"></parameterMap>
        <resultMap id="resultMap" type="com.entity.Test">
            <result property="id" column="id"/>
            <result property="userName" column="USER_NAME"/>
            <result property="gender" column="GENDER"/>
            <result property="email" column="EMAIL"/>
            <result property="age" column="AGE"/>
            <result property="createDate" column="CREATE_DATE"/>
            <result property="updateDate" column="UPDATE_DATE"/>
        </resultMap>

    <sql id="columnSql">
        <trim suffixOverrides=",">
            a.id as id,
            a.USER_NAME as USER_NAME,
            a.GENDER as GENDER,
            a.EMAIL as EMAIL,
            a.AGE as AGE,
            a.CREATE_DATE as CREATE_DATE,
            a.UPDATE_DATE as UPDATE_DATE
        </trim>
    </sql>
    <select id="selectOne" resultMap="resultMap">
        SELECT
        <include refid="columnSql"></include>
        FROM test_table a
        WHERE rownum = 1
    </select>
    <insert id="insert">
          insert into test_table (
            id,
            USER_NAME,
            GENDER,
            EMAIL,
            AGE,
            CREATE_DATE,
            UPDATE_DATE
        ) values(
            #{id},
            #{userName,jdbcType=VARCHAR},
            #{gender,jdbcType=VARCHAR},
            #{email,jdbcType=VARCHAR},
            #{age,jdbcType=VARCHAR},
            #{createDate,jdbcType=DATE},
            #{updateDate,jdbcType=DATE}
        )
    </insert>
</mapper>

13、main\java\com\entity目录下添加Test.java文件

package com.entity;


import java.util.Date;

/**
 * @Description 测试实体类
 * @Author wanglz
 * @Date 2018/06/02 14:05
 **/
public class Test {
    private String id;
    private String userName;
    private String gender;
    private String email;
    private Integer age;
    private Date createDate;
    private Date updateDate;

    public Test() {
    }

    public Test(String id, String userName, String gender, String email, Integer age, Date createDate, Date updateDate) {
        this.id = id;
        this.userName = userName;
        this.gender = gender;
        this.email = email;
        this.age = age;
        this.createDate = createDate;
        this.updateDate = updateDate;
    }
    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 getGender() {
        return gender;
    }

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

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public Date getCreateDate() {
        return createDate;
    }

    public void setCreateDate(Date createDate) {
        this.createDate = createDate;
    }

    public Date getUpdateDate() {
        return updateDate;
    }

    public void setUpdateDate(Date updateDate) {
        this.updateDate = updateDate;
    }
}

14、main\java\com\mapper目录下添加TestMapper.java接口

package com.mapper;
import entity.Test;
import org.apache.ibatis.annotations.Mapper;
import org.springframework.stereotype.Repository;
/**
 * @Description 映射接口
 * @Author wanglz
 * @Date 2018/06/02 14:06
 **/
@Mapper
@Repository
public interface TestMapper {
    Test selectOne();
    void insert(Test test);
}

15、main\java\com\service目录下添加TestService.java文件

package com.service;
import entity.Test;
import mapper.TestMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

/**
 * @Description service层
 * @Author wanglz
 * @Date 2018/06/02 14:06
 **/
@Service
public class TestService {
    @Autowired
    private TestMapper testMapper;

    public void insert(Test test){
        testMapper.insert(test);
    }

    public Test selectOne() {
        return testMapper.selectOne();
    }
}

16、main\java\com\controller目录下添加TestController.java文件

package com.controller;
import entity.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import service.TestService;
import java.util.Date;
import java.util.UUID;

/**
 * @Description 控制层
 * @Author wanglz
 * @Date 2018/06/02 14:16
 **/
@Controller
@RequestMapping("/test")
public class TestController {
    @Autowired
    private TestService testService;

    @RequestMapping("/index")
    public String index(Model model) {
        Test test = testService.selectOne();
        model.addAttribute("id", test.getId());
        return "index";
    }

    @RequestMapping("/insert")
    @ResponseBody
    public String insert() {
        testService.insert(new Test(UUID.randomUUID().toString(), "张三", "男", "123424@qq.com", 32, new Date(), new Date()));
        return "success";
    }
}