认真写博客第一篇:java基于spring jersey mybatis 构建restful


本例基于IDEA:

1.先建立项目

new出一个projec

QQ截图20160324155059

起个什么名字比较好呢,哈哈哈哈!

那么就叫他德玛西亚吧!

QQ截图20160324155452

然后呢基于maven,大家事先准备好maven哦。

QQ截图20160324155435

那么接下来就是设置这个狂拽酷炫的项目名字

QQ截图20160324155803

好了完成我们正式进入主界面把。

2.IDEA的自动生成模板项目

QQ截图20160324160606

左上角的自动导入ok既然这么有心我们就接受好了!手动斜眼

等待载入完成,好无聊,好慢,为什么!!!

QQ截图20160324162027

终于下载完成,太慢了,上网一搜发现是从远端仓库获取的我们可以让他在本地获取

QQ截图20160324162125

测试了下速度瞬间鸟枪换炮。

3.然后我们先来往maven添加架包

可以下看下文件结构,再加不迟

QQ截图20160324162412

一个标准的web项目成型

下面我们来添加倚赖包

<!-- 配置仓库 -->

  <properties>
    <java-version>1.6</java-version>
    <spring.version>4.0.2.RELEASE</spring.version>
    <mybatis.version>3.2.6</mybatis.version>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <org.aspectj-version>1.7.3</org.aspectj-version>
  </properties>


  <dependencies>
    <!-- junit lib -->
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>

    <!-- slf4j lib -->
    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-log4j12</artifactId>
      <version>1.7.5</version>
      <scope>provided</scope>
    </dependency>

    <!-- spring核心包 -->
    <!-- jersey中已存在 -->
    <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-orm</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-aop</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-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>

    <!-- tomcat jdbc -->
    <dependency>
      <groupId>org.apache.tomcat</groupId>
      <artifactId>tomcat-jdbc</artifactId>
      <version>7.0.56</version>
      <scope>provided</scope>
    </dependency>

    <!-- 导入java ee jar 包 -->
    <dependency>
      <groupId>javax</groupId>
      <artifactId>javaee-api</artifactId>
      <version>7.0</version>
    </dependency>

    <!-- 导入dbcp的jar包,用来在applicationContext.xml中配置数据库 -->
    <dependency>
      <groupId>commons-dbcp</groupId>
      <artifactId>commons-dbcp</artifactId>
      <version>1.2.2</version>
    </dependency>

    <!-- mysql connector -->
    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>5.1.30</version>
    </dependency>

    <!-- 新增 Jersey 框架支持 2014-11-18 14:19:41 -->
    <dependency>
      <groupId>org.glassfish.jersey.ext</groupId>
      <artifactId>jersey-spring3</artifactId>
      <version>2.4.1</version>
      <exclusions>
        <exclusion>
          <groupId>org.springframework</groupId>
          <artifactId>spring-core</artifactId>
        </exclusion>
        <exclusion>
          <groupId>org.springframework</groupId>
          <artifactId>spring-web</artifactId>
        </exclusion>
        <exclusion>
          <groupId>org.springframework</groupId>
          <artifactId>spring-beans</artifactId>
        </exclusion>
      </exclusions>
    </dependency>
    <dependency>
      <groupId>org.glassfish.jersey.media</groupId>
      <artifactId>jersey-media-json-jackson</artifactId>
      <version>2.4.1</version>
    </dependency>

    <!-- jacson依赖包 -->
    <dependency>
      <groupId>org.codehaus.jackson</groupId>
      <artifactId>jackson-mapper-asl</artifactId>
      <version>1.9.3</version>
    </dependency>
    <dependency>
      <groupId>org.codehaus.jackson</groupId>
      <artifactId>jackson-jaxrs</artifactId>
      <version>1.8.1</version>
    </dependency>

    <!-- Logging -->
    <dependency>
      <groupId>log4j</groupId>
      <artifactId>log4j</artifactId>
      <version>1.2.17</version>
    </dependency>

    <!-- Servlet -->
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>servlet-api</artifactId>
      <version>2.5</version>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.10</version>
    </dependency>


  </dependencies>

所有包在此包括很多个

其中有

junit lib 
slf4j lib
spring核心包
mybatis核心包
mybatis/spring包
tomcat jdbc
java ee jar 包
导入dbcp的jar包,用来在applicationContext.xml中配置数据库
mysql connector
Jersey 框架支持
jacson依赖包
Logging
Servlet
QQ截图20160324163457

添加之后茫茫多的依赖都要晕了都。

 

然后在最后IDEA不能自动识别xml配置文件我们可以在pom里面设置自动刷新

