maven+springmvc+spring+mybatis整合

根据一些sql文件创建相对应的数据表t_user

CREATE TABLE `t_user` (  
  `USER_ID` int(11) NOT NULL AUTO_INCREMENT,  
  `USER_NAME` char(30) NOT NULL,  
  `USER_PASSWORD` char(10) NOT NULL,  
  `USER_EMAIL` char(30) NOT NULL,  
  PRIMARY KEY (`USER_ID`),  
  KEY `IDX_NAME` (`USER_NAME`)  
) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8

然后在表中添加一些数据

     INSERT INTO t_user (USER_ID, USER_NAME, USER_PASSWORD, USER_EMAIL)
 VALUES (1, 'linminghang', '1234567@', 'ling20081005@126.com');  
    INSERT INTO t_user (USER_ID, USER_NAME, USER_PASSWORD, USER_EMAIL) VALUES (2, 'evan', '123', 'fff@126.com');  
    INSERT INTO t_user (USER_ID, USER_NAME, USER_PASSWORD, USER_EMAIL) VALUES (3, 'kaka', 'cadg', 'fwsfg@126.com');  
    INSERT INTO t_user (USER_ID, USER_NAME, USER_PASSWORD, USER_EMAIL) VALUES (4, 'simle', 'cscs', 'fsaf@126.com');  
    INSERT INTO t_user (USER_ID, USER_NAME, USER_PASSWORD, USER_EMAIL) VALUES (5, 'arthur', 'csas', 'fsaff@126.com');  
    INSERT INTO t_user (USER_ID, USER_NAME, USER_PASSWORD, USER_EMAIL) VALUES (6, 'xiaoming', 'yuh78', 'fdfas@126.com');  
    INSERT INTO t_user (USER_ID, USER_NAME, USER_PASSWORD, USER_EMAIL) VALUES (7, 'xiaoxiao', 'cvff', 'xiaoxiao@126.com');  
    INSERT INTO t_user (USER_ID, USER_NAME, USER_PASSWORD, USER_EMAIL) VALUES (8, 'lianghome', 'gvv', 'liang@126.com');  
    INSERT INTO t_user (USER_ID, USER_NAME, USER_PASSWORD, USER_EMAIL) VALUES (9, '李林Evankaka', 'dfsc', 'lilin2008@126.com');  
    INSERT INTO t_user (USER_ID, USER_NAME, USER_PASSWORD, USER_EMAIL) VALUES (10, 'banana', 'uih6', 'banana@qq.com');

maven创建一个项目
这里写图片描述
这里写图片描述这里写图片描述
这里写图片描述
打开pom文件packging选择jar
切换到Navigator窗口创建src/main/java和src/test/java文件夹然后切换回Project Explorer窗口
项目所需基本包
选择项目右键build-path选择configure build path—>java build path
这里写图片描述
这里写图片描述
这里写图片描述
选择Deployment Assembly
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
选择java Complier 修改相对应的jdk版本
这里写图片描述
选择Project Facets 修改java 的版本为对应的版本,去掉Dynamic Web Module选项的√,修改后选择应用然后退出
这里写图片描述
再次选择build path 选择Project Facets 重新选取Dynamic Web Module选项,在下面出现Further configuration avaliable 点击进入并设置src/main/webapp并选中下面的选项点击OK,然后应用于程序
这里写图片描述
这里写图片描述
然后在项目中创建下列package
src/main/java
com.liangfufeng.controller 放置action
com.liangfufeng.dao 放置持久层接口
com.liangfufeng.mapper 放置mybatis的mapper映射文件
com.liangfueng.pojo 放置实体类文件
com.liangfufeng.service 放置业务逻辑接口
com.liangfufeng.service.impl 放置业务层的实现类
src/test/ava
com.liangfufeng.baseTest 放置测试基础类
com.liangfufeng.controller 放置action 的测试类
com.liangfufeng.service 放置业务层测试类
这里写图片描述

