Maven搭建SpringMVC+Spring+MyBatis框架

来源:互联网 发布:有机玻璃 亚克力 知乎 编辑:程序博客网 时间:2024/05/21 21:36

一. 框架详情

Spring 是一个轻量级的Java开发框架,它是为了解决企业应用开发的复杂性而创建的。Spring的用途不仅限于服务器端的开发。从简单性、可测试性和松耦合的角度而言,任何Java应用都可以从Spring中受益。 简单来说,Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架。

SpringMVC 属于SpringFrameWork的后续产品,分离了控制器、模型对象、分派器以及处理程序对象的角色,这种分离让它们更容易进行定制。

MyBatis 是一个基于Java的持久层框架。MyBatis提供的持久层框架包括SQL Maps和Data Access Objects(DAO)它消除了几乎所有的JDBC代码和参数的手工设置以及结果集的检索。MyBatis 使用简单的 XML或注解用于配置和原始映射,将接口和 Java映射成数据库中的记录。

二. 创建Maven项目

1.项目结构如下

这里写图片描述

2. Maven引入需要的JAR包
    <properties><spring.version>3.2.8.RELEASE</spring.version><json-version>1.8.4</json-version><xml-version>1.4.7</xml-version><!-- mysql驱动版本号 --><mysql-driver.version>5.1.29</mysql-driver.version><mybatis.version>3.2.8</mybatis.version><slf4j.version>1.7.18</slf4j.version><log4j.version>1.2.17</log4j.version>  </properties>  <dependencies>    <!-- 添加jstl依赖 -->    <dependency>      <groupId>jstl</groupId>      <artifactId>jstl</artifactId>      <version>1.2</version>    </dependency>    <dependency>      <groupId>javax</groupId>      <artifactId>javaee-api</artifactId>      <version>7.0</version>    </dependency>    <!-- 添加junit4依赖 -->    <dependency>      <groupId>junit</groupId>      <artifactId>junit</artifactId>      <version>4.11</version>    </dependency>    <!-- 添加spring核心依赖 -->    <dependency>      <groupId>org.springframework</groupId>      <artifactId>spring-core</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-oxm</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-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-test</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.2.2</version></dependency><!-- 添加mysql驱动依赖 --><dependency>  <groupId>mysql</groupId>  <artifactId>mysql-connector-java</artifactId>  <version>${mysql-driver.version}</version></dependency><!-- 添加数据库连接池依赖 --><dependency>  <groupId>commons-dbcp</groupId>  <artifactId>commons-dbcp</artifactId>  <version>1.2.2</version></dependency><dependency>  <groupId>com.mchange</groupId>  <artifactId>c3p0</artifactId>  <version>0.9.2.1</version></dependency><!-- 添加fastjson --><dependency>  <groupId>com.alibaba</groupId>  <artifactId>fastjson</artifactId>  <version>1.1.41</version></dependency><!-- 添加日志相关jar包 --><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 --><!-- 映入JSON --><dependency>  <groupId>org.codehaus.jackson</groupId>  <artifactId>jackson-mapper-asl</artifactId>  <version>1.9.13</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.8.0</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.8.0</version></dependency><dependency>  <groupId>com.fasterxml.jackson.jaxrs</groupId>  <artifactId>jackson-jaxrs-json-provider</artifactId>  <version>2.4.1</version></dependency><dependency>  <groupId>commons-fileupload</groupId>  <artifactId>commons-fileupload</artifactId>  <version>1.3.1</version></dependency><dependency>  <groupId>commons-io</groupId>  <artifactId>commons-io</artifactId>  <version>2.4</version></dependency><dependency>  <groupId>commons-codec</groupId>  <artifactId>commons-codec</artifactId>  <version>1.9</version></dependency><dependency>  <groupId>javax.ws.rs</groupId>  <artifactId>jsr311-api</artifactId>  <version>1.0</version></dependency><dependency>  <groupId>commons-lang</groupId>  <artifactId>commons-lang</artifactId>  <version>2.6</version></dependency><dependency>  <groupId>org.codehaus.groovy</groupId>  <artifactId>groovy-all</artifactId>  <version>2.2.2</version></dependency><dependency>  <groupId>net.sf.json-lib</groupId>  <artifactId>json-lib</artifactId>  <version>2.4</version>  <classifier>jdk15</classifier></dependency><dependency>  <groupId>org.apache.commons</groupId>  <artifactId>commons-lang3</artifactId>  <version>3.0</version></dependency><dependency>  <groupId>commons-httpclient</groupId>  <artifactId>commons-httpclient</artifactId>  <version>3.1</version></dependency><dependency>  <groupId>org.apache.httpcomponents</groupId>  <artifactId>httpclient</artifactId>  <version>4.3.6</version></dependency>  </dependencies>  <build>    <pluginManagement>      <plugins>        <plugin>          <groupId>org.apache.maven.plugins</groupId>          <artifactId>maven-war-plugin</artifactId>          <version>2.4</version>          <configuration>            <warSourceDirectory>src/main/webapp</warSourceDirectory>            <warName>Spring4MVCRestServiceDemo</warName>            <failOnMissingWebXml>false</failOnMissingWebXml>          </configuration>        </plugin>      </plugins>    </pluginManagement>    <finalName>com.ttook.springmvc</finalName>  </build>
