- 浏览: 1511087 次
- 性别:
- 来自: 深圳
文章分类
- 全部博客 (595)
- Java咖啡厅 (208)
- IT杂侃 (23)
- 程序员笑话 (7)
- 我的后现代文学 (1)
- WEB编程 (116)
- 软件评测 (8)
- 操作系统 (3)
- 炫目Ruby (2)
- 行业知识 (7)
- 我的动漫情结 (6)
- 其他 (8)
- Window DIY (6)
- 古文学 (3)
- 转载文章 (2)
- IT百科 (7)
- 动态网页Active (1)
- 文档 (1)
- 设计理论 (11)
- .NET 快速开发 (18)
- 英语学习 (6)
- 网站分析 (2)
- 开源软件 (4)
- 数据库 (28)
- 笔记 (4)
- 源代码共享 (8)
- IT人物 (2)
- 软件管理 (10)
- 小说创作 (0)
- 大众软件 (12)
- 网站评论 (3)
- 小虾乱说 (10)
- 游戏 (8)
- 心情 (3)
- 娱乐休闲 (2)
- Delphi编程 (1)
- PHP编程 (4)
- 中间件 (2)
- 移动开发 (2)
- Office应用 (2)
- Photoshop (1)
- Eclipse (5)
- 面试题 (1)
- 手机评测 (0)
- VBScript (1)
- WEB前端-EXT (3)
- 吐槽 (1)
- Java咖啡厅 Ibatis (1)
- javascript Ext (1)
- jquery ui (1)
- require (1)
- WEB编程 Javascript (1)
- jquery (1)
- Swing (1)
- 分布式 (1)
最新评论
-
zhangjihao:
28. 下面哪个Set是排序的? A. LinkedHas ...
Java面试题(选择题) -
zhangthe9:
ICMP报文被封装在IP包里,也就是说他是由IP协议承载的,从 ...
Java面试题(选择题) -
zhunengfei:
真的假的?
自已写的jquery ui框架 -
white_crucifix:
少年,发烫是所有智能手机的特点,而莫名发烫是所有安卓手机的特点 ...
【吐槽】三星手机的OS是一砣屎 -
suzu88:
试了一下,可以用。如果美化一下控件和窗体更有意思。
一个用XML构建Swing视图的框架
我们在做Java的开发时,我们很不希望写SQL语句,因为Eclipse里面没有对SQL进行检查的机制,不小心写错了,我们很难在冗长的SQL语句中,找出要SQL语句的错误。所以我们喜欢用ORM方式来做数据库的操作。
这里我写了一个简单的实现ORM的操作的方法,希望对大家的工作会有一定的帮助。
1.首先我们要定义一个Java注释类,叫Id,自从Java1.5以后,我们可以用注释这种方法来取代以前用XML来定义的这种方法。
import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; @Retention(RetentionPolicy.RUNTIME) public @interface Id { public String name = "id"; }
有了这个注释类后,我们可以定义一个实体的ID是哪一个属性。
2.接下来,我们就可以定义实体类了。我用的数据是SQLServer2005,但其实数据库应该可以适用。
数据库的表结构如下:
CREATE TABLE [dbo].[newsclass]( [id] [int] IDENTITY(1,1) NOT NULL, [name] [varchar](45) COLLATE Chinese_PRC_CI_AS NOT NULL, CONSTRAINT [PK__newsclass__7F60ED59] PRIMARY KEY CLUSTERED ( [id] ASC )WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY] ) ON [PRIMARY] GO SET ANSI_PADDING OFF
我们定义一个NewsClass类,来对应这张表,
public class NewsClass { @Id private String id; private String name; public String getId() { return id; } public void setId(String id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } }
接下来,我们可以定义一个Dao的类,叫ORMDao。
public class ORMDao { /** * 获取实体的ID值 * * @param entity * @return */ public String getIdField(Object entity) { String idField = null; try { Field[] fields = Class.forName("com.trip.info.entity.News") .getDeclaredFields(); System.out.println(fields.length); Annotation[] annotations; for (Field field : fields) { annotations = field.getDeclaredAnnotations(); for (Annotation a : annotations) { if (a.annotationType().getSimpleName().equals("Id")) { idField = field.getName(); } } } } catch (Exception ex) { ex.printStackTrace(); } return idField; } /** * 对象查询 * * @param entity * @param pageNo * @param pageSize * @param orderType * @return * @throws Exception */ public void query(Object entity){ Field[] fields = entity.getClass().getDeclaredFields(); String sqlSelect = ""; String sqlWhere = ""; String sql = ""; Class cl = entity.getClass(); boolean firstFlag = true; ArrayList<String> cols = new ArrayList<String>(); String id = this.getIdField(entity); String className = entity.getClass().getSimpleName(); for (int i = 0; i < fields.length; i++) { String fieldName = fields[i].getName(); if (i != fields.length - 1) { sqlSelect += fieldName + ","; } else { sqlSelect += fieldName; } cols.add(fieldName); String methodName = "get" + fieldName.substring(0, 1).toUpperCase() + fieldName.substring(1, fieldName.length()); try{ if (cl.getMethod(methodName).invoke(entity) != null) { if (firstFlag) { sqlWhere += " where " + fieldName + "='" + cl.getMethod(methodName).invoke(entity) + "'"; firstFlag = false; } else { sqlWhere += " and " + fieldName + "='" + cl.getMethod(methodName).invoke(entity) + "'"; } } }catch(Exception e){ e.printStackTrace(); } } sql = "select " + sqlSelect + " from " + className + sqlWhere; System.out.println("the final sql :" + sql); } public static void main(String[] args) { ORMDao dao = new ORMDao(); NewsClass newsclass = new NewsClass(); newsclass.setId("1"); newsclass.setName("国际新闻"); dao.query(newsclass); } }
4. 用这种方法,我们对于单表的查询,不再需要自己写SQL代码,而是用Java对象来对应,自动生成SQL代码,大大减轻了开发的难度和开发量。
评论
3 楼
tntxia
2010-07-09
主键的注释,有些情况下,我们必须了解实体中,哪个属性是主键
2 楼
guoguo1010
2010-07-06
可以问下 刚开始注释的那个id有什么用啊
1 楼
guoguo1010
2010-07-02
麻烦能不能写下注释啊 谢谢了哈
发表评论
-
原创程序- Web版数据库管理
2017-11-15 00:39 1185这是我自已写的Web版的数据库管理工具,主要是依赖于JDBC ... -
Eclipse创建Web项目
2017-07-29 10:53 7841. 打开创建Web项目的对话框 2 ... -
Ant常用的命令
2016-06-16 13:31 13531. 使用Ant生成War包: <war ... -
在Eclipse上使用Ant发布项目
2015-10-17 15:03 1378这里笔者使用是Eclip ... -
Resin中增加一个虚拟目录的方法
2015-09-13 12:53 1126打开resin.config 找到到<h ... -
一个用XML构建Swing视图的框架
2015-09-06 23:12 2611平常想用Java写一些 ... -
Eclipse常见问题
2015-08-24 19:41 743如果Eclipse被强制关闭时,Tomcat可能没有 ... -
Spring Tools Suite 入门教程
2015-05-09 09:15 0Spring Tools Suit,这里简称STS,是 ... -
使用FTP的方法
2015-03-01 17:49 10241. FlashFXP 收费的软件,但是比较好 ... -
关于Spring
2015-02-16 14:46 2009Spring是一个轻量级J2EE框架。 Sp ... -
用Java实现发送邮件到163
2014-12-28 14:50 3862/* 在java版经常看到有人问如何用javamai ... -
Hibernate入门
2014-12-27 01:34 932前言 使用面向对象的语言和关系型的数据库,开 ... -
修改date.toLocaleString()的警告
2014-10-15 11:31 2556我们在写程序的时候,经常要查看时间,所以我们经常会用到 ... -
Java基础题 -- 简述题
2014-04-26 13:44 731(1)简述Java的运行机制 答案:Java语言根 ... -
Java基础题 -- 填空题
2014-04-26 10:00 18921. ______是一个抽象的计算机,和实际的计算机一样, ... -
FreeMaker入门
2014-04-07 19:51 1021第一章 简介 1 什么是FreeMaker ... -
jdk8 新语法
2014-04-01 23:32 1288import java.util.*; public ... -
MyBatis 入门
2014-03-27 23:31 1727每个MyBatis的中心是SqlSessionFact ... -
Jetty入门
2014-02-26 23:48 1583Jetty是一个简易的WebServer框架,使用 ... -
用Swing做的H2管理器
2014-02-24 23:07 1573MainFrame 继承了 JFrame , 增加c ...
相关推荐
本篇文章将深入探讨如何在Java环境下,结合MySQL数据库,利用动态代理和反射技术来实现简单的ORM框架。 首先,我们需要了解动态代理和反射的基本概念。动态代理是在运行时创建一个接口的实现类,这个实现类会调用...
在数据库连接中,反射机制被广泛应用,特别是在ORM(Object-Relational Mapping)框架如Hibernate中,它帮助我们实现了对底层数据库的操作。 Hibernate是一个流行的Java ORM框架,它的核心功能是将Java对象映射到...
这篇博文“利用java反射、注解及泛型模拟ORM实现”旨在探讨如何结合这三种技术来实现对象关系映射(ORM),这是一种将数据库表与Java对象之间进行绑定的技术,简化了数据操作。 首先,我们来理解一下这三个概念: ...
在本案例中,"简单实现ORM"是指通过反射机制来实现对象关系映射(Object-Relational Mapping),这是一种将数据库中的数据与Java对象之间建立映射关系的技术,使得开发者可以更方便地操作数据库。 ORM的主要目的是...
由于Java反射机制允许程序在运行时构造和访问任何类的属性和方法,它为Reflect-ORM框架提供了实现的理论基础。通过反射,框架可以动态地读取对象的属性信息,将这些信息转换为数据库的表结构,以及将数据库查询结果...
Java反射的核心类包括`java.lang.Class`、`java.lang.reflect.Method`、`java.lang.reflect.Field`等。通过这些类,我们可以获取类的信息,创建类的实例,甚至在运行时调用私有方法和修改私有字段。 数据库连接池...
本程序集的核心是利用Java解析XML文件,将XML中的数据映射到数据库,并通过反射机制进行数据库操作。下面将详细阐述这些知识点。 首先,XML解析在Java中通常有两种方式:DOM(Document Object Model)和SAX(Simple...
### Java反射机制详解 #### 一、什么是Java的反射机制 Java反射机制是Java语言的一种重要特性,使得Java成为了一种动态性很强的语言。通过反射,可以在程序运行时获取类的信息,包括类名、父类、接口、字段、方法...
Java反射机制是Java编程语言中的一个强大特性,它允许程序在运行时检查并操作类、接口、字段和方法的信息,打破了通常编译时静态绑定的限制。通过反射,我们可以动态地创建对象,调用方法,访问和修改字段值,甚至...
Java反射机制是Java编程语言中的一个强大特性,它允许程序在运行时检查和操作类、接口、字段和方法的信息,甚至动态地创建对象并调用其方法。通过反射,开发者可以实现高度灵活和动态的代码,这对于框架开发、元编程...
接着,我们来看Java反射机制。反射允许程序在运行时检查类、接口、字段和方法的信息,甚至可以动态调用方法和访问字段。在JDBC封装中,反射非常有用,因为它允许在运行时创建和执行SQL语句,而不必在代码中硬编码...
Java反射机制是Java编程语言中的一个强大特性,它允许程序在运行时检查并操作类、接口、字段和方法等对象。这种能力使得Java代码能够具备动态性,可以在不知道具体类名的情况下实例化对象,调用方法,访问字段,以及...
Java反射机制是Java编程语言中的一个核心特性,它允许运行中的Java程序对自身进行检查并且可以直接操作程序的内部属性。这一机制使得Java具备了高度的灵活性和动态性,尤其是在处理元数据、创建对象、调用方法和访问...
### Java的反射机制及其实际应用 #### 一、引言 ...总之,Java反射机制是一项强大的工具,它能够在运行时动态地获取和操作类的信息。然而,应该谨慎使用反射,避免滥用造成不必要的性能损失或安全风险。
Java反射机制是Java编程语言中的一个强大特性,它允许程序在运行时检查和操作类、接口、字段和方法等对象。这一机制对于理解和利用Java的动态性至关重要,尤其是在进行复杂系统设计、框架开发以及元数据驱动的应用中...
综上所述,Java反射机制在数据持久层轻量级ORM框架中扮演着核心角色,它使得框架能够灵活地处理对象与数据库之间的映射,降低了开发难度,提高了代码的可维护性和可扩展性。然而,虽然反射带来了诸多便利,但也需要...
总之,Java反射机制为开发者提供了运行时的灵活性,让我们能够以一种动态的方式操控类和对象,从而实现了许多高级功能。在理解和使用反射时,需要权衡其优点和潜在的风险,合理地将其应用于项目中。
- 数据库操作:ORM框架如Hibernate利用反射将数据库记录映射为Java对象。 - 测试工具:JUnit测试框架使用反射来执行测试方法。 - 动态代理:动态生成实现特定接口的代理对象,如动态数据访问对象(DAO)或动态...
Java反射机制是Java编程语言中的一个强大特性,它允许程序在运行时检查和操作类、接口、对象以及它们的方法和字段。通过反射,开发者可以实现动态类型检查、元编程、插件系统等功能,大大增强了代码的灵活性。以下是...
总之,通过Java反射和注解自定义ORM框架,可以实现更加灵活、定制化的数据库操作。这种方式不仅提高了开发效率,还降低了代码的耦合度,使得项目维护更加容易。在实际应用中,可以根据项目的具体需求进行适当的调整...