配置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" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"  
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"  
    id="WebApp_ID" version="2.5">  
    <display-name>Archetype Created Web Application</display-name>  
   <!-- 起始欢迎界面 -->  
    <welcome-file-list>  
        <welcome-file>index.jsp</welcome-file>  
    </welcome-file-list>  

    <!-- 读取spring配置文件 -->  
    <context-param>  
        <param-name>contextConfigLocation</param-name>  
        <param-value>classpath:application.xml</param-value>  
    </context-param>  
    <!-- 设计路径变量值 -->  
    <context-param>  
        <param-name>webAppRootKey</param-name>  
        <param-value>springmvc.root</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>  

    <!-- 日志记录 -->  
    <context-param>  
        <!-- 日志配置文件路径 -->  
        <param-name>log4jConfigLocation</param-name>  
        <param-value>classpath:properties/log4j.properties</param-value>  
    </context-param>  
    <context-param>  
        <!-- 日志页面的刷新间隔 -->  
        <param-name>log4jRefreshInterval</param-name>  
        <param-value>6000</param-value>  
    </context-param>  
    <listener>  
        <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>  
    </listener>  

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

    <!-- springMVC核心配置 -->  
    <servlet>  
        <servlet-name>dispatcherServlet</servlet-name>  
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>  
        <init-param>  
            <param-name>contextConfigLocation</param-name>  
            <!--spingMVC的配置路径  -->  
            <param-value>classpath:springmvc/spring-mvc.xml</param-value>  
        </init-param>  
        <load-on-startup>1</load-on-startup>  
    </servlet>  
    <!-- 拦截设置 -->  
    <servlet-mapping>  
        <servlet-name>dispatcherServlet</servlet-name>  
        <url-pattern>/</url-pattern>  
    </servlet-mapping>  

    <!-- 错误跳转页面 -->  
    <error-page>  
        <!-- 路径不正确 -->  
        <error-code>404</error-code>  
        <location>/WEB-INF/errorpage/404.jsp</location>  
    </error-page>  
    <error-page>  
        <!-- 没有访问权限,访问被禁止 -->  
        <error-code>405</error-code>  
        <location>/WEB-INF/errorpage/405.jsp</location>  
    </error-page>  
    <error-page>  
        <!-- 内部错误 -->  
        <error-code>500</error-code>  
        <location>/WEB-INF/errorpage/500.jsp</location>  
    </error-page>  
</web-app> 

