java 反射 数据库_数据库访问(Java 反射) + Json(数据对象)

一、Java 反射机制

二、利用反射实现数据库操作

三、数据对象与json的转换

一、Java 反射机制

JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。

JAVA反射(放射)机制:“程序运行时,允许改变程序结构或变量类型,这种语言称为动态语言”。从这个观点看,Perl,Python,Ruby是动态语言,C++,Java,C#不是动态语言。但是JAVA有着一个非常突出的动态相关机制:Reflection,用在Java身上指的是我们可以于运行时加载、探知、使用编译期间完全未知的classes。换句话说,Java程序可以加载一个运行时才得知名称的class,获悉其完整构造(但不包括methods定义),并生成其对象实体、或对其fields设值、或唤起其methods。

二、利用反射实现数据库操作

数据库操作,反射的好处:

(1) dao 层只需要编写一次基础数据库类操作代码(比如,增删改查等等),就可以充分利用继承关系实现不同模型的数据库操作。

(2) 修改数据库的表字段基本上不用大的修改 dao 层的代码(比如 sql 语句等等)

本例工程的目录组织结构大致如下:

89e2edd4e33b5c886924e96807e5877a.png

也可以将 LTBeanMapConverter.java 放到 dao.common 包中。

1、本实例使用 mysql 数据库。基础配置文件,请参考上一篇文章《MySQL + Tomcat 工程》 http://www.cnblogs.com/matchboxy/articles/4113834.html

2、编写 model 类,本例中为 LTNews.java 类。

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

1 packagecom.matchbox.model.news;2

3 importjava.io.Serializable;4

5 importjavax.persistence.Column;6 importjavax.persistence.GeneratedValue;7 importjavax.persistence.GenerationType;8 importjavax.persistence.Id;9 importjavax.persistence.Table;10

11

12 /**

13 *@authorMATCH14 * @date 14-12-2915 */

16

17

18 @Table(name="news")19 public class LTNews implementsSerializable20 {21 private longid;22 private longtime;23 privateString url;24 privateString imgUrl;25 privateString type;26 privateString title;27 privateString author;28 privateString source;29 privateString outline;30 private intlanguage;31 private intfavourite;32 private intcomment;33 private intclick;34

35 @Column(name="id")36 @Id37 @GeneratedValue(strategy =GenerationType.IDENTITY)38 public longgetId() {39 returnid;40 }41

42 public void setId(longid) {43 this.id =id;44 }45

46 @Column(name="time")47 public longgetTime() {48 returntime;49 }50

51 public void setTime(longtime) {52 this.time =time;53 }54

55 @Column(name="url")56 publicString getUrl() {57 returnurl;58 }59

60 public voidsetUrl(String url) {61 this.url =url;62 }63

64 @Column(name="imgUrl")65 publicString getImgUrl() {66 returnimgUrl;67 }68

69 public voidsetImgUrl(String imgUrl) {70 this.imgUrl =imgUrl;71 }72

73 @Column(name="type")74 publicString getType() {75 returntype;76 }77

78 public voidsetType(String type) {79 this.type =type;80 }81

82 @Column(name="title")83 publicString getTitle() {84 returntitle;85 }86

87 public voidsetTitle(String title) {88 this.title =title;89 }90

91 @Column(name="author")92 publicString getAuthor() {93 returnauthor;94 }95

96 public voidsetAuthor(String author) {97 this.author =author;98 }99

100 @Column(name="source")101 publicString getSource() {102 returnsource;103 }104

105 public voidsetSource(String source) {106 this.source =source;107 }108

109 @Column(name="outline")110 publicString getOutline() {111 returnoutline;112 }113

114 public voidsetOutline(String outline) {115 this.outline =outline;116 }117

118 @Column(name="language")119 public intgetLanguage() {120 returnlanguage;121 }122

123 public void setLanguage(intlanguage) {124 this.language =language;125 }126

127 @Column(name="favourite")128 public intgetFavourite() {129 returnfavourite;130 }131

132 public void setFavourite(intfavourite) {133 this.favourite =favourite;134 }135

136 @Column(name="comment")137 public intgetComment() {138 returncomment;139 }140

141 public void setComment(intcomment) {142 this.comment =comment;143 }144

145 @Column(name="click")146 public intgetClick() {147 returnclick;148 }149

150 public void setClick(intclick) {151 this.click =click;152 }153 }

LTNews.java

其中:@Table(name="news") 为 news 数据库表。

@Column(name="id")

@Id

@GeneratedValue(strategy = GenerationType.IDENTITY)

为表中列名为 id 的列为主键,自增长类型。每一个 @Column(name="***") 写在 get 方法前面,对应数据表中的列名到相应的属性,一般来讲属性名最好与列名一致。

3、编写基础接口类 dao.common.LTGenericDao.java ,主要声明一些要实现的数据库操作。

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

1 packagecom.matchbox.dao.common;2

3 importjava.io.Serializable;4 importjava.util.List;5 importjava.util.Map;6

7

8 /**

9 *@authorMATCH10 * @date 14-12-3011 */

12

13

14 public interface LTGenericDao

15 {16 publicString getTableName();17 publicString getPk();18 public ListgetAll();19 public longgetCount();20

21 publicID insert(T object);22 public List insertBatch(ListlistObject);23

24 public intdelete(ID id);25 public int deleteBatch(ListlistIds);26

27 public intupdate(T object);28

29 publicT select(ID id);30 public List selectByIds(Listids);31 public List selectByMap(Mapmap);32 }

LTGenericDao.java

这里需要运用模板的知识,其中: T 为模型类的 class , ID 为模型类对应的表的主键类型。

4、编写基础实现类 dao.common.impl.LTGenericDaoImpl.java ,提供接口类的基础实现。

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

1 packagecom.matchbox.dao.common.impl;2

3 importjava.beans.BeanInfo;4 importjava.beans.IntrospectionException;5 importjava.beans.Introspector;6 importjava.beans.PropertyDescriptor;7 importjava.io.Serializable;8 importjava.sql.Connection;9 importjava.sql.PreparedStatement;10 importjava.sql.SQLException;11 importjava.sql.Statement;12 importjava.sql.Types;13 importjava.util.ArrayList;14 importjava.util.Arrays;15 importjava.util.Date;16 importjava.util.HashMap;17 importjava.util.List;18 importjava.util.Map;19

20 importjavax.persistence.Column;21 importjavax.persistence.GeneratedValue;22 importjavax.persistence.GenerationType;23 importjavax.persistence.Id;24 importjavax.persistence.Table;25 importjavax.persistence.Transient;26

27 importorg.apache.commons.beanutils.BeanUtils;28 importorg.apache.commons.lang.StringUtils;29 importorg.springframework.core.annotation.AnnotationUtils;30 importorg.springframework.jdbc.core.JdbcTemplate;31 importorg.springframework.jdbc.core.PreparedStatementCreator;32 importorg.springframework.jdbc.core.support.JdbcDaoSupport;33 importorg.springframework.jdbc.support.GeneratedKeyHolder;34 importorg.springframework.jdbc.support.KeyHolder;35

36 importcom.matchbox.dao.common.LTGenericDao;37 importcom.matchbox.dao.co

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值