3.创建model
创建一个model包并在其下创建一个Person.Java文件。
package com.ttook.springmvc;public class Person {    private static final long serialVersionUID = -3727979363425652597L;private int uid;        private String uname;       private String usex;        private int uage;   private String uaddress;public Person() {    super();}    public Person(int uid, String uname, String usex, int uage, String uaddress) {        this.uid = uid;        this.uname = uname;        this.usex = usex;        this.uage = uage;        this.uaddress = uaddress;    }       public int getUid() {        return uid;    }           public void setUid(int uid) {        this.uid = uid;    }           public String getUname() {        return uname;    }           public void setUname(String uname) {        this.uname = uname;    }       public String getUsex() {        return usex;    }    public void setUsex(String usex) {        this.usex = usex;    }    public int getUage() {        return uage;    }    public void setUage(int uage) {        this.uage = uage;    }    public String getUaddress() {        return uaddress;    }    public void setUaddress(String uaddress) {        this.uaddress = uaddress;    }}
4.创建dao接口
创建一个包dao,并在其下创建一个PersonDao.java文件作为DAO接口。
    package com.ttook.springmvc.dao;    import com.ttook.springmvc.Person;    import org.springframework.stereotype.Repository;    @Repository    public interface PersonDao {        public Person queryPersonById(int id) ;    }