使用pom加载构建环境开发所需的jar包和插件

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.spring.mvc.webdemo</groupId>
  <artifactId>ssm-demo</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <name>ssm-demo Maven Webapp</name>
  <url>http://maven.apache.org</url>
  <properties>
    <!-- spring版本号 -->
    <spring.version>4.3.6.RELEASE</spring.version>
    <!-- mybatis版本号 -->
    <mybatis.version>3.4.2</mybatis.version>
    <!-- junit版本号 -->
    <junit.version>4.12</junit.version>
    <!-- log4j版本号 -->
    <log4j.version>1.2.17</log4j.version>
    <!-- sl4j版本号 -->
    <slf4j.version>1.7.25</slf4j.version>
    <!-- mysql驱动版本号 -->
    <mysql.version>5.1.29</mysql.version>
  </properties>
  <dependencies>
      <!-- junit4测试使用 -->
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>${junit.version}</version>
      <!-- 表示开发时引用,发布时不会加载此包 -->
      <scope>test</scope>
    </dependency>
    <!--spring单元测试依赖 -->  
        <dependency>  
            <groupId>org.springframework</groupId>  
            <artifactId>spring-test</artifactId>  
            <version>${spring.version}</version>  
            <scope>test</scope>  
        </dependency>
    <!-- 添加spring依赖 -->
        <dependency>  
            <groupId>org.springframework</groupId>  
            <artifactId>spring-core</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-context</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-aop</artifactId>  
            <version>${spring.version}</version>  
        </dependency>  
        <dependency>  
            <groupId>org.springframework</groupId>  
            <artifactId>spring-aspects</artifactId>  
            <version>${spring.version}</version>  
        </dependency>  
        <dependency>  
            <groupId>org.springframework</groupId>  
            <artifactId>spring-tx</artifactId>  
            <version>${spring.version}</version>  
        </dependency>  
        <dependency>  
            <groupId>org.springframework</groupId>  
            <artifactId>spring-jdbc</artifactId>  
            <version>${spring.version}</version>  
        </dependency>  
        <dependency>  
            <groupId>org.springframework</groupId>  
            <artifactId>spring-web</artifactId>  
            <version>${spring.version}</version>  
        </dependency>  
    <!-- mybatis -->
    <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis</artifactId>
        <version>${mybatis.version}</version>
    </dependency>
    <!-- mybatis-spring整合 -->
    <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis-spring</artifactId>
        <version>1.3.1</version>
    </dependency>
    <!-- servlet支持 -->
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>javax.servlet-api</artifactId>
        <version>3.1.0</version>
    </dependency>
    <!-- 日志文件管理包 -->  
        <!-- log start -->  
         <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>${log4j.version}</version>
        </dependency>
         <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>${slf4j.version}</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
            <version>${slf4j.version}</version>
        </dependency>       
        <!-- log end -->  
       <!-- mysql驱动包 -->  
        <dependency>  
            <groupId>mysql</groupId>  
            <artifactId>mysql-connector-java</artifactId>  
            <version>${mysql.version}</version>  
        </dependency>
        <!-- 添加servlet支持 -->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>3.1.0</version>
        </dependency>
  </dependencies>
  <build>
    <finalName>ssm-demo</finalName>
    <plugins>
        <!-- 添加jetty web容器插件 -->
            <plugin>
                <groupId>org.eclipse.jetty</groupId>
                <artifactId>jetty-maven-plugin</artifactId>
                <version>9.4.2.v20170220</version>
                <executions>
                    <execution>
        <!-- 在打包成功后使用jetty:run来运行jetty服务 -->
                        <phase>package</phase>
                        <goals>
                            <goal>run</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
        <!--这个元素描述了项目相关的所有资源路径列表,例如和项目相关的属性文件,这些资源被包含在最终的打包文件里。-->
      <resources>
          <resource>
        <!--   描述存放资源的目录,该路径相对POM路径-->
              <directory>src/main/java</directory>
              <includes>
                  <include>**/*.xml</include>
              </includes>
          </resource>
          <resource>
        <!--   描述存放资源的目录,该路径相对POM路径-->
              <directory>src/main/resources</directory>
              <includes>
                  <include>**/*.xml</include>
                  <include>**/*.properties</include>
              </includes>
          </resource>
      </resources>      
  </build>
</project>

在src/main/resources下创建application.xml—spring 核心配置文件和log4j.properites—log4j配置信息(必须放在这里)
mybatis文件夹下mybatis-config.xml—mybatis配置文件(也可能不用为了以后或许用到先放着)
properties文件夹下jdbc.properties数据库配置信息
springmvc文件夹下spring-mvc.xml—spring mvc前端控制器的配置文件(如果是struts2换成相应的配置文件)
完整的目录结构如下
这里写图片描述
spring框架的核心配置文件application.xml

<?xml version="1.0" encoding="UTF-8"?>  
<beans xmlns="http://www.springframework.org/schema/beans"  
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"  
        xmlns:aop="http://www.springframework.org/schema/aop"  
        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.2.xsd  
               http://www.springframework.org/schema/context    
               http://www.springframework.org/schema/context/spring-context-4.2.xsd">  

         <!-- 引入jdbc配置文件 -->    
         <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">  
            <property name="ignoreUnresolvablePlaceholders" value="true"></property>
            <property name="locations">  
                <list>  
                   <value>classpath:properties/*.properties</value>  
                    <!-- 要是有多个配置文件,只需在这里继续添加即可 -->                    
                </list>  
            </property>  
        </bean>  

        <!-- 配置数据源 -->  
         <bean id="dataSource"  
            class="org.springframework.jdbc.datasource.DriverManagerDataSource">  
            <!-- 不使用properties来配置 -->  
             <!-- <property name="driverClassName" value="com.mysql.jdbc.Driver" />   
                <property name="url" value="jdbc:mysql://localhost:3306/ssm2" />   
                <property name="username" value="root" />   
                <property name="password" value="ROOT" /> -->
           <!-- 使用properties来配置  -->  
            <property name="driverClassName">  
                <value>${jdbc_driverClassName}</value>  
            </property>  
            <property name="url">  
                <value>${jdbc_url}</value>  
            </property>  
            <property name="username">  
                <value>${jdbc_username}</value>  
            </property>  
            <property name="password">  
                <value>${jdbc_password}</value>  
            </property> 
        </bean>

        <!-- 自动扫描了所有的XxxxMapper.xml对应的mapper接口文件,这样就不用一个一个手动配置Mpper的映射了,只要Mapper接口类和Mapper映射文件对应起来就可以了。 -->  
        <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">  
            <property name="basePackage"  
                value="com.liangfufeng.dao" />  
        </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*:com/liangfufeng/mapper/**/*.xml"/>    
            <property name="configLocation" value="classpath:mybatis/mybatis-config.xml" />  
            <property name="typeAliasesPackage" value="com.tiantian.ckeditor.model"   
                />  
        </bean>   
        <!-- 自动扫描注解的bean -->  
        <context:component-scan base-package="com.liangfufeng.service" />  

</beans>  

mybatis下的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> 

</configuration> 

properties下的jdbc.properties

jdbc_driverClassName=com.mysql.jdbc.Driver
jdbc_url=jdbc:mysql://localhost:3306/ssm2
jdbc_username=root
jdbc_password=ROOT

prperties下的log4j.properties

### direct log messages to stdout ###
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.err
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n

### direct messages to file mylog.log ###
log4j.appender.file=org.apache.log4j.FileAppender
log4j.appender.file.File=c\:mylog.log
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n

### set log levels - for more verbose logging change 'info' to 'debug' ###

log4j.rootLogger=info, stdout 

