怎样不通过框架,将javabean映射到数据库中?

问题描述

是通过反射机制实现吗?面试的时候我说通过hibernate,他说效率比较低,因之前的项目没有自己做过映射到数据库。谢谢了!

解决方案

我写过这么一个工具,http://zyn010101.iteye.com/admin/blogs/1562103
解决方案二:
也许面试官想让你说内存数据库。。。
解决方案三:
首先写一段程序,通过读取配置文件的数据源配置(可能是java属性文件,xml 或者txt)判定需要链接的数据库类型(mysql,oracle或者mssql),然后读取数据库信息(需要链接哪个数据库)。 根据以上信息,可以从系统数据库中查出,需要链接的数据库的所有信息(包括:所有表,视图的信息)。 获取到信息后,通过JAVA反射机制,就可以进而建立数据表到JAVA实体的对应关系(具体对照关系可以写在自己定义的配置文件中)。基本思路就是这样。具体实现,可以自己编码试一试。
解决方案四:
可以通过注解来对数据库做映射,通过配制实体对象的关系和实体之间的关系来反映到数据库里生成相应的数据表及关系。(可以到网上去找一些关于注解的说明)
解决方案五:
没理解清楚,不就是用SQL语句保存Bean的属性到数据表字段而已吧。你要自己写一框架那也是框架,还不如直接用人家的。
解决方案六:
我智商低,除了反射,其他的没懂!
解决方案七:
Hibernate的效率的确不如直接写sql效率高,不过省去了自己写sql的麻烦。可能就是鱼和熊掌不能兼得吧。。
解决方案八:
我不知道为什么面试的人说hibernate映射效率低下???难道是想给你下马威。最终的原理都是通过反射做到这一点
解决方案:
把hibernate效率低的部分去了就是你的答案了
解决方案:
存二进制数据,通过序列化反序列化
解决方案:
这个其实就是自己写咯。首先要解决1个问题:对应关系的问题。数据库表中的数据如何和你的对象建立关系?字段之间怎么映射?Hibernate/JPA的做法是采用配置文件或者注解来对应字段和对象成员变量的关系。如果你自己实现不妨采用直接映射的办法,即:成员变量和数据库字段名相同,一一对应。这个问题解决完之后,剩下的事情就简单了,你只需要用Resultset取数据,然后set成员变量(这里你采用反射)。Book book = new Book();while(rs.next()){ string filedName = getFiledName(i); //获取第i个成员名 Object val = rs.getObject(filedName); setObjectProp(book, filedName, val); //通过反射修改成员变量 i++;}
解决方案:
这个问题其实比较简单,最基本的就是采用反射字段和数据库返回结果集的映射关系,通过resultset获取一个ResultSetMetaData的对象,然后用他一一跟你的field反射做对应检查并复制,但是前提条件是你的feild的name必须跟你返回的结果集的字段名称严格对应才行。当然,你也可以自定义注解,或者xml、properti等方式,增加pojo与resultset的字段名的翻译处理,这样就不用非常严格的把pojo的field与结果集的字段名严格一一对应了。反射和jdbc接口都是java基础,好好看看jdk很简答。不过频繁的反射会带来额外的CPU和内存消耗,建议一次反射后将映射关系缓存起来,这样就省去很多不必要的操作步骤和系统资源了
解决方案:
就如前面提到的hibernate其实就是,但如果要自己实现一套完全没必要。我个人感觉这个问题是要使用反射,这里我给一个简单的例子:条件:1、javabean是符合POJO的,标准的get和set方法要有;2、表名、表字段要有对应匹配方式的,这里假设你的class类名就是表名,而属性名也是表字段名,同时属性类型与数据库字段自动转换不会冲突(不能属性是string而表字段是number);3、javabean中如果有属性也是javabean那么引用主键你是已经有了获取方式的,这个比较复杂暂不考虑。实现方式1、通过反射获取javabean的类,得到其对应的数据库表-->完成表映射2、通过反射获取javabean中的属性及对应值-->完成表字段映射3、SQL的拼装当然这是个非常简单的例子,如果要更强的功能那么就需要做更多的扩展,希望有帮助到你
解决方案:
JDBC+CONNECTIONPOOL效率应该高,但是编写麻烦。写一个泛型的主DAO,然后对应每张表一个POJO,一个DAO(继承主DAO)。
解决方案:
反射是肯定的,简单了说,Hibernate也是基于反射,只不过用了javasist字节码增强而已。

时间: 2024-10-23 11:43:04

怎样不通过框架,将javabean映射到数据库中?的相关文章

框架-JAVA问题:删除数据库中数据的代码,测试不会报错,但实际什么都删不了

问题描述 JAVA问题:删除数据库中数据的代码,测试不会报错,但实际什么都删不了 这些操作做完后,数据库里的t_product表中,id=2的数据依然在,不是刷新的问题,刷新也还在 解决方案 为什么你的三个函数保存.修改.删除方法调用sql的时候都没有传递sql参数值呢? 解决方案二: 调用mapper里面的sql代码的时候,把要删除的id传进去了吗?不应该是sqlsession.delete("",参数);吗? 解决方案三: 参数没带.sqlsession.delect带上id 解决

【MyBatis框架】高级映射-一对多查询

前面学习了一对一的查询,现在我们在刚才的数据模型基础上进行一对多的查询. 一对多查询 1.需求 查询订单及订单明细的信息. 2.sql语句 确定主查询表:订单表 确定关联查询表:订单明细表 在一对一查询基础上添加订单明细表关联即可. SELECT orders.*, USER.username, USER.sex, USER.address, orderdetail.id orderdetail_id, orderdetail.items_id, orderdetail.items_num, o

【MyBatis框架】高级映射-一对一查询

一对一查询 根据上面我们分析的订单商品数据模型(链接:12.订单商品数据模型-分析思路.txt),我们来写一下有关一对一的查询,分别使用了resultType和resultMap指定输出参数类型 1.一对一查询使用resultType指定输出参数类型 1.1需求 查询订单信息,关联查询创建订单的用户信息 1.2resultType 1.2.1sql语句 确定查询的主表:订单表 确定查询的关联表:用户表关联查询使用内链接?还是外链接?由于orders表中有一个外键(user_id),通过外键关联查

【MyBatis框架】高级映射-多对多查询

多对多查询 1.需求 查询用户及用户购买商品信息. 2.sql语句 查询主表是:用户表 关联表:由于用户和商品没有直接关联,通过订单和订单明细进行关联,所以关联表: orders.orderdetail.items SELECT orders.*, USER.username, USER.sex, USER.address, orderdetail.id orderdetail_id, orderdetail.items_id, orderdetail.items_num, orderdetai

将XML结点转换成JAVABEAN并存入数据库

xml|数据|数据库|转换 1.概述 我们要将外部系统给的XML文件进行解析,并存入到数据库. 但是我们并没有DTD或者Schema,只有一个WORD格式的说明文档:更离谱的是,XML结点树的结构(即XML结点与XML结点之间的关系)与业务Bean树的结构(即业务Bean与业务Bean的关系)并不完全一致,比如说,从业务角度讲,一只猪有只猪头,而在XML里,却写成了 pig --content --pighead 的三级关系,无端端多了一个content结点! 没有DTD/Schema,结构又不

ASP.NET MVC 使用 Petapoco 微型ORM框架+NpgSql驱动连接 PostgreSQL数据库

原文:ASP.NET MVC 使用 Petapoco 微型ORM框架+NpgSql驱动连接 PostgreSQL数据库 前段时间在园子里看到了小蝶惊鸿 发布的有关绿色版的Linux.NET--"Jws.Mono".由于我对.Net程序跑在Linux上非常感兴趣,自己也看了一些有关mono的资料,但是一直没有时间抽出时间来研究这个,小蝶惊鸿的博客又激起了我的兴趣,我花了四天的时间,终于在Liunx上跑起了属于我自己的应用程序,其中数据库使用到了PostgreSQL数据库.对于数据库的选用

ssh整合-SSH2框架如何设置使得链接地址中的action隐藏?

问题描述 SSH2框架如何设置使得链接地址中的action隐藏? 听说可以配置,不晓得在哪里配置,没有查到可用的资源 刚接触框架求指导~ 刚接触框架求指导~ 解决方案 连接地址都是需要指定请求action的或者是其他链接,没听说过可以隐藏action的. 如果想要使自己的项目的源码不被其他人看到,可以设置浏览器的右键禁用,这样别人就不能查看你的源文件了. 解决方案二: 在struts.xml中配置,我直接拿公司一个DRP项目的case给你看. <action name="*_*_*&quo

把MySQL表结构映射为Python中的对象的教程_python

ORM mysql的表结构是二维表,用python的数据结构表示出来就是一个列表,每一个记录是一个tuple.如下所示: [('1', ''huangyi),('2', ''letian),('3', 'xiaosi')] 这一行并不便于看出表的结构,可以把它换成对象的形式. class User(object): def __init__(self, id, name): self.id = id self.name = name 得到:   [ User('1', 'huangyi'), U

MFC框架下 单文档视图中多视图切换问题

问题描述 MFC框架下 单文档视图中多视图切换问题 在MainFrm.cpp 里对主视图进行了切分 BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs CCreateContext* pContext){ // TODO: Add your specialized code here and/or call the base class // CRect rc; // 获取框架窗口客户区的CRect对象 GetClientRect(&rc);