5.实现dao接口
在resource/mappering包下创建一个PersonMapper.xml文件作为上一步创建的DAO接口的实现。
<?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.ttook.springmvc.dao.PersonDao">    <select id="queryPersonById" parameterType="java.lang.Integer" resultType="com.ttook.springmvc.Person">        SELECT * FROM testTable        WHERE uid = #{uid}    </select></mapper>
6. 创建service接口
package com.ttook.springmvc.service;import com.ttook.springmvc.Person;import java.util.List;public interface IPersonServices {    public Person queryPersonById(int id);    public List<Person> queryPersonAll(int id);}
7. 实现service接口
package com.ttook.springmvc.service;import com.ttook.springmvc.Person;import com.ttook.springmvc.dao.PersonDao;import org.apache.log4j.Logger;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Service;import java.util.List;@Servicepublic class IPersonServicesImpl implements IPersonServices {    private static final Logger logger = Logger.getLogger(IPersonServicesImpl.class);    @Autowired    PersonDao personDao;    public Person queryPersonById(int id) {        logger.info("queryPersonById === " + id);        Person person = personDao.queryPersonById(id);        return person;    }    public List<Person> queryPersonAll(int id) {        return null;    }}
8. 创建controller接口
package com.ttook.springmvc.controller;import com.ttook.springmvc.Person;import org.springframework.stereotype.Repository;import org.springframework.web.bind.annotation.*;import javax.ws.rs.core.MediaType;@Repositorypublic interface IPersonController {    @RequestMapping(value = "/hello", produces = "text/plain;charset=UTF-8")    public @ResponseBody    String hello();@RequestMapping(value = "/say/{msg}", produces = "application/json;charset=UTF-8")public @ResponseBodyString say(@PathVariable(value = "msg") String msg);@RequestMapping(value = "/getPerson/{id:\\d+}", method = RequestMethod.GET, produces = "application/json;charset=UTF-8")public @ResponseBodyString getPerson(@PathVariable("id") int id);@RequestMapping(value = "/deletePerson/{id:\\d+}", method = RequestMethod.DELETE)public @ResponseBody Object deletePerson(@PathVariable("id") int id) ;/** * 推荐使用,这种可以解决绝大多数问题 * @param person * @return */@RequestMapping(value = "/addPerson", method = RequestMethod.POST, produces = {MediaType.APPLICATION_JSON,"application/json;charset=UTF-8"},        consumes = {MediaType.APPLICATION_JSON,MediaType.APPLICATION_XML})public String addPerson(Person person);@RequestMapping(value = "/updatePerson", method = RequestMethod.PUT)public @ResponseBody Object updatePerson(@RequestBody Person person);}
9. 实现controller接口
package com.ttook.springmvc.controller;import com.ttook.springmvc.Person;import com.ttook.springmvc.service.IPersonServices;import net.sf.json.JSONObject;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.RequestBody;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.ResponseBody;import org.apache.log4j.Logger;import javax.annotation.Resource;@Controller@RequestMapping("/test")public class IPersonControllerImpl implements IPersonController {    /** 日志实例 */    private static final Logger logger = Logger.getLogger(IPersonControllerImpl.class);    @Autowired    IPersonServices iPersonServices;    public @ResponseBody    String hello() {        logger.info("hello........");        return "你好!hello";    }    public @ResponseBody    String say(@PathVariable(value = "msg") String msg) {        return "{\"msg\":\"you say:'" + msg + "'\"}";    }    public @ResponseBody    String getPerson(@PathVariable("id") int id) {        Person person=iPersonServices.queryPersonById(id);        JSONObject jsonObject = JSONObject.fromObject(person);        logger.info(jsonObject);        logger.info(jsonObject.toString());        return jsonObject.toString();    }    public Object deletePerson(@PathVariable("id") int id) {        logger.info("删除人员信息id=" + id);        JSONObject jsonObject = new JSONObject();        jsonObject.put("msg", "删除人员信息成功");        return jsonObject;    }    public @ResponseBody    String addPerson(@RequestBody Person person) {        logger.info("注册人员信息成功id=" + person.getUid());        JSONObject jsonObject = new JSONObject();        jsonObject.put("msg", "注册人员信息成功");        return jsonObject.toString();    }    public @ResponseBody Object updatePerson(@RequestBody Person person) {        logger.info("更新人员信息id=" + person.getUid());        JSONObject jsonObject = new JSONObject();        jsonObject.put("msg", "更新人员信息成功");        return jsonObject.toString();    }}
5. 相关配置文件配置,整合SSM框架

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 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee"xsi:schemaLocation="http://java.sun.com/xml/ns/javaee     http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">  <display-name>springMVCRestful</display-name>  <!--JDBC-->  <context-param>    <param-name>contextConfigLocation</param-name>    <param-value>classpath:spring.xml</param-value>  </context-param>  <listener>    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>  </listener>  <!-- 防止Spring内存溢出监听器 -->      <listener>        <listener-class>org.springframework.web.util.IntrospectorCleanupListener</listener-class>      </listener>  <!-- spring mvc servlet-->  <servlet>    <servlet-name>springMVCRestful</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>springMVCRestful</servlet-name>    <url-pattern>/</url-pattern>  </servlet-mapping>  <!-- 如果有乱码我们则需要配置字符编码集的过滤器来防止乱码问题 -->  <!-- 编码过滤器 -->      <filter>        <filter-name>encodingFilter</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>encodingFilter</filter-name>    <url-pattern>/*</url-pattern>  </filter-mapping>  <welcome-file-list>    <welcome-file>index.jsp</welcome-file>  </welcome-file-list></web-app>