springmvc 下的spring-mvc.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:context="http://www.springframework.org/schema/context"
    xmlns:mvc="http://www.springframework.org/schema/mvc"
    xsi:schemaLocation="  
        http://www.springframework.org/schema/beans  
        http://www.springframework.org/schema/beans/spring-beans-4.2.xsd  
        http://www.springframework.org/schema/context  
        http://www.springframework.org/schema/context/spring-context-4.2.xsd  
        http://www.springframework.org/schema/mvc  
        http://www.springframework.org/schema/mvc/spring-mvc-4.2.xsd">

    <mvc:annotation-driven/>
    <!-- 扫描controller(controller层注入) -->
    <context:component-scan base-package="com.liangfufeng.controller" />

    <!-- 对模型视图添加前后缀 -->
    <bean id="viewResolver"
        class="org.springframework.web.servlet.view.InternalResourceViewResolver"
        p:prefix="/WEB-INF/view/" p:suffix=".jsp" />
</beans>  

使用mybatis-generator逆向工程生成实体类pojo和持久层dao以及mapper.xml文件
需要下载如下两个文件并创建src目录generatorConfig.xml

这里写图片描述

generatorConfig.xml如下配置

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE generatorConfiguration
PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
"http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
<generatorConfiguration>
    <!-- 数据库驱动 -->
    <classPathEntry location="mysql-connector-java-5.1.18-bin.jar" />
    <context id="DB2Tables" targetRuntime="MyBatis3">
        <commentGenerator>
            <property name="suppressDate" value="true" />
            <!-- 是否去除自动生成的注释 true:是 : false:否 -->
            <property name="suppressAllComments" value="true" />
        </commentGenerator>
        <!--数据库链接URL,用户名、密码 -->
        <jdbcConnection driverClass="com.mysql.jdbc.Driver"
            connectionURL="jdbc:mysql://127.0.0.1:3306/ssm2" userId="root"
            password="ROOT">
        </jdbcConnection>
        <javaTypeResolver>
            <property name="forceBigDecimals" value="false" />
        </javaTypeResolver>
        <!-- 生成模型的包名和位置 -->
        <javaModelGenerator targetPackage="com.ssm.pojo"
            targetProject="src">
            <property name="enableSubPackages" value="true" />
            <property name="trimStrings" value="true" />
        </javaModelGenerator>
        <!-- 生成映射文件的包名和位置 -->
        <sqlMapGenerator targetPackage="com.ssm.mapping"
            targetProject="src">
            <property name="enableSubPackages" value="true" />
        </sqlMapGenerator>
        <!-- 生成DAO的包名和位置 -->
        <javaClientGenerator type="XMLMAPPER"
            targetPackage="com.ssm.dao" targetProject="src">
            <property name="enableSubPackages" value="true" />
        </javaClientGenerator>
        <!-- 要生成的表 tableName是数据库中的表名或视图名 domainObjectName是实体类名 -->
        <table tableName="t_user" domainObjectName="User"
            enableCountByExample="false" enableUpdateByExample="false"
            enableDeleteByExample="false" enableSelectByExample="false"
            selectByExampleQueryId="false"></table>
    </context>
</generatorConfiguration>

然后打开命令行cmd 进入到src所在的目录下运行下列语句
java -jar mybatis-generator-core-1.3.2.jar -configfile generatorConfig.xml -overwrite

也可以选中src的上一级目录按住Shift键+鼠标右键选择在此处打开命令行窗口(W)然后运行上面的语句

这里写图片描述

然后将对应的文件拷贝到项目中,注意上面的配置中的生成包配置和实质项目没有对应其实可以在生成的时候修改为与之对应。如果有错也问题不大在项目中稍作修改即可。

自动生成User表对应的接口UserMapper.java

package com.liangfufeng.dao;

import com.liangfufeng.pojo.User;

public interface UserMapper {
    int deleteByPrimaryKey(Integer userId);

    int insert(User record);

    int insertSelective(User record);

    User selectByPrimaryKey(Integer userId);

    int updateByPrimaryKeySelective(User record);

    int updateByPrimaryKey(User record);
}

自动生成的实体类User.java

package com.liangfufeng.pojo;

public class User {
    private Integer userId;

    private String userName;

    private String userPassword;

    private String userEmail;

    public Integer getUserId() {
        return userId;
    }

    public void setUserId(Integer userId) {
        this.userId = userId;
    }

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName == null ? null : userName.trim();
    }

    public String getUserPassword() {
        return userPassword;
    }

    public void setUserPassword(String userPassword) {
        this.userPassword = userPassword == null ? null : userPassword.trim();
    }

    public String getUserEmail() {
        return userEmail;
    }

    public void setUserEmail(String userEmail) {
        this.userEmail = userEmail == null ? null : userEmail.trim();
    }
}

