本例基於IDEA:
1.先建立項目
new出一個projec
起個什么名字比較好呢,哈哈哈哈!
那么就叫他德瑪西亞吧!
然后呢基於maven,大家事先准備好maven哦。
那么接下來就是設置這個狂拽酷炫的項目名字
好了完成我們正式進入主界面把。
2.IDEA的自動生成模板項目
左上角的自動導入ok既然這么有心我們就接受好了!手動斜眼
等待載入完成,好無聊,好慢,為什么!!!
終於下載完成,太慢了,上網一搜發現是從遠端倉庫獲取的我們可以讓他在本地獲取
測試了下速度瞬間鳥槍換炮。
3.然后我們先來往maven添加架包
可以下看下文件結構,再加不遲
一個標准的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
添加之后茫茫多的依賴都要暈了都。
然后在最后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>
<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
示例代碼嘍。