spring.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:tx="http://www.springframework.org/schema/tx"       xmlns:context="http://www.springframework.org/schema/context"       xsi:schemaLocation="http://www.springframework.org/schema/beans        http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">    <context:component-scan base-package="com.ttook.springmvc"/>    <!-- 第一种方式:加载一个properties文件 -->    <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">        <property name="location" value="classpath:jdbc.properties"/>    </bean>    <!-- 配置数据源 -->    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">        <property name="driverClassName" value="${driverClasss}"/>        <property name="url" value="${jdbcUrl}"/>        <property name="username" value="${username}"/>        <property name="password" value="${password}"/>        <!-- 初始化连接大小 -->        <property name="initialSize" value="${initialSize}"></property>        <!--连接池最大数量 -->        <property name="maxActive" value="${maxActive}"></property>        <!--连接池最大空闲  -->        <property name="maxIdle" value="${maxIdle}"></property>        <!--连接池最小空闲  -->        <property name="minIdle" value="${minIdle}"></property>        <!--获取连接最大等待时间 -->        <property name="maxWait" value="${maxWait}"></property>    </bean>    <!-- mybatis和spring完美整合,不需要mybatis的配置映射文件 -->    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">        <property name="dataSource" ref="dataSource"/>        <!-- 自动扫描mapping.xml文件 -->        <property name="mapperLocations" value="classpath:mapping/PersonMapper.xml"></property>    </bean>    <!-- DAO接口所在包名,Spring会自动查找其下的类 -->    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">        <property name="basePackage" value="com.ttook.springmvc.dao"/>        <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"></property>    </bean>    <!-- (事务管理)transaction manager, use JtaTransactionManager for global tx -->    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">        <property name="dataSource" ref="dataSource"/>    </bean>    <!-- (事务管理)transaction manager, use JtaTransactionManager for global tx -->    <tx:annotation-driven transaction-manager="transactionManager"/></beans>

springMVC.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:mvc="http://www.springframework.org/schema/mvc"           xsi:schemaLocation="http://www.springframework.org/schema/beans                       http://www.springframework.org/schema/beans/spring-beans-3.0.xsd                        http://www.springframework.org/schema/context                     http://www.springframework.org/schema/context/spring-context-3.0.xsd                     http://www.springframework.org/schema/mvc                   http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd">    <!-- 初始化com.ttook.springmvc目录下面的bean  -->    <context:component-scan base-package="com.ttook.springmvc"></context:component-scan>    <!--避免IE执行AJAX时,返回JSON出现下载文件 -->    <bean id="mappingJacksonHttpMessageConverter"   class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">        <property name="supportedMediaTypes">            <list>                <value>text/html;charset=UTF-8</value>            </list>        </property>    </bean>    <!-- 启动SpringMVC的注解功能,完成请求和注解POJO的映射 -->    <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">        <property name="messageConverters">            <list>                <ref bean="mappingJacksonHttpMessageConverter"/> <!-- JSON转换器 -->            </list>        </property>    </bean><!--配置spring MVC的注解 驱动 --><mvc:annotation-driven/></beans>

jdbc.properties文件

driverClasss=com.mysql.jdbc.DriverjdbcUrl=jdbc:mysql://192.168.1.117:3306/数据库名?useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNullusername=账号password=密码#定义初始连接数initialSize=0#定义最大连接数maxActive=20#定义最大空闲maxIdle=20#定义最小空闲minIdle=1#定义最长等待时间maxWait=60000
6. 请求接口地址并返回json数据
请求地址:http://localhost:8088/lxf/test/getPerson/1001返回值:    {"uaddress":"北京","uage":27,"uid":1001,"uname":"XXX","usex":"男"}
0 0