- 浏览: 675961 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (254)
- java分布式应用架构 (22)
- SSH框架整合 (6)
- java web 学习笔记 (49)
- java 学习笔记 (56)
- struts 2 学习 (6)
- Hibernate学习 (10)
- spring 学习 (2)
- 客户端编程(javascript) (4)
- IDE使用 (13)
- 生命 人生 (6)
- 系统维护 (3)
- 技术篇 (10)
- MySql (2)
- J2ME (1)
- java网络编程 (4)
- 数据库 (5)
- C/C++ (8)
- Oracle (7)
- 软件测试 (0)
- 软件的安装和部署 (0)
- Java快讯 (1)
- swt (1)
- Flex (1)
- 软件工程 (1)
- PostgreSQL (1)
- sql server2000 (2)
- 嵌入式数据库sqlite (5)
- J2EE (1)
- XML (1)
- ibatis3(MyBatis) (6)
- Linux&Unix (1)
- velocity (1)
- 回报社会 (4)
- 软件项目管理 (3)
- android研究 (3)
- C# (2)
- Objective-C (1)
- 音乐 (0)
- webx (1)
- JMS (1)
- maven软件项目管理 (1)
- 分布式服务 (0)
- 云平台 (0)
- 分布式存储 (1)
- 分布式系统架构 (0)
- 移动互联网 (1)
- ZooKeeper (1)
最新评论
-
liyys:
楼主,可不可以发这个项目的源码工程出来分享一下,少了几个类。楼 ...
仿照Hibernate实现一个SQLite的ORM框架 -
liyys:
少了一些类的源码没有粘贴出来
仿照Hibernate实现一个SQLite的ORM框架 -
honglei0412:
我使用的是这种方式获取db文件的目录但是 URL p = Fi ...
使用sqlite注意事项 -
honglei0412:
大侠 能不能说明下DbFile您是怎么做的吗?
使用sqlite注意事项 -
ahack:
刚写完mapping才发现早就有人写好了。仔细一看还都是针对的 ...
仿照Hibernate实现一个SQLite的ORM框架
1、相关接口
2、转换器工具
package org.liufei.jweb.reflection.type; /** * * @author 刘飞 * * @param <T> */ public interface TypeHandler { public Object getValue(Object value); }
2、转换器工具
package org.liufei.jweb.reflection.type; import java.util.HashMap; import java.util.Map; import javax.servlet.ServletContext; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import org.apache.log4j.Logger; import org.liufei.jweb.reflection.type.http.HttpServletRequestTypeHandler; import org.liufei.jweb.reflection.type.http.HttpServletResponseTypeHandler; import org.liufei.jweb.reflection.type.http.HttpSessionTypeHandler; import org.liufei.jweb.reflection.type.http.ServletContextTypeHandler; import org.liufei.jweb.util.Assert; public class JavaTypeHandlers { private static transient final Logger logger = Logger .getLogger(JavaTypeHandlers.class); private static final Map<Class<?>, TypeHandler> TYPE_HANDLERS = new HashMap<Class<?>, TypeHandler>(); private static final Class<?>[] HTTP_SERVLET_API_CLASSES = new Class<?>[]{ ServletContext.class, ServletRequest.class, ServletResponse.class, HttpServletRequest.class, HttpServletResponse.class, HttpSession.class } ; static { try { TYPE_HANDLERS.put(int.class, IntegerHandler.class .newInstance()); TYPE_HANDLERS.put(Integer.class, IntegerHandler.class .newInstance()); TYPE_HANDLERS.put(boolean.class, BooleanHandler.class .newInstance()); TYPE_HANDLERS.put(Boolean.class, BooleanHandler.class .newInstance()); TYPE_HANDLERS.put(long.class, LongHandler.class .newInstance()); TYPE_HANDLERS.put(Long.class, LongHandler.class .newInstance()); TYPE_HANDLERS.put(float.class, FloatHandler.class .newInstance()); TYPE_HANDLERS.put(Float.class, FloatHandler.class .newInstance()); TYPE_HANDLERS.put(double.class, DoubleHandler.class .newInstance()); TYPE_HANDLERS.put(Double.class, DoubleHandler.class .newInstance()); TYPE_HANDLERS.put(char.class, CharacterHandler.class .newInstance()); TYPE_HANDLERS.put(Character.class, CharacterHandler.class.newInstance()); TYPE_HANDLERS.put(short.class, ShortHandler.class .newInstance()); TYPE_HANDLERS.put(Short.class, ShortHandler.class .newInstance()); TYPE_HANDLERS.put(byte.class, ByteHandler.class .newInstance()); TYPE_HANDLERS.put(Byte.class, ByteHandler.class .newInstance()); TYPE_HANDLERS.put(String.class, StringHandler.class .newInstance()); } catch (InstantiationException e) { logger.error("init TypeHandler failed.", e); throw new RuntimeException("init TypeHandler failed.", e) ; } catch (IllegalAccessException e) { logger.error("init TypeHandler failed.", e); throw new RuntimeException("init TypeHandler failed.", e) ; } } public TypeHandler getUnsupportedDataHandler(Class<?> fieldType) { return new UnsupportedDataHandler(fieldType); } /** * 扩展用户自定义的类型注入插件。 * @param typeHandlerMap */ public static void register(Map<Class<?>, TypeHandler> typeHandlerMap) { Assert.notNull(typeHandlerMap) ; if(typeHandlerMap == null) { return ; } logger.debug("\n\tregister TypeHandler map : " + typeHandlerMap + "\n") ; if(typeHandlerMap.size() > 0) { TYPE_HANDLERS.putAll(typeHandlerMap) ; } } /** * 扩展用户自定义的类型注入插件。 * @param clazz * @param typeHandler */ public static void register(Class<?> clazz, TypeHandler typeHandler) { Assert.notNull(clazz) ; Assert.notNull(typeHandler) ; if(clazz == null || typeHandler == null) { return ; } logger.debug("\n\tregister TypeHandler " + clazz + " = " + typeHandler.getClass() + "\n") ; TYPE_HANDLERS.put(clazz, typeHandler) ; } /** * 扩展用户自定义的类型注入插件。 * @param classes 一般是该类的父类和接口组成的数组。 * @param typeHandler */ public static void register(Class<?>[] classes, TypeHandler typeHandler) { Assert.notNull(classes) ; Assert.notNull(typeHandler) ; Assert.notEmpty(classes) ; if(classes == null || typeHandler == null){ return ; } logger.debug("\n\tregister multiple classes ( size = " + classes.length + " ) TypeHandler " + typeHandler.getClass() + " begin...\n") ; if(classes.length > 0) { int i = 1 ; for (Class<?> clazz : classes) { logger.debug("\n\t[" + i + "] register TypeHandler " + clazz + " = " + typeHandler.getClass() + "\n") ; TYPE_HANDLERS.put(clazz, typeHandler) ; i++ ; } } logger.debug("\n\tregister multiple classes ( size = " + classes.length + " ) TypeHandler " + typeHandler.getClass() + " end...\n") ; } /** * 卸载类型转换插件 * @param typeHandlerMap */ public static void unInstall(Map<Class<?>, TypeHandler> typeHandlerMap) { Assert.notNull(typeHandlerMap) ; if(typeHandlerMap == null) { return ; } logger.debug("\n\tunInstall TypeHandler map " + typeHandlerMap + "\n") ; if(typeHandlerMap.size() > 0) { for (Object key : typeHandlerMap.keySet()) { typeHandlerMap.remove(key) ; } } } /** * 卸载类型转换插件 * @param classes */ public static void unInstall(Class<?>... classes) { Assert.notNull(classes) ; if(classes == null) { return ; } if(classes.length > 0) { for (Class<?> clazz : classes) { logger.debug("\n\tunInstall TypeHandler for class " + clazz + "\n") ; TYPE_HANDLERS.remove(clazz) ; } } } /** * 注册Servlet API相关对象。 * @param request * @param response * @param sessionCreate 由 HttpServletRequest 获取 HttpSession 时用到 * {@link javax.servlet.http.HttpServletRequest#getSession(boolean)} * */ public static void httpServletRegister(HttpServletRequest request, HttpServletResponse response, boolean sessionCreate) { httpServletRegister(request, response, request.getSession(sessionCreate), request.getSession(sessionCreate).getServletContext()) ; } /** * 注册Servlet API相关对象。 * @param request * @param response * @param session * @param servletContext */ public static void httpServletRegister(HttpServletRequest request, HttpServletResponse response, HttpSession session, ServletContext servletContext) { Assert.notNull(request) ; Assert.notNull(response) ; Assert.notNull(session) ; Assert.notNull(servletContext) ; logger.debug( "\n\tregister httpServlet api args TypeHandler [ " + HttpServletRequest.class + ", " + HttpServletResponse.class + ", " + ServletRequest.class + ", " + ServletResponse.class + ", " + HttpSession.class + ", " + ServletContext.class + " ].\n" ) ; register(HttpServletRequest.class, new HttpServletRequestTypeHandler(request)) ; register(HttpServletResponse.class, new HttpServletResponseTypeHandler(response)) ; register(ServletRequest.class, new HttpServletRequestTypeHandler(request)) ; register(ServletResponse.class, new HttpServletResponseTypeHandler(response)) ; register(HttpSession.class, new HttpSessionTypeHandler(session)) ; register(ServletContext.class, new ServletContextTypeHandler(servletContext)) ; } public static void removeHttpServletRegister() { logger.debug( "\n\tunInstall httpServlet api args TypeHandler [ " + HttpServletRequest.class + ", " + HttpServletResponse.class + ", " + ServletRequest.class + ", " + ServletResponse.class + ", " + HttpSession.class + ", " + ServletContext.class + " ].\n" ) ; unInstall(HTTP_SERVLET_API_CLASSES) ; } /** * * @param value * 需要转化的值 * @param clazz * 要转化的类型 * @return */ public static Object convertValueToType(Object value, Class<?> clazz) { logger.debug("\n\tconvert value " + value + "( type : " + value.getClass().getName() + ")" + " to type " + clazz.getName() + "\n") ; TypeHandler typeHandler = null ; typeHandler = TYPE_HANDLERS.get(clazz); if(typeHandler != null) { return typeHandler.getValue(value); } else if(typeHandler == null) {//接口、父类 Class<?>[] clazzs = clazz.getInterfaces() ; for (Class<?> clazzi : clazzs) { typeHandler = TYPE_HANDLERS.get(clazzi); if(typeHandler != null) { return typeHandler.getValue(value); } } Class<?> superclazz = clazz.getSuperclass() ; typeHandler = TYPE_HANDLERS.get(superclazz); if(typeHandler != null) { return typeHandler.getValue(value); } } if (typeHandler == null) { logger.error("\n\tunknown data type :" + clazz + "\n") ; throw new RuntimeException("unknown data type :" + clazz); } return null ; } public static class IntegerHandler implements TypeHandler { public Integer getValue(Object value) { return Integer.valueOf(value.toString()); } } public static class StringHandler implements TypeHandler { public String getValue(Object value) { return value.toString(); } } public static class LongHandler implements TypeHandler { public Long getValue(Object value) { return Long.valueOf(value.toString()); } } public static class FloatHandler implements TypeHandler { public Float getValue(Object value) { return Float.valueOf(value.toString()); } } public static class DoubleHandler implements TypeHandler { public Double getValue(Object value) { return Double.valueOf(value.toString()); } } public static class BooleanHandler implements TypeHandler { public Boolean getValue(Object value) { if (value.toString().length() > 1) { return Boolean.valueOf(value.toString()); } else if (value.toString().length() <= 1) { char c = value.toString().charAt(0); if (c == '1' || c == 'y' || c == 'Y' || c == 't' || c == 'T') return Boolean.TRUE; else return Boolean.FALSE; } else { return Boolean.FALSE; } } } public static class CharacterHandler implements TypeHandler { public Character getValue(Object value) { return Character.valueOf(value.toString().charAt(0)); } } public static class ShortHandler implements TypeHandler { public Short getValue(Object value) { return Short.valueOf(value.toString()); } } public static class ByteHandler implements TypeHandler { public Byte getValue(Object value) { return Byte.valueOf(value.toString()); } } public static class UnsupportedDataHandler implements TypeHandler { private Class<?> fieldType; public UnsupportedDataHandler(Class<?> fieldType) { this.fieldType = fieldType; } public Object getValue(Object fieldValue) { throw new RuntimeException("unknown data type :" + fieldType); } } }
发表评论
-
Spring MVC集成velocity扩展
2013-07-23 17:18 32091、扩展velocity的视图 [code=" ... -
【分布式系统工程实现】CAP理论及系统一致性
2013-03-08 16:05 999印象中CAP理论开始流行 ... -
【分布式系统工程实现】分布式事务
2013-03-08 16:03 1337CAP理论虽然告诉我们,一致性和可用性二者不可兼得,但这并不 ... -
用消息队列和消息应用状态表来消除分布式事务
2013-03-08 16:01 1230由于数据量的巨大,大 ... -
使用MBean获取tomcat和jboss端口
2012-04-10 21:29 2639/** * 根据协议和scheme获取服务端口号 ... -
淘宝网架构概述
2011-12-14 19:45 72众所周知,淘宝网是一 ... -
淘宝网的HttpClient工具
2011-11-23 21:02 47package com.taobao.pegasus.comm ... -
在Tomcat中通过JOTM支持JTA
2011-11-04 15:57 1818<?xml version='1.0' encoding ... -
sql server2005备份还原
2011-09-22 11:29 9261、先建立一个同名数据库,停止SQL SERVER2005 ... -
apache mina开发文件传输服务器
2011-09-19 18:03 7701服务器接收端 /** * */ package o ... -
使用 Apache MINA 2 开发网络应用
2011-09-19 10:01 1121简介: Apache MINA 2 是一个开发高性能和高可伸缩 ... -
HTTP上传工具
2011-09-14 11:36 1825package com.dayo.tool; impor ... -
使用mina 作代理服务器例子
2011-09-07 14:38 2318import java.net.InetSocketAddre ... -
Java 通过 HTTP 下载文件
2011-09-07 14:35 1032package core.spider; import ... -
Java 的 HTTP 客户端 http4j 示例代码
2011-09-07 14:32 1406package com.google.code.http4j. ... -
获取IP地址
2011-09-07 13:41 2372public String getIpAddrByReques ... -
netty telnet 应用实例server代码
2011-09-07 12:21 1827public class TelnetServer { ... -
Netty中使用Apache Common FileUpload
2011-09-07 12:19 1241/** * 用Netty来实现上传 */ publi ... -
netty实现Socket NIO服务器
2011-09-06 15:58 8750package org.liufei.dccserver; ... -
Netty简介
2011-09-05 15:55 1860Netty 介绍 2010-08-05 15:20 ...
相关推荐
C# To Java converter是一款将C#代码片段或者C#项目转换为JAVA的工具。 转换所有版本的C#代码 评估所有引用的程序集和.NET项目,以便更完整地解析外部引用 许多转换和格式化选项 将C#代理和lambdas转换为Java接口...
instanceVar.java 定义一个实例成员变量 invokeByObject.java 对象实参传递示例程序 invokeByValue.java 传值调用示例程序 invokeMethod.java 同一个类中调用方法示例 invokeOther.java 类的外部调用方法示例 ...
javax.sound.sampled.spi 在提供新音频设备、声音文件 reader 和 writer,或音频格式转换器时,提供将为其创建子类的服务提供者的抽象类。 javax.sql 为通过 JavaTM 编程语言进行服务器端数据源访问和处理提供 API...
Tcp服务端与客户端的JAVA实例源代码,一个简单的Java TCP服务器端程序,别外还有一个客户端的程序,两者互相配合可以开发出超多的网络程序,这是最基础的部分。 递归遍历矩阵 1个目标文件,简单! 多人聊天室 3...
Tcp服务端与客户端的JAVA实例源代码,一个简单的Java TCP服务器端程序,别外还有一个客户端的程序,两者互相配合可以开发出超多的网络程序,这是最基础的部分。 递归遍历矩阵 1个目标文件,简单! 多人聊天室 3...
货币换算用Java编写的货币转换器(转换器并不总是正确的,因为市场每天都在变化)
Tcp服务端与客户端的JAVA实例源代码,一个简单的Java TCP服务器端程序,别外还有一个客户端的程序,两者互相配合可以开发出超多的网络程序,这是最基础的部分。 递归遍历矩阵 1个目标文件,简单! 多人聊天室 3...
javax.sound.sampled.spi 在提供新音频设备、声音文件 reader 和 writer,或音频格式转换器时,提供将为其创建子类的服务提供者的抽象类。 javax.sql 为通过 JavaTM 编程语言进行服务器端数据源访问和处理提供 API。...
Java Remote Desktop 是一个Java 的远程桌面软件,支持很多特性例如文件传输、数据压缩、颜色转换、键盘鼠标事件转换等等。 最短路径算法实现 k-shortest-paths 这是一个实现了 Yen 的排名算法的无环路径的项目 ...
Java Remote Desktop 是一个Java 的远程桌面软件,支持很多特性例如文件传输、数据压缩、颜色转换、键盘鼠标事件转换等等。 最短路径算法实现 k-shortest-paths 这是一个实现了 Yen 的排名算法的无环路径的项目 ...
Java Remote Desktop 是一个Java 的远程桌面软件,支持很多特性例如文件传输、数据压缩、颜色转换、键盘鼠标事件转换等等。 最短路径算法实现 k-shortest-paths 这是一个实现了 Yen 的排名算法的无环路径的项目 ...
Java Remote Desktop 是一个Java 的远程桌面软件,支持很多特性例如文件传输、数据压缩、颜色转换、键盘鼠标事件转换等等。 最短路径算法实现 k-shortest-paths 这是一个实现了 Yen 的排名算法的无环路径的项目 ...
Java Remote Desktop 是一个Java 的远程桌面软件,支持很多特性例如文件传输、数据压缩、颜色转换、键盘鼠标事件转换等等。 最短路径算法实现 k-shortest-paths 这是一个实现了 Yen 的排名算法的无环路径的项目 ...
Java Remote Desktop 是一个Java 的远程桌面软件,支持很多特性例如文件传输、数据压缩、颜色转换、键盘鼠标事件转换等等。 最短路径算法实现 k-shortest-paths 这是一个实现了 Yen 的排名算法的无环路径的项目 ...
Java是一种面向对象的编程语言,它支持封装、继承和多态等面向对象的基本概念。Java具有静态类型检查机制,需要在编译时指定变量的类型。Java提供了基本数据类型,如int、double、float等,也支持引用数据类型,如类...
Java Remote Desktop 是一个Java 的远程桌面软件,支持很多特性例如文件传输、数据压缩、颜色转换、键盘鼠标事件转换等等。 最短路径算法实现 k-shortest-paths 这是一个实现了 Yen 的排名算法的无环路径的项目 ...
Java Remote Desktop 是一个Java 的远程桌面软件,支持很多特性例如文件传输、数据压缩、颜色转换、键盘鼠标事件转换等等。 最短路径算法实现 k-shortest-paths 这是一个实现了 Yen 的排名算法的无环路径的项目 ...
Tcp服务端与客户端的JAVA实例源代码,一个简单的Java TCP服务器端程序,别外还有一个客户端的程序,两者互相配合可以开发出超多的网络程序,这是最基础的部分。 递归遍历矩阵 1个目标文件,简单! 多人聊天室 ...
javax.sound.sampled.spi 在提供新音频设备、声音文件 reader 和 writer,或音频格式转换器时,提供将为其创建子类的服务提供者的抽象类。 javax.sql 为通过 JavaTM 编程语言进行服务器端数据源访问和处理提供 API。...
Tcp服务端与客户端的JAVA实例源代码,一个简单的Java TCP服务器端程序,别外还有一个客户端的程序,两者互相配合可以开发出超多的网络程序,这是最基础的部分。 递归遍历矩阵 1个目标文件,简单! 多人聊天室 ...