springJDBC学习笔记和实例
来源:互联网 发布:无人机的优化运用 编辑:程序博客网 时间:2024/05/17 06:26
概述:
1)core
即核心包,它包含了JDBC的核心功能。此包内有很多重要的类,包括:JdbcTemplate类、SimpleJdbcInsert类,SimpleJdbcCall类,以及NamedParameterJdbcTemplate类。
2)datasource
即数据源包,访问数据源的实用工具类。它有多种数据源的实现,可以在JavaEE容器外部测试JDBC代码。
3)object
即对象包,以面向对象的方式访问数据库。它允许执行查询并返回结果作为业务对象。它可以在数据表的列和业务对象的属性之间映射查询结果。
4)support
即支持包,是core包和object包的支持类。例如提供了异常转换功能的SQLException类。
springJDBC完整实例:
工程结构:
结构说明:工程结构也不难理解,分为控制层(controller)、服务层(service)、持久层(dao),下面一步一步说明;
1.导入相关的springjdbcjar包,jar包分享到百度云盘,如果无法下载可以在评论留下邮箱我私发;
jar包分享地址:http://pan.baidu.com/s/1kVNQvIn
2.web配置文件:
1 <?xml version="1.0" encoding="UTF-8"?> 2 <web-app version="2.5" 3 xmlns="http://java.sun.com/xml/ns/javaee" 4 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 5 xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 6 http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> 7 <display-name>springJDBCDemo</display-name> 8 <welcome-file-list> 9 <welcome-file>index.jsp</welcome-file>10 </welcome-file-list>11 12 <servlet>13 <servlet-name>dispatcherServlet</servlet-name>14 <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>15 <init-param>16 <param-name>contextConfigLocation</param-name>17 <param-value>18 classpath:conf/spring.xml19 </param-value>20 </init-param>21 <load-on-startup>1</load-on-startup>22 </servlet>23 <servlet-mapping>24 <servlet-name>dispatcherServlet</servlet-name>25 <url-pattern>/do/*</url-pattern>26 </servlet-mapping>27 28 <filter>29 <filter-name>encodingFilter</filter-name>30 <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>31 <init-param>32 <param-name>encoding</param-name>33 <param-value>UTF-8</param-value>34 </init-param>35 </filter>36 <filter-mapping>37 <filter-name>encodingFilter</filter-name>38 <url-pattern>/*</url-pattern>39 </filter-mapping>40 </web-app>
说明:<display-name>一般就写工程名了,<servlet>加载配置文件和请求路径配置;
3.spring.xml配置文件
1 <?xml version="1.0" encoding="UTF-8"?> 2 <beans xmlns="http://www.springframework.org/schema/beans" 3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" 4 xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:context="http://www.springframework.org/schema/context" 5 xmlns:util="http://www.springframework.org/schema/util" 6 xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 7 http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd 8 http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd 9 http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.0.xsd">10 11 <!-- 读取配置文件 -->12 <bean id="propertyConfigurer" class="com.sf.springJDBC.base.http.CustomizedPropertyPlaceholderConfigurer">13 <property name="locations">14 <list>15 <value>classpath:conf/config.properties</value>16 </list>17 </property>18 </bean>19 20 <!-- 对web包中的所有类进行扫描,以完成Bean创建和自动依赖注入的功能 -->21 <context:component-scan base-package="com.sf.springJDBC" />22
<!-- 该类设置后台编码为utf-8,如果没有该类可能导致jsp请求返回的数据中文显示为问号 -->23 <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">24 <property name="messageConverters">25 <list>26 <bean id="UTF8StringHttpMessageConverter" class="com.sf.springJDBC.base.UTF8StringHttpMessageConverter">27 </bean>28 </list>29 </property>30 </bean> 31 32 <!-- 支持spring3.0新的mvc注解 -->33 <mvc:annotation-driven/>34 35 <!-- 启动Spring MVC的注解功能,完成请求和注解POJO的映射 -->36 <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">37 <property name="cacheSeconds" value="0" />38 <property name="messageConverters">39 <list>40 <bean class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter"></bean>41 </list>42 </property>43 </bean>44 45 <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">46 <property name="maxUploadSize" value="102400000" />47 <property name="resolveLazily" value="true"/> 48 <property name="maxInMemorySize" value="4096"/> 49 </bean>50 51 <!-- 数据库配置-->52 <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">53 <property name="driverClassName" value="${dataSource.driver}" />54 <property name="url" value="${dataSource.url}" />55 <property name="username" value="${dataSource.username}" />56 <property name="password" value="${dataSource.password}" />57 <property name="initialSize" value="${dataSource.initialSize}" />58 <property name="maxIdle" value="${dataSource.minIdle}" />59 <property name="maxActive" value="${dataSource.maxActive}" />60 <property name="maxWait" value="${dataSource.maxWait}" />61 <property name="timeBetweenEvictionRunsMillis" value="${dataSource.timeBetweenEvictionRunsMillis}" />62 <property name="minEvictableIdleTimeMillis" value="${dataSource.minEvictableIdleTimeMillis}" />63 <property name="validationQuery" value="select 1 from dual" />64 <property name="poolPreparedStatements" value="true" />65 <property name="defaultAutoCommit" value="true" />66 </bean>67 68 <!-- 给jdbc模板注入数据源-->69 <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">70 <property name="dataSource" ref="dataSource"></property>71 </bean>72 73 74 </beans>
上面的注解说的很清楚了;
4.数据源配置文件config.properties:
1 #oracle 2 dataSource.driver=oracle.jdbc.driver.OracleDriver 3 4 #test 14-2 5 dataSource.url=jdbc:oracle:thin:@ip:port:dbname 6 dataSource.username=username 7 dataSource.password=password 8 9 #Initialize connection10 dataSource.initialSize=511 dataSource.minIdle=1012 dataSource.maxActive=50013 dataSource.maxWait=600014 dataSource.timeBetweenEvictionRunsMillis=300015 dataSource.minEvictableIdleTimeMillis=300000
5.工程主代码:
⑴控制层Controller
1 package com.sf.springJDBC.controller; 2 3 import java.util.HashMap; 4 import java.util.Map; 5 6 import javax.annotation.Resource; 7 import javax.servlet.http.HttpServletRequest; 8 import javax.servlet.http.HttpServletResponse; 9 10 import org.springframework.stereotype.Controller;11 import org.springframework.web.bind.annotation.RequestMapping;12 import org.springframework.web.bind.annotation.ResponseBody;13 14 import com.sf.springJDBC.base.BaseController;15 import com.sf.springJDBC.service.TestService;16 17 18 @Controller19 @RequestMapping("/test")20 public class TestController extends BaseController{21 @Resource22 private TestService testService;23 24 @ResponseBody25 @RequestMapping(value = "/gettest")26 public String getTest(HttpServletRequest request, HttpServletResponse response) {27 Map<String,Object> map = new HashMap<String, Object>();28 map = testService.getTest();29 String data = resMapToJson(map);30 return data;31 }32 }
⑵服务层:service
1 package com.sf.springJDBC.service;2 3 import java.util.Map;4 5 public interface TestService {6 public Map<String, Object> getTest();7 }
(3)服务实现接口service.impl
package com.sf.springJDBC.service.impl;import java.util.HashMap;import java.util.Map;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Service;import com.sf.springJDBC.dao.BaseDao;import com.sf.springJDBC.dao.sql.TestSql;import com.sf.springJDBC.service.TestService;@Service()public class TestServiceImpl implements TestService { @Autowired private BaseDao baseDao; public Map<String, Object> getTest() { Map<String,Object> map = new HashMap<String, Object>(); String sql = TestSql.getQuestionsql; map = baseDao.selectOne(sql, null); return map; }}
持久层dao
1 package com.sf.springJDBC.dao; 2 3 import java.util.List; 4 import java.util.Map; 5 6 public interface BaseDao { 7 8 public Map<String, Object> selectOne(String sql, Object[] params); 9 10 public List<Map<String, Object>> selectList(String sql, Object[] params);11 12 public int selectForInt(String sql, Object[] params);13 14 public long selectForLong(String sql, Object[] params);15 16 public int update(String sql, Object[] params);17 18 public int executeBatch(String[] sql);19 20 public int executeBatch(String sql, List<Object[]> objList);21 22 }
(4)实现接口:dao.impl
1 package com.sf.springJDBC.dao.impl; 2 3 import java.sql.PreparedStatement; 4 import java.sql.SQLException; 5 import java.sql.Timestamp; 6 import java.util.ArrayList; 7 import java.util.HashMap; 8 import java.util.List; 9 import java.util.Map; 10 import org.springframework.beans.factory.annotation.Autowired; 11 import org.springframework.dao.DataAccessException; 12 import org.springframework.jdbc.core.JdbcTemplate; 13 import org.springframework.jdbc.core.PreparedStatementCallback; 14 import org.springframework.stereotype.Repository; 15 16 import com.sf.springJDBC.dao.BaseDao; 17 18 19 @Repository 20 public class BaseDaoImpl implements BaseDao { 21 22 @Autowired 23 private JdbcTemplate jdbcTemplate; 24 25 26 public Map<String, Object> selectOne(String sql, Object[] params) { 27 Map<String, Object> result = new HashMap<String, Object>(); 28 try { 29 List<Map<String, Object>> list = jdbcTemplate.queryForList(sql, params); 30 if (list.size() > 0) { 31 result = list.get(0); 32 } 33 } catch (Exception e) { 34 e.printStackTrace(); 35 } 36 return result; 37 } 38 39 40 public List<Map<String, Object>> selectList(String sql, Object[] params) { 41 List<Map<String, Object>> list = new ArrayList<Map<String, Object>>(); 42 try { 43 list = jdbcTemplate.queryForList(sql, params); 44 } catch (Exception e) { 45 e.printStackTrace(); 46 } 47 return list; 48 } 49 50 51 public int selectForInt(String sql, Object[] params) { 52 int count = 0; 53 try { 54 count = jdbcTemplate.queryForInt(sql, params); 55 } catch (Exception e) { 56 e.printStackTrace(); 57 } 58 return count; 59 } 60 61 62 public long selectForLong(String sql, Object[] params) { 63 long count = 0l; 64 try { 65 count = jdbcTemplate.queryForLong(sql, params); 66 } catch (Exception e) { 67 e.printStackTrace(); 68 } 69 return count; 70 } 71 72 73 public int update(String sql, Object[] params) { 74 int count = 0; 75 try { 76 count = jdbcTemplate.update(sql, params); 77 } catch (Exception e) { 78 e.printStackTrace(); 79 } 80 return count; 81 } 82 83 84 public int executeBatch(String[] sql) { 85 int count = 0; 86 try { 87 count = jdbcTemplate.batchUpdate(sql).length; 88 } catch (Exception e) { 89 e.printStackTrace(); 90 } 91 return count; 92 } 93 94 95 96 97 public int executeBatch(String sql, List<Object[]> objList) { 98 99 /* Object[] objs = new Object[]{1,2,3};100 objs = new Object[]{1,2,3};101 objs = new Object[]{1,2,3};102 objList.add(objs);*/103 104 int count = 0;105 final List<Object[]> paramList = objList;106 try {107 count = jdbcTemplate.execute(sql, new PreparedStatementCallback<int[]>() {108 109 public int[] doInPreparedStatement(PreparedStatement ps) throws SQLException, DataAccessException {110 ps.getConnection().setAutoCommit(false);111 for (int i = 0; i < paramList.size(); i++) {112 Object[] objs = paramList.get(i);113 for (int j = 0; j < objs.length; j++) {114 Object obj = objs[j];115 int num = j + 1;116 if (obj instanceof Integer) {117 ps.setInt(num, (Integer) obj);118 } else if (obj instanceof Long) {119 ps.setLong(num, (Long) obj);120 } else if (obj instanceof java.sql.Date) {121 ps.setDate(num, (java.sql.Date)obj);122 } else if (obj instanceof Timestamp) {123 ps.setTimestamp(num, (Timestamp) obj);124 } else if(obj instanceof Double){125 ps.setDouble(num,(Double)obj);126 }127 else {128 129 ps.setString(num, String.valueOf(obj));130 }131 }132 ps.addBatch();133 }134 int[] o = ps.executeBatch();135 ps.getConnection().commit();136 ps.getConnection().setAutoCommit(true);137 // 如果用<aop:config> 来控制事务,需要把上一行注掉,否则会报错138 return o;139 }140 }).length;141 } catch (Exception e) {142 e.printStackTrace();143 }144 return count;145 }146 147 }
(5)sql语句单独写在一个类里面,方便管理:
1 package com.sf.springJDBC.dao.sql;2 3 public class TestSql {4 public static String getQuestionsql = "select * from bs_question_info where question_busi_id='ZJ16111000192'" ;5 }
当sql需要传参数时,参数用?传入,后台服务层传参数方式:baseDao.selectOne(sql, new Object[]{param1,param2});
(6)读取配置文件CustomizedPropertyPlaceholderConfigurer.java
1 package com.sf.springJDBC.base.http; 2 3 import java.util.HashMap; 4 import java.util.Map; 5 import java.util.Properties; 6 7 import org.springframework.beans.BeansException; 8 import org.springframework.beans.factory.config.ConfigurableListableBeanFactory; 9 import org.springframework.beans.factory.config.PropertyPlaceholderConfigurer;10 11 /*12 * 读取配置文件13 */14 public class CustomizedPropertyPlaceholderConfigurer extends PropertyPlaceholderConfigurer {15 16 private static Map<String, Object> ctxPropertiesMap;17 18 @Override19 protected void processProperties(ConfigurableListableBeanFactory beanFactoryToProcess, Properties props) throws BeansException {20 super.processProperties(beanFactoryToProcess, props);21 ctxPropertiesMap = new HashMap<String, Object>();22 for (Object key : props.keySet()) {23 String keyStr = key.toString();24 String value = props.getProperty(keyStr);25 ctxPropertiesMap.put(keyStr, value);26 }27 }28 29 public static Object getContextProperty(String name) {30 return ctxPropertiesMap.get(name);31 }32 }
(7)控制层继承的基础类:BaseController.java
1 package com.sf.springJDBC.base; 2 3 import java.io.IOException; 4 import java.io.StringReader; 5 import java.util.HashMap; 6 import java.util.List; 7 import java.util.Map; 8 import java.util.regex.Matcher; 9 import java.util.regex.Pattern; 10 11 import javax.servlet.http.HttpServletRequest; 12 import javax.xml.parsers.DocumentBuilder; 13 import javax.xml.parsers.DocumentBuilderFactory; 14 import javax.xml.parsers.ParserConfigurationException; 15 16 import org.codehaus.jackson.JsonParseException; 17 import org.codehaus.jackson.map.JsonMappingException; 18 import org.codehaus.jackson.map.ObjectMapper; 19 import org.w3c.dom.Document; 20 import org.w3c.dom.Node; 21 import org.w3c.dom.NodeList; 22 import org.xml.sax.InputSource; 23 import org.xml.sax.SAXException; 24 25 import net.sf.json.JSONArray; 26 27 import com.alibaba.fastjson.JSON; 28 import com.oncon.core.common.util.JsonUtils; 29 import com.oncon.core.common.web.controller.SuperController; 30 31 public class BaseController extends SuperController { 32 protected List<Map<String,Object>> list; 33 protected Map<String, Object> result; 34 35 public BaseController() { 36 // 初始化 37 result = new HashMap<String, Object>(); 38 result.put("status", "1"); 39 result.put("desc", "失败"); 40 } 41 42 /** 43 * 返回给前端json 44 * 45 * @param map 46 * @return 47 */ 48 protected String resMapToJson(Map<String, Object> map) { 49 return JsonUtils.getObjectString(map); 50 } 51 protected String resMapToJson2(Map<String, String> map) { 52 return JsonUtils.getObjectString(map); 53 } 54 55 protected String resObjToJson(Object obj) { 56 return JSONArray.fromObject(obj).toString(); 57 } 58 59 /** 60 * 获取登录用户信息 61 * 62 * @param request 63 * @return 64 */ 65 // protected UserInfoBean getUserInfo(HttpServletRequest request) { 66 // if (request.getSession().getAttribute("USERINFO") == null) { 67 // return null; 68 // } 69 // return (UserInfoBean) request.getSession().getAttribute("USERINFO"); 70 // } 71 72 /** 73 * 转化传入的json,示例:{"version":"1"} 74 * 75 * @param requestJson 76 * @return 77 */ 78 // @RequestBody String requestJson 79 @SuppressWarnings("unchecked") 80 protected Map<String, Object> resJsonToMap(String requestJson) { 81 if (requestJson == null || "".equals(requestJson)) { 82 return new HashMap<String, Object>(); 83 } 84 return JsonUtils.toObject(requestJson, HashMap.class); 85 } 86 87 /** 88 * json转为map 89 * 90 * @param map 91 * @param key 92 * @return 93 */ 94 protected String getMapToParamVal(Map<String, Object> map, String key) { 95 String val = getStringValueFromMap(key, map); 96 if (val == null) { 97 return ""; 98 } else { 99 return val.trim();100 }101 } 102 /**103 104 * 调用JsonUtils jar包的方法 返回给前端json105 * 106 * @param map107 * @return108 */109 protected String resListToJson(List<Map<String, Object>> list) {110 return JSON.toJSONString(list);111 }112 /**113 * 获取url传入参数114 * 115 * @param request116 * @param key117 * @return118 */119 protected String getResToParamVal(HttpServletRequest request, String key) {120 String val = request.getParameter(key);121 if (val == null) {122 return "";123 } else {124 return val.trim();125 }126 }127 128 129 130 /**131 * Used to convert from JSON to XML or XML to JSON132 */133 protected ObjectMapper objectMapper = new ObjectMapper();134 135 /**136 * Judge the date type is XML or JSON137 * @return138 */139 protected String analyseDataType(String strData) {140 if (strData == null || strData.trim().length() <= 0) {141 return "";142 }143 144 Pattern pattern = Pattern.compile("^<\\?xml.*");145 Matcher matcher = pattern.matcher(strData);146 boolean b = matcher.matches();147 if (b) {148 return "xml";149 }150 151 pattern = Pattern.compile("^\\{.\\}$");152 matcher = pattern.matcher(strData);153 b = matcher.matches();154 if (b) {155 return "json";156 }157 return "";158 }159 /**160 * Get the request parameters, return map object161 * @param strParam162 * @return163 */164 @SuppressWarnings("unchecked")165 protected Map<String, String> getParam(String strParam) {166 Map<String, String> mapParam = null;167 168 // Judge the date type is XML or JSON169 String dataType = analyseDataType(strParam);170 171 // XML172 if ("xml".equalsIgnoreCase(dataType)) {173 StringReader stringReader = new StringReader(strParam);174 InputSource inputSource = new InputSource(stringReader);175 Document doc = null;176 177 try {178 DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();179 DocumentBuilder builder = factory.newDocumentBuilder();180 doc = builder.parse(inputSource);181 NodeList nodeList = doc.getElementsByTagName("ws:pin");182 if (nodeList == null || nodeList.getLength() <= 0) {183 return null;184 }185 186 Node node = nodeList.item(0);187 if (node == null) {188 return null;189 }190 191 //192 strParam = node.getFirstChild().getNodeValue();193 194 } catch (ParserConfigurationException e) {195 e.printStackTrace();196 } catch (SAXException e) {197 e.printStackTrace();198 } catch (IOException e) {199 e.printStackTrace();200 }201 }202 203 // JSON204 try {205 //System.out.println("strParam"+strParam);206 mapParam = objectMapper.readValue(strParam, HashMap.class);207 //System.out.println("mapParam"+mapParam);208 } catch (JsonParseException e) {209 e.printStackTrace();210 //logger.error(e.getMessage());211 } catch (JsonMappingException e) {212 e.printStackTrace();213 //logger.error(e.getMessage());214 } catch (IOException e) {215 e.printStackTrace();216 //logger.error(e.getMessage());217 } finally {218 mapParam = mapParam != null ? mapParam : new HashMap<String, String>();219 }220 221 return mapParam;222 }223 }
(8)设置后台编码为utf-8,spring.xml配置文件需要加载该类,如果前台获取数据中文不是问号胡乱码,可以注释;
1 package com.sf.springJDBC.base; 2 3 import java.io.IOException; 4 import java.io.InputStreamReader; 5 import java.io.OutputStreamWriter; 6 import java.io.UnsupportedEncodingException; 7 import java.nio.charset.Charset; 8 import java.util.ArrayList; 9 import java.util.List; 10 11 import org.springframework.http.HttpInputMessage; 12 import org.springframework.http.HttpOutputMessage; 13 import org.springframework.http.MediaType; 14 import org.springframework.http.converter.AbstractHttpMessageConverter; 15 import org.springframework.http.converter.HttpMessageNotReadableException; 16 import org.springframework.http.converter.HttpMessageNotWritableException; 17 import org.springframework.util.FileCopyUtils; 18 19 public class UTF8StringHttpMessageConverter extends AbstractHttpMessageConverter<String> { 20 21 22 public static final Charset DEFAULT_CHARSET = Charset.forName("UTF-8"); 23 24 private final List<Charset> availableCharsets; 25 26 private boolean writeAcceptCharset = true; 27 28 public UTF8StringHttpMessageConverter() { 29 super(new MediaType("text", "plain", DEFAULT_CHARSET), MediaType.ALL); 30 this.availableCharsets = new ArrayList<Charset>(Charset.availableCharsets().values()); 31 } 32 33 /** 34 * Indicates whether the {@code Accept-Charset} should be written to any 35 * outgoing request. 36 * <p> 37 * Default is {@code true}. 38 */ 39 public void setWriteAcceptCharset(boolean writeAcceptCharset) { 40 this.writeAcceptCharset = writeAcceptCharset; 41 } 42 43 @Override 44 public boolean supports(Class<?> clazz) { 45 return String.class.equals(clazz); 46 } 47 48 @Override 49 protected String readInternal(Class clazz, HttpInputMessage inputMessage) throws IOException { 50 Charset charset = getContentTypeCharset(inputMessage.getHeaders().getContentType()); 51 return FileCopyUtils.copyToString(new InputStreamReader(inputMessage.getBody(), charset)); 52 } 53 54 @Override 55 protected Long getContentLength(String s, MediaType contentType) { 56 Charset charset = getContentTypeCharset(contentType); 57 try { 58 return (long) s.getBytes(charset.name()).length; 59 } catch (UnsupportedEncodingException ex) { 60 // should not occur 61 throw new InternalError(ex.getMessage()); 62 } 63 } 64 65 @Override 66 protected void writeInternal(String s, HttpOutputMessage outputMessage) throws IOException { 67 if (writeAcceptCharset) { 68 outputMessage.getHeaders().setAcceptCharset(getAcceptedCharsets()); 69 } 70 Charset charset = getContentTypeCharset(outputMessage.getHeaders().getContentType()); 71 FileCopyUtils.copy(s, new OutputStreamWriter(outputMessage.getBody(), charset)); 72 } 73 74 /** 75 * Return the list of supported {@link Charset}. 76 * 77 * <p> 78 * By default, returns {@link Charset#availableCharsets()}. Can be 79 * overridden in subclasses. 80 * 81 * @return the list of accepted charsets 82 */ 83 protected List<Charset> getAcceptedCharsets() { 84 return this.availableCharsets; 85 } 86 87 private Charset getContentTypeCharset(MediaType contentType) { 88 if (contentType != null && contentType.getCharSet() != null) { 89 return contentType.getCharSet(); 90 } else { 91 return DEFAULT_CHARSET; 92 } 93 } 94 95 /* @Override 96 protected String readInternal(Class<? extends String> arg0, 97 HttpInputMessage arg1) throws IOException, 98 HttpMessageNotReadableException { 99 // TODO Auto-generated method stub100 return null;101 }102 103 @Override104 protected boolean supports(Class<?> arg0) {105 // TODO Auto-generated method stub106 return false;107 }108 109 @Override110 protected void writeInternal(String arg0, HttpOutputMessage arg1)111 throws IOException, HttpMessageNotWritableException {112 // TODO Auto-generated method stub113 114 }*/115 116 }
5.部署到tomcat启动服务,请求后台数据地址:http://localhost:8080/工程名/do/test/gettest
6.总结:
这种方式获取数据都是存到map里面,很容易解析数据;穿参数也相当灵活,而且对参数类型随意定义;
以上是一个完整的springjdbc实例,如果有什么不妥或不正确的地方,欢迎指正。。。
- springJDBC学习笔记和实例
- spring学习笔记SpringJdbc
- SpringJDBC 学习笔记
- Spring学习笔记---8-SpringJDBC
- Spring4学习笔记-SpringJDBC基本操作(补充)
- SpringMVC +Spring+ SpringJDBC整合实例。
- SpringJDBC
- SpringJDBC
- SpringJDBC
- SpringJDBC
- springJDBC
- springjdbc
- springJDBC
- JAVA学习笔记-Semaphore和CountDownLatch实例
- python学习笔记 类和实例
- python学习笔记-类和实例
- SpringCloud学习笔记-打包和多实例
- Hibernate 实例学习笔记
- 乐观锁与悲观锁——解决并发问题
- 获取当前日期时间,获取当月最后一天
- Android studio 使用Cmake完成C/C++ 的使用以及生成so文件
- 解决远程连接Mysql出现的权限问题
- 准备阶段:00 学习python的目标!
- springJDBC学习笔记和实例
- Jenkins清除老的jar包
- 上世纪美国的新数学运动
- 【连载】研究EasyUI系统—Droppable组件
- 解决mybatis,java.lang.IllegalArgumentException Mapped Statements collection does not contain value for
- 静默安装oracle11.2.0.4
- Android Drawable之ScaleDrawable
- Spring入门,模板语法和渲染
- java web浏览器访问工程前面添加一级目录学习笔记