本例基于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
示例代码喽。