自动生成的UserMapper.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.liangfufeng.dao.UserMapper" >
  <resultMap id="BaseResultMap" type="com.liangfufeng.pojo.User" >
    <id column="USER_ID" property="userId" jdbcType="INTEGER" />
    <result column="USER_NAME" property="userName" jdbcType="CHAR" />
    <result column="USER_PASSWORD" property="userPassword" jdbcType="CHAR" />
    <result column="USER_EMAIL" property="userEmail" jdbcType="CHAR" />
  </resultMap>
  <sql id="Base_Column_List" >
    USER_ID, USER_NAME, USER_PASSWORD, USER_EMAIL
  </sql>
  <select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.Integer" >
    select 
    <include refid="Base_Column_List" />
    from t_user
    where USER_ID = #{userId,jdbcType=INTEGER}
  </select>
  <delete id="deleteByPrimaryKey" parameterType="java.lang.Integer" >
    delete from t_user
    where USER_ID = #{userId,jdbcType=INTEGER}
  </delete>
  <insert id="insert" parameterType="com.liangfufeng.pojo.User" >
    insert into t_user (USER_ID, USER_NAME, USER_PASSWORD, 
      USER_EMAIL)
    values (#{userId,jdbcType=INTEGER}, #{userName,jdbcType=CHAR}, #{userPassword,jdbcType=CHAR}, 
      #{userEmail,jdbcType=CHAR})
  </insert>
  <insert id="insertSelective" parameterType="com.liangfufeng.pojo.User" >
    insert into t_user
    <trim prefix="(" suffix=")" suffixOverrides="," >
      <if test="userId != null" >
        USER_ID,
      </if>
      <if test="userName != null" >
        USER_NAME,
      </if>
      <if test="userPassword != null" >
        USER_PASSWORD,
      </if>
      <if test="userEmail != null" >
        USER_EMAIL,
      </if>
    </trim>
    <trim prefix="values (" suffix=")" suffixOverrides="," >
      <if test="userId != null" >
        #{userId,jdbcType=INTEGER},
      </if>
      <if test="userName != null" >
        #{userName,jdbcType=CHAR},
      </if>
      <if test="userPassword != null" >
        #{userPassword,jdbcType=CHAR},
      </if>
      <if test="userEmail != null" >
        #{userEmail,jdbcType=CHAR},
      </if>
    </trim>
  </insert>
  <update id="updateByPrimaryKeySelective" parameterType="com.liangfufeng.pojo.User" >
    update t_user
    <set >
      <if test="userName != null" >
        USER_NAME = #{userName,jdbcType=CHAR},
      </if>
      <if test="userPassword != null" >
        USER_PASSWORD = #{userPassword,jdbcType=CHAR},
      </if>
      <if test="userEmail != null" >
        USER_EMAIL = #{userEmail,jdbcType=CHAR},
      </if>
    </set>
    where USER_ID = #{userId,jdbcType=INTEGER}
  </update>
  <update id="updateByPrimaryKey" parameterType="com.liangfufeng.pojo.User" >
    update t_user
    set USER_NAME = #{userName,jdbcType=CHAR},
      USER_PASSWORD = #{userPassword,jdbcType=CHAR},
      USER_EMAIL = #{userEmail,jdbcType=CHAR}
    where USER_ID = #{userId,jdbcType=INTEGER}
  </update>
</mapper>

添加Controller控制器UserController.java

package com.liangfufeng.controller;

import javax.annotation.Resource;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;

import com.liangfufeng.pojo.User;
import com.liangfufeng.service.UserService;

/*
 * 这是User控制器
 * @author liangfufeng
 * @since 2017年3月26日
 */
@Controller
@RequestMapping("/user")
public class UserController {
    @Resource
    private UserService userService;
    @RequestMapping("/showUser")
    private String userIndex(@RequestParam("userid") Integer userId,Model model){
        User user=userService.getUserById(userId);
        model.addAttribute("user", user);
        return "User";
    }
}

添加User表对应的业务操作接口UserService.java

package com.liangfufeng.service;

import com.liangfufeng.pojo.User;

public interface UserService {

    User getUserById(Integer userId);

}

添加User表对应的业务操作接口的实现UserServiceImpl.java

package com.liangfufeng.service.impl;

import javax.annotation.Resource;

import org.springframework.stereotype.Service;

import com.liangfufeng.dao.UserMapper;
import com.liangfufeng.pojo.User;
import com.liangfufeng.service.UserService;

/**
 * 这是User表对应的业务层接口实现类
 * @author liangfufeng
 * @since 2017年3月26日
 */
@Service
public class UserServiceImpl implements UserService{
    @Resource
    private UserMapper userDao; 
    @Override
    public User getUserById(Integer userId) {
        User user=userDao.selectByPrimaryKey(userId);
        return user;
    }

}

在src/test/java下的com.liangfufeng.baseTest包下创建SpringTestCase.java测试基类

package com.liangfufeng.baseTest;

import org.junit.runner.RunWith;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.AbstractJUnit4SpringContextTests;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

/** 
 * 功能概要: 
 *  
 * @author liangfufeng 
 * @since  2017年3月23日  
 */  
//指定bean注入的配置文件  
@ContextConfiguration(locations = { "classpath:application.xml"})  
//使用标准的JUnit @RunWith注释来告诉JUnit使用Spring TestRunner  
@RunWith(SpringJUnit4ClassRunner.class)  
public abstract class SpringTestCase extends AbstractJUnit4SpringContextTests{  
    protected Logger logger = LoggerFactory.getLogger(getClass());  
}

在src/test/java下的com.liangfufeng.service下创建UserServiceTest.java测试service

package com.liangfufeng.service;


import javax.annotation.Resource;

import org.apache.log4j.Logger;
import org.junit.Test;
import com.liangfufeng.baseTest.SpringTestCase;
import com.liangfufeng.pojo.User;


/** 
 * 功能概要:UserService单元测试 
 *  
 * @author liangfufeng 
 * @since  2017年3月23日
 */  
public class UserServiceTest extends SpringTestCase {  
    @Resource  
    private UserService userService;
    Logger logger = Logger.getLogger(UserServiceTest.class);  

    @Test  
    public void selectUserByIdTest(){  
        User user = userService.getUserById(10);  
        logger.debug("查找结果" + user);  
    }  

}  

选中UserServiceTest.java中的selectUserByIdTest()方法点击鼠标右键选中Run As—>Junit Test

这里写图片描述

控制台输出以下内容表示测试通过:

00:03:06,542  INFO DefaultTestContextBootstrapper:187 - Using TestExecutionListeners: [org.springframework.test.context.web.ServletTestExecutionListener@1b829c7, org.springframework.test.context.support.DirtiesContextBeforeModesTestExecutionListener@1bf011e, org.springframework.test.context.support.DependencyInjectionTestExecutionListener@e26ae7, org.springframework.test.context.support.DirtiesContextTestExecutionListener@d88d2d]
00:03:06,922  INFO XmlBeanDefinitionReader:317 - Loading XML bean definitions from class path resource [application.xml]
00:03:07,657  INFO GenericApplicationContext:582 - Refreshing org.springframework.context.support.GenericApplicationContext@8bae7: startup date [Mon Mar 27 00:03:07 CST 2017]; root of context hierarchy
00:03:08,211  INFO PropertyPlaceholderConfigurer:172 - Loading properties file from file [D:\eclipse\WorkspaceOne\ssm-demo\target\classes\properties\jdbc.properties]
00:03:08,413  INFO DriverManagerDataSource:133 - Loaded JDBC driver: com.mysql.jdbc.Driver
00:03:11,053  INFO GenericApplicationContext:987 - Closing org.springframework.context.support.GenericApplicationContext@8bae7: startup date [Mon Mar 27 00:03:07 CST 2017]; root of context hierarchy

并且跳转到unit窗口出现绿条表示测试通过

这里写图片描述
在添加以下目录和页面
这里写图片描述
index.jsp如下:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<h2>Hello World!</h2>
</body>
</html>

User.jsp如下:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1>hello china 你好,中国!</h1><br>
${user.userId }<br>
${user.userName }<br>
${user.userPassword }<br>
${user.userEmail }<br>
</body>
</html>

选中项目点鼠标右键Run As —>Maven Build
这里写图片描述这里写图片描述
这里写图片描述
控制台输出:

[INFO] Scanning for projects...
[INFO]                                                                         
[INFO] ------------------------------------------------------------------------
[INFO] Building ssm-demo Maven Webapp 0.0.1-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO] 
[INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ ssm-demo ---
[INFO] Deleting D:\eclipse\WorkspaceOne\ssm-demo\target
[INFO] 
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ ssm-demo ---
[WARNING] Using platform encoding (GBK actually) to copy filtered resources, i.e. build is platform dependent!
[INFO] Copying 1 resource
[INFO] Copying 5 resources
[INFO] 
[INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ ssm-demo ---
[INFO] Changes detected - recompiling the module!
[WARNING] File encoding has not been set, using platform encoding GBK, i.e. build is platform dependent!
[INFO] Compiling 6 source files to D:\eclipse\WorkspaceOne\ssm-demo\target\classes
[INFO] 
[INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ ssm-demo ---
[WARNING] Using platform encoding (GBK actually) to copy filtered resources, i.e. build is platform dependent!
[INFO] Copying 0 resource
[INFO] 
[INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ ssm-demo ---
[INFO] Changes detected - recompiling the module!
[WARNING] File encoding has not been set, using platform encoding GBK, i.e. build is platform dependent!
[INFO] Compiling 2 source files to D:\eclipse\WorkspaceOne\ssm-demo\target\test-classes
[INFO] 
[INFO] --- maven-surefire-plugin:2.12.4:test (default-test) @ ssm-demo ---
[INFO] Surefire report directory: D:\eclipse\WorkspaceOne\ssm-demo\target\surefire-reports

-------------------------------------------------------
 T E S T S
-------------------------------------------------------
Running com.liangfufeng.service.UserServiceTest
00:13:00,677  INFO DefaultTestContextBootstrapper:187 - Using TestExecutionListeners: [org.springframework.test.context.web.ServletTestExecutionListener@4d9ebf, org.springframework.test.context.support.DirtiesContextBeforeModesTestExecutionListener@1f14318, org.springframework.test.context.support.DependencyInjectionTestExecutionListener@6bfd73, org.springframework.test.context.support.DirtiesContextTestExecutionListener@1ccc6c8]
00:13:01,039  INFO XmlBeanDefinitionReader:317 - Loading XML bean definitions from class path resource [application.xml]
00:13:01,884  INFO GenericApplicationContext:582 - Refreshing org.springframework.context.support.GenericApplicationContext@e62f6: startup date [Mon Mar 27 00:13:01 CST 2017]; root of context hierarchy
00:13:02,598  INFO PropertyPlaceholderConfigurer:172 - Loading properties file from file [D:\eclipse\WorkspaceOne\ssm-demo\target\classes\properties\jdbc.properties]
00:13:02,886  INFO DriverManagerDataSource:133 - Loaded JDBC driver: com.mysql.jdbc.Driver
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 5.725 sec
00:13:05,477  INFO GenericApplicationContext:987 - Closing org.springframework.context.support.GenericApplicationContext@e62f6: startup date [Mon Mar 27 00:13:01 CST 2017]; root of context hierarchy

Results :

Tests run: 1, Failures: 0, Errors: 0, Skipped: 0

[INFO] 
[INFO] --- maven-war-plugin:2.2:war (default-war) @ ssm-demo ---
[INFO] Packaging webapp
[INFO] Assembling webapp [ssm-demo] in [D:\eclipse\WorkspaceOne\ssm-demo\target\ssm-demo]
[INFO] Processing war project
[INFO] Copying webapp resources [D:\eclipse\WorkspaceOne\ssm-demo\src\main\webapp]
[INFO] Webapp assembled in [687 msecs]
[INFO] Building war: D:\eclipse\WorkspaceOne\ssm-demo\target\ssm-demo.war
[INFO] WEB-INF\web.xml already added, skipping
[INFO] 
[INFO] >>> tomcat7-maven-plugin:2.2:run (default) > process-classes @ ssm-demo >>>
[INFO] 
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ ssm-demo ---
[WARNING] Using platform encoding (GBK actually) to copy filtered resources, i.e. build is platform dependent!
[INFO] Copying 1 resource
[INFO] Copying 5 resources
[INFO] 
[INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ ssm-demo ---
[INFO] Nothing to compile - all classes are up to date
[INFO] 
[INFO] <<< tomcat7-maven-plugin:2.2:run (default) < process-classes @ ssm-demo <<<
[INFO] 
[INFO] --- tomcat7-maven-plugin:2.2:run (default) @ ssm-demo ---
[INFO] Running war on http://localhost:8080/ssm-demo
[INFO] Creating Tomcat server configuration at D:\eclipse\WorkspaceOne\ssm-demo\target\tomcat
[INFO] create webapp with contextPath: /ssm-demo
三月 27, 2017 12:13:16 上午 org.apache.coyote.AbstractProtocol init
信息: Initializing ProtocolHandler ["http-bio-8080"]
三月 27, 2017 12:13:16 上午 org.apache.catalina.core.StandardService startInternal
信息: Starting service Tomcat
三月 27, 2017 12:13:16 上午 org.apache.catalina.core.StandardEngine startInternal
信息: Starting Servlet Engine: Apache Tomcat/7.0.47
三月 27, 2017 12:13:29 上午 org.apache.catalina.core.ApplicationContext log
信息: No Spring WebApplicationInitializer types detected on classpath
三月 27, 2017 12:13:29 上午 org.apache.catalina.core.ApplicationContext log
信息: Set web app root system property: 'springmvc.root' = [D:\eclipse\WorkspaceOne\ssm-demo\src\main\webapp\]
三月 27, 2017 12:13:29 上午 org.apache.catalina.core.ApplicationContext log
信息: Initializing log4j from [classpath:log4j.properties]
三月 27, 2017 12:13:29 上午 org.apache.catalina.core.ApplicationContext log
信息: Initializing Spring root WebApplicationContext
00:13:29,666  INFO ContextLoader:305 - Root WebApplicationContext: initialization started
00:13:29,882  INFO XmlWebApplicationContext:582 - Refreshing Root WebApplicationContext: startup date [Mon Mar 27 00:13:29 CST 2017]; root of context hierarchy
00:13:30,069  INFO XmlBeanDefinitionReader:317 - Loading XML bean definitions from class path resource [application.xml]
00:13:31,730  INFO PropertyPlaceholderConfigurer:172 - Loading properties file from file [D:\eclipse\WorkspaceOne\ssm-demo\target\classes\properties\jdbc.properties]
00:13:31,746  INFO AutowiredAnnotationBeanPostProcessor:155 - JSR-330 'javax.inject.Inject' annotation found and supported for autowiring
00:13:31,955  INFO DriverManagerDataSource:133 - Loaded JDBC driver: com.mysql.jdbc.Driver
00:13:33,183  INFO ContextLoader:345 - Root WebApplicationContext: initialization completed in 3510 ms
三月 27, 2017 12:13:33 上午 org.apache.catalina.core.ApplicationContext log
信息: Initializing Spring FrameworkServlet 'dispatcherServlet'
00:13:33,354  INFO DispatcherServlet:489 - FrameworkServlet 'dispatcherServlet': initialization started
00:13:33,364  INFO XmlWebApplicationContext:582 - Refreshing WebApplicationContext for namespace 'dispatcherServlet-servlet': startup date [Mon Mar 27 00:13:33 CST 2017]; parent: Root WebApplicationContext
00:13:33,365  INFO XmlBeanDefinitionReader:317 - Loading XML bean definitions from class path resource [springmvc/spring-mvc.xml]
00:13:33,519  INFO AutowiredAnnotationBeanPostProcessor:155 - JSR-330 'javax.inject.Inject' annotation found and supported for autowiring
00:13:34,038  INFO DefaultAnnotationHandlerMapping:354 - Mapped URL path [/home] onto handler 'homeController'
00:13:34,039  INFO DefaultAnnotationHandlerMapping:354 - Mapped URL path [/home.*] onto handler 'homeController'
00:13:34,040  INFO DefaultAnnotationHandlerMapping:354 - Mapped URL path [/home/] onto handler 'homeController'
00:13:34,043  INFO DefaultAnnotationHandlerMapping:354 - Mapped URL path [/user/showUser] onto handler 'userController'
00:13:34,044  INFO DefaultAnnotationHandlerMapping:354 - Mapped URL path [/user/showUser.*] onto handler 'userController'
00:13:34,046  INFO DefaultAnnotationHandlerMapping:354 - Mapped URL path [/user/showUser/] onto handler 'userController'
00:13:34,784  INFO DispatcherServlet:508 - FrameworkServlet 'dispatcherServlet': initialization completed in 1429 ms
三月 27, 2017 12:13:34 上午 org.apache.coyote.AbstractProtocol start
信息: Starting ProtocolHandler ["http-bio-8080"]

表示项目已经部署到tomcat上,打开浏览器在地址栏输入:
http://localhost:8080/ssm-demo/

有以下输出:
这里写图片描述
在地址栏输入
http://localhost:8080/ssm-demo/user/showUser?userid=1
这里写图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
目标检测(Object Detection)是计算机视觉领域的一个核心问题,其主要任务是找出图像中所有感兴趣的目标(物体),并确定它们的类别和位置。以下是对目标检测的详细阐述: 一、基本概念 目标检测的任务是解决“在哪里?是什么?”的问题,即定位出图像中目标的位置并识别出目标的类别。由于各类物体具有不同的外观、形状和姿态,加上成像时光照、遮挡等因素的干扰,目标检测一直是计算机视觉领域最具挑战性的任务之一。 二、核心问题 目标检测涉及以下几个核心问题: 分类问题:判断图像中的目标属于哪个类别。 定位问题:确定目标在图像中的具体位置。 大小问题:目标可能具有不同的大小。 形状问题:目标可能具有不同的形状。 三、算法分类 基于深度学习的目标检测算法主要分为两大类: Two-stage算法:先进行区域生成(Region Proposal),生成有可能包含待检物体的预选框(Region Proposal),再通过卷积神经网络进行样本分类。常见的Two-stage算法包括R-CNN、Fast R-CNN、Faster R-CNN等。 One-stage算法:不用生成区域提议,直接在网络中提取特征来预测物体分类和位置。常见的One-stage算法包括YOLO系列(YOLOv1、YOLOv2、YOLOv3、YOLOv4、YOLOv5等)、SSD和RetinaNet等。 四、算法原理 以YOLO系列为例,YOLO将目标检测视为回归问题,将输入图像一次性划分为多个区域,直接在输出层预测边界框和类别概率。YOLO采用卷积网络来提取特征,使用全连接层来得到预测值。其网络结构通常包含多个卷积层和全连接层,通过卷积层提取图像特征,通过全连接层输出预测结果。 五、应用领域 目标检测技术已经广泛应用于各个领域,为人们的生活带来了极大的便利。以下是一些主要的应用领域: 安全监控:在商场、银行
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值