近期需要写一个android项目,服务端由我负责,打算使用spring+mybatis+restful搭建。搭建过程如下,具体细节日后有时间再整理。
1、新建一个Dynamic web项目,Eclipse版本如下:Eclipse Java EE IDE for Web Developers.Version: Luna Release (4.4.0)
2、引入spring mybatis jersy等jar包,还有其他项目需要的jar包也要引入(比如数据库连接jar包,myspring-batis整合jar包等)。引入之后需要 经过buid path操作,否则会出错。具体过程如下,选择其中的一个library库,右键点击选择build path->config buildpath->Deployment assembly->add->java build path entries->选择类库加入即可。
3、整合spring+mybatis:通过xml配置文件将spring和mybatis整合。
ApplicationContext.xml
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:p="http://www.springframework.org/schema/p" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd"> <!-- 连接数据库 --> <bean id="jdbcDatasource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name="driverClassName" value="org.gjt.mm.mysql.Driver"/> <property name="url" value="jdbc:mysql://localhost:3306/springTest?useUnicode=true&characterEncoding=UTF-8"/> <property name="username" value="root"/> <property name="password" value="m,./1234"/> </bean> <!-- 引用数据资源 和 mybatis配置 --> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="jdbcDatasource" /> <property name="configLocation" value="classpath:config/Mybatis-Configuration.xml" /> </bean> <!-- 配置mapper,接口,增删改查语句,DataModelMapper里面是增删改查的语句 --> <bean id="DataModelMapper" class="org.mybatis.spring.mapper.MapperFactoryBean"> <property name="mapperInterface" value="com.info.basic.DataModelMapper" /> <property name="sqlSessionFactory" ref="sqlSessionFactory" /> </bean> </beans>Mybatis-Configuration.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> <!-- <settings> <setting name="callSettersOnNulls" value="true"></setting> </settings> --> <mappers> <mapper resource="com/info/basic/DataModelMapper.xml"/> </mappers> </configuration>
4、服务器端逻辑代码结构如下:
com.info.test是功能模块,TestService.java是接口,对应TestServiceImpl是接口实现部分,内部需要实例化DataModelMapper,然后能使用Mybatis中的增删改查了。
com.info.rest主要是处理客户端传来的请求,获取参数,调用相应的功能等等。
package com.info.rest; import java.util.HashMap; import java.util.List; import javax.servlet.http.HttpServletRequest; 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.Context; import net.sf.json.JSONException; import net.sf.json.JSONObject; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import org.springframework.http.MediaType; import com.info.basic.DataModelMapper; import com.info.test.TestServiceImpl; @Path("/TestService") public class TestServiceREST { private ApplicationContext ct; private String[] configFiles = { "config/ApplicationContext.xml" }; @GET @Path("/getUser") // @Consumes(MediaType.TEXT_PLAIN) // @Produces(MediaType.APPLICATION_JSON) public String getUser(String username,@Context HttpServletRequest req)throws JSONException{ ct = new ClassPathXmlApplicationContext(configFiles); String retData = ""; String userName = (String) req.getSession().getAttribute("userName"); DataModelMapper dtMapper = (DataModelMapper) ct.getBean("DataModelMapper"); TestServiceImpl testService = new TestServiceImpl(dtMapper); List<HashMap<String,Object>> userList = testService.selectUsers(); HashMap<String, Object> result = new HashMap<String, Object>(); result.put("data", userList); retData = "[" + JSONObject.fromObject(result).toString() + "]"; return retData; } }这里面有一个问题:
// @Consumes(MediaType.TEXT_PLAIN) // @Produces(MediaType.APPLICATION_JSON)如果写上这两句会报错,原因还没找出来。
com.info.basic里面暂时只写了mybatis中的增删改查语句,采用接口的形式调用。
5、配置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>RestfulTest</display-name> <servlet> <servlet-name>Jersey REST Service</servlet-name> <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class> <init-param> <strong><em><u><param-name>com.sun.jersey.config.property.packages</param-name> <param-value>com.info.rest</param-value> </u></em></strong> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <strong><em><u><servlet-name>Jersey REST Service</servlet-name> <url-pattern>/rest/*</url-pattern> </u></em></strong> </servlet-mapping> </web-app>
http://localhost:8080/RestfulTest/rest/TestService/getUser
以上就是搭建过程,其中涉及到许多细节问题,有些地方也没完全搞明白,三个框架和架构对于自己来说都是新知识,也是第一次使用这三个东西写项目。等下次有时间再进行总结。