<resources>
      <resource>
        <directory>src/main/java</directory>
        <excludes>
          <exclude>**/*.java</exclude>
        </excludes>
      </resource>
    </resources>

4.下面我们就开始写配置文件

从那里开始呢当然是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" version="2.5">
  <display-name>DEMAXIYA - Restful Web Application</display-name>
  
</web-app>

修改修改头文件,以及默认的名字,那么我们就开始了

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

首先是入口,

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

配置context-param这个节点,然后让spring去读取这个文件来实现我们的配置

然后就开始配置spring-mybatis.xml这个文件

首先

<?xml version="1.0" encoding="UTF-8"?>

这个是声明文件

然后接下来是beans文件

<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:p="http://www.springframework.org/schema/p"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xmlns:tx="http://www.springframework.org/schema/tx"
       xmlns:jdbc="http://www.springframework.org/schema/jdbc"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xmlns:task="http://www.springframework.org/schema/task"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
       http://www.springframework.org/schema/context
       http://www.springframework.org/schema/context/spring-context-3.1.xsd
       http://www.springframework.org/schema/mvc
       http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd
       http://www.springframework.org/schema/jdbc
       http://www.springframework.org/schema/jdbc/spring-jdbc-3.1.xsd
       http://www.springframework.org/schema/tx
       http://www.springframework.org/schema/tx/spring-tx-3.1.xsd
       http://www.springframework.org/schema/task
       http://www.springframework.org/schema/task/spring-task-3.1.xsd
       http://www.springframework.org/schema/aop
       http://www.springframework.org/schema/aop/spring-aop-3.1.xsd">

这个文件的主要作用就是

1、避免命名冲突,像Java中的package一样 

2、将不同作用的标签分门别类(像Spring中的tx命名空间针对事务类的标签,context命名空间针对组件的标签) 

然后我们新建java包,并且将其转化成源码包,然后新建我们的包

com.demaxiya

<!-- 自动扫描 -->
    <context:component-scan base-package="com.demaxiya.." />

然后可以让spring自动扫描里面的加commpent类来加载

xmlns:context="http://www.springframework.org/schema/context"
<!-- 自动扫描 -->
<context:component-scan base-package="com.demaxiya.." />

相对应的

xmlns="http://www.springframework.org/schema/beans"
<!-- 引入配置文件 -->
<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    <property name="location" value="classpath:jdbc.properties" />
</bean>

加入jdbc配置文件,然后配置jdbc参数

driver=com.mysql.jdbc.Driver
url_Master=jdbc:mysql://ip:port/(数据库名字)?useUnicode=true&characterEncoding=utf8&useOldAliasMetadataBehavior=true&autoReconnect=true&autoReconnectForPools=true
username_Master=xxx
password_Master=xxx

url_Slave=jdbc:mysql://ip:port/(数据库名字)?useUnicode=true&characterEncoding=utf8&useOldAliasMetadataBehavior=true&autoReconnect=true&autoReconnectForPools=true
username_Slave=xxx
password_Slave=xxx

#\u5B9A\u4E49\u521D\u59CB\u8FDE\u63A5\u6570  
initialSize=0
#\u5B9A\u4E49\u6700\u5927\u8FDE\u63A5\u6570  
maxActive=20
#\u5B9A\u4E49\u6700\u5927\u7A7A\u95F2  
maxIdle=20
#\u5B9A\u4E49\u6700\u5C0F\u7A7A\u95F2  
minIdle=1
#\u5B9A\u4E49\u6700\u957F\u7B49\u5F85\u65F6\u95F4  
maxWait=60000
<!-- 主数据库节点,更新写入 -->
    <bean id="Master" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
        <property name="driverClassName" value="${driver}" />
        <property name="url" value="${url_Master}" />
        <property name="username" value="${username_Master}" />
        <property name="password" value="${password_Master}" />
        <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>

    <!-- 从数据库节点,读取 -->
    <bean id="Slave" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
        <property name="driverClassName" value="${driver}" />
        <property name="url" value="${url_Slave}" />
        <property name="username" value="${username_Slave}" />
        <property name="password" value="${password_Slave}" />
        <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>

配置一个或者多个数据库连接

<!-- 设置默认数据连接 -->
    <bean id="multipleDataSource" class="com.demaxiya.utils.ChangeDatabases.MultipleDataSource">
        <property name="defaultTargetDataSource" ref="Master"/>
        <property name="targetDataSources">
            <map>
                <entry key="Master" value-ref="Master"/>
                <entry key="Slave" value-ref="Slave"/>
            </map>
        </property>
    </bean>

设置默认数据库连接,本例有两个数据库连接,为了项目做读写分离做准备

<!-- spring和MyBatis完美整合,不需要mybatis的配置映射文件 -->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="multipleDataSource" />
        <property name="configLocation" value="classpath:mybatis.xml" />
        <property name="mapperLocations" value="classpath:com/demaxiya/mapper/*.xml"></property>
    </bean>
<?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="callSettersOnNulls" value="true"/>
    </settings>
   <!-- 配置实体类短别名 -->
     <typeAliases>
          <typeAlias alias="Account" type="com.demaxiya.entities.Account"/>
          <typeAlias alias="PageEx" type="com.demaxiya.entities.PageEx"/>
         <typeAlias alias="PubSource" type="com.demaxiya.entities.PubSource"/>
    </typeAliases>
   
    <!-- 配置Mapper  -->
    <mappers>
    </mappers>

</configuration>

配置这个文件可以在mybatis .xml文件中使用别名

<!-- DAO接口所在包名,Spring会自动查找其下的类 -->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <property name="basePackage" value="com.nico.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="Master" />
    </bean>
    <!-- 开启注解配置 -->
    <context:annotation-config />

    <!-- 开启事务注解驱动 -->
    <tx:annotation-driven />

    <!-- 设置定时任务 -->
    <task:annotation-driven/>
    <context:component-scan base-package="com.nico.utils"></context:component-scan>

然后是下面的事务管理,注解配置,定时任务等

tx,tash需要在头文件中加入

下面是完整的配置文件

<?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:tx="http://www.springframework.org/schema/tx"
       xmlns:task="http://www.springframework.org/schema/task"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
       http://www.springframework.org/schema/context
       http://www.springframework.org/schema/context/spring-context-3.1.xsd
       http://www.springframework.org/schema/tx
       http://www.springframework.org/schema/tx/spring-tx-3.1.xsd
       http://www.springframework.org/schema/task
       http://www.springframework.org/schema/task/spring-task-3.1.xsd">

    <!-- 自动扫描 -->
    <context:component-scan base-package="com.demaxiya.." />

    <!-- 引入配置文件 -->
    <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
        <property name="location" value="classpath:jdbc.properties" />
    </bean>

    <!-- 主数据库节点,更新写入 -->
    <bean id="Master" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
        <property name="driverClassName" value="${driver}" />
        <property name="url" value="${url_Master}" />
        <property name="username" value="${username_Master}" />
        <property name="password" value="${password_Master}" />
        <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>

    <!-- 从数据库节点,读取 -->
    <bean id="Slave" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
        <property name="driverClassName" value="${driver}" />
        <property name="url" value="${url_Slave}" />
        <property name="username" value="${username_Slave}" />
        <property name="password" value="${password_Slave}" />
        <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>
    <!-- 设置默认数据连接 -->
    <bean id="multipleDataSource" class="com.demaxiya.utils.ChangeDatabases.MultipleDataSource">
        <property name="defaultTargetDataSource" ref="Master"/>
        <property name="targetDataSources">
            <map>
                <entry key="Master" value-ref="Master"/>
                <entry key="Slave" value-ref="Slave"/>
            </map>
        </property>
    </bean>
    <!-- spring和MyBatis完美整合,不需要mybatis的配置映射文件 -->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="multipleDataSource" />
        <property name="configLocation" value="classpath:mybatis.xml" />
        <property name="mapperLocations" value="classpath:com/demaxiya/mapper/*.xml"></property>
    </bean>

    <!-- DAO接口所在包名,Spring会自动查找其下的类 -->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <property name="basePackage" value="com.demaxiya.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="Master" />
    </bean>

    <!-- 开启注解配置 -->
    <context:annotation-config />

    <!-- 开启事务注解驱动 -->
    <tx:annotation-driven />

    <!-- 设置定时任务 -->
    <task:annotation-driven/>
    <context:component-scan base-package="com.demaxiya.utils"></context:component-scan>
</beans>
继续来配置web.xml文件让全部请求都由jersey来转发
<servlet>
    <servlet-name>jersey-serlvet</servlet-name>
    <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
    <init-param>
      <param-name>javax.ws.rs.Application</param-name>
      <param-value>com.demaxiya.utils.RestApplication</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>jersey-serlvet</servlet-name>
    <url-pattern>/*</url-pattern>
  </servlet-mapping>

全部的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" version="2.5">
  <display-name>BJDR - Restful Web Application</display-name>
  <listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  </listener>
  <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:spring-mybatis.xml</param-value>
  </context-param>
  <servlet>
    <servlet-name>jersey-serlvet</servlet-name>
    <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
    <init-param>
      <param-name>javax.ws.rs.Application</param-name>
      <param-value>com.demaxiya.utils.RestApplication</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>jersey-serlvet</servlet-name>
    <url-pattern>/*</url-pattern>
  </servlet-mapping>
</web-app>

其中的restapplication就是注册jersey服务的入口

// 注册JAX-RS应用组件
    public RestApplication(){
        //服务类所在的包路径  
        packages("com.nico.service");
        
        register(RequestContextFilter.class);    // System
        register(JacksonFeature.class);            // System
        register(JacksonJsonProvider.class);    // System
        register(LoggingFilter.class);            // Log
        
    }

注册服务。然后我们就可以正式开始写接口了

5.建立service来提供访问地址

下面的就是平常的建立class

package com.demaxiya.service;

import com.demaxiya.dao.AccountMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import javax.ws.rs.Consumes;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.Response;

/**
 * Created by Administrator on 2016/4/18.
 */
@Component
@Path("accounts")
public class AccountService {

    @Autowired
    private AccountMapper accountMapper;


    @GET
    @Consumes({ "application/json; charset=UTF-8", "application/xml; charset=UTF-8" })
    @Produces({ "application/json; charset=UTF-8", "application/xml; charset=UTF-8" })
    public Response getAccounts(){
        System.out.println("测试来啦!!!!");

        return null;
    }
}

然后过来访问,然后建立映射等,mapper文件。具体DEMO在下面的链接

https://github.com/308681282/my_work

示例代码喽。


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM