ORM的全称是Object Relational Mapping,即对象关系映射。它的实现思想就是将关系数据库中表的数据映射成为对象,以对象的形式展现,这样开发人员就可以把对数据库的操作转化为对这些对象的操作。因此它的目的是为了方便开发人员以面向对象的思想来实现对数据库的操作。
有时基于工作需要,需要自己改写orm框架,orm核心技术还是java反射机制,泛型等。
package orm; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.ResultSetMetaData; import java.sql.SQLException; import java.util.ArrayList; import java.util.List; import util.JdbcUtils; /** * * @author fengzb * * @param <T> */ public class Orm<T> { /** * 获得映射数据库后的一个装配好的实体对象bean * * @param sql * @param clazz * @return * @throws Exception */ public T getBean(String sql, Class<T> clazz) throws Exception { Connection conn = null; PreparedStatement ps = null; ResultSet rs = null; try { conn = JdbcUtils.getConnection(); ps = conn.prepareStatement(sql); rs = ps.executeQuery(); String[] colNames = getColNames(rs); T t = null; if (rs.next()) { t = clazz.newInstance(); callSetter(t, colNames, rs); } return t; } finally { JdbcUtils.free(rs, ps, conn); } } /** * 获得映射数据库后的装配好的实体对象bean List * * @param sql * @param clazz * @return * @throws Exception */ public List<T> getBeanList(String sql, Class<T> clazz) throws Exception { Connection conn = null; PreparedStatement ps = null; ResultSet rs = null; try { conn = JdbcUtils.getConnection(); ps = conn.prepareStatement(sql); rs = ps.executeQuery(); String[] colNames = getColNames(rs); List<T> objects = new ArrayList<T>(); while (rs.next()) { T t = (T) clazz.newInstance(); // callSetter(t, colNames, rs); objects.add(t); } return objects; } finally { JdbcUtils.free(rs, ps, conn); } } /** * 获取要映射的数据库表的列名 * @param rs * @return * @throws Exception */ private String[] getColNames(ResultSet rs) throws Exception { ResultSetMetaData rsmd = rs.getMetaData(); int count = rsmd.getColumnCount(); String[] colNames = new String[count]; for (int i = 1; i <= count; i++) { colNames[i - 1] = rsmd.getColumnLabel(i); } return colNames; } /** * 通过数据库表的列名加上‘set’,找到java bean类的set方法,利用反射机制进行装配 * @param object * @param colNames * @param rs * @throws IllegalAccessException * @throws InvocationTargetException * @throws SQLException */ private void callSetter(T object, String[] colNames, ResultSet rs) throws IllegalAccessException, InvocationTargetException, SQLException { Method[] ms = object.getClass().getMethods(); for (int i = 0; i < colNames.length; i++) { String colName = colNames[i]; String methodName = "set" + colName; for (Method m : ms) { if (methodName.equalsIgnoreCase(m.getName())) { m.invoke(object, rs.getObject(colName)); break; } } } } }
数据库表和java bean的映射是通过数据库列名 映射到bean的属性名;
数据库表tb_users
CREATE TABLE tb_user ( userId INT NOT NULL AUTO_INCREMENT, department VARCHAR(255), division VARCHAR(255), email VARCHAR(255), employeeNo VARCHAR(255), name VARCHAR(255), passwordMD5 VARCHAR(255), phone VARCHAR(255), position VARCHAR(255), state INT NOT NULL, type INT NOT NULL, PRIMARY KEY (userId) ) ENGINE=InnoDB DEFAULT CHARSET=utf8
java实体bean 类
package model; public class User { private String department; private String division; private String email; private String employeeNo; private String name; private String passwordMD5; private String phone; private String position; private int state; private int type; private int userId; //get set 方法 /* (non-Javadoc) * @see java.lang.Object#toString() */ @Override public String toString() { return "User [userId=" + userId + ", department=" + department + ", division=" + division + ", email=" + email + ", employeeNo=" + employeeNo + ", name=" + name + ", passwordMD5=" + passwordMD5 + ", phone=" + phone + ", position=" + position + ", state=" + state + ", type=" + type + "]"; } }
测试类
package orm; import java.util.List; import model.User; import org.junit.Test; public class OrmTest { @Test public void ormTest() throws Exception{ Orm<User> orm = new Orm<User>(); User user= (User) orm.getBean("SELECT userId,department,division,email,employeeNo,name,passwordMD5,phone,position,state,type FROM tb_user",User.class); System.out.println(user); List<User> userList= orm.getBeanList("SELECT userId,department,division,email,employeeNo,name,passwordMD5,phone,position,state,type FROM tb_user",User.class); for(User u : userList){ System.out.println(u); } } }
仅仅通过数据库列名与bean属性名进行映射,比较简单,当数据库中列名与bean属性名不一致时,
可以通过别名解决
例如bean中为depart,数据库中为department
User user= (User) orm.getBean("SELECT userId ,department depart,division,email,employeeNo,name,passwordMD5,phone,position,state,type FROM tb_user",User.class);
相关推荐
NULL 博文链接:https://fengzhenbing98.iteye.com/blog/2197338
随着信息技术的不断发展,企业对于数据的管理和操作需求日益增长。传统的JDBC(Java Database Connectivity)虽然可以实现...本项目旨在开发一个基于Java的简易ORM框架,为企业提供轻量级、高效的数据访问解决方案。
EzeOrm 是一个使用java 编写的简易ORM(Object Relational Mapping 对象关系映射)框架
EzeOrm 是一个使用java 编写的简易ORM(Object Relational Mapping 对象关系映射)框架。 关于ORM框架的简介请参考 。帮助程序员更加简单的将自己的java 程序与数据库相连接。 数据库支持 暂只支持 Mysql 项目状态 ...
本资源为自定义持久层框架源码 适合有一定java基础对框架原理刚开始研究的同学。 源码中使用的mysql版本为8.0,使用5.0的同学请自行替换对象maven中mysql驱动版本, 连接的驱动类。
EasyDBO v0.1.0 是一款简易的数据库关系映射框架,旨在为开发者提供一个轻量级的ORM解决方案。它基于Java语言实现,支持多种主流数据库,如MySQL、Oracle等,适用于JSP和Java Web应用程序。通过使用EasyDBO,开发者...
一款简易使用的orm框架 1. 框架设计 1.1. 总体流程 > 1. 对于数据库的“增删改”操作,将对象输入,通过ORM框架处理,构建SQL语句,然后写入数据库,如图1所示; 2. 对于查询数据库的操作,输入要输出对象的Class,...
这个项目是一个基于Java语言开发的Web应用程序,采用SSM(Spring+SpringMVC+MyBatis)或SSH(Spring+SpringMVC+Hibernate)框架进行开发,使用MySQL作为数据存储,JSP作为页面开发。 项目的目标是构建一个高效、可靠...
这个项目是一个基于Java语言开发的Web应用程序,采用SSM(Spring+SpringMVC+MyBatis)或SSH(Spring+SpringMVC+Hibernate)框架进行开发,使用MySQL作为数据存储,JSP作为页面开发。 项目的目标是构建一个高效、可靠...
看过Hibernate/iBatis的强大,但对于小型应用而言,却显得过于庞大,于是,我决定自己写一个泛型的简易版ORM框架,仅支持单表数据映射,关联映射业务逻辑请自行处理。 配置非常简单,如果有不清楚的地方,可以到我的...
您可以使用Java像ThinkPHP框架的M方法一样,一行代码搞定数据库操作。以免造成内存溢出。也可以设置手动关闭以替换连接连接,无需重新设置连接实例参数,认为JD内部已做多线程安全处理,详见【0x0A 多线程安全】 。 ...
Sparkweb 是一个超轻量级的简易高效的 Java WEB 开发框架,其设计思想结合了目前主流的 Spring、Struts2、Playframework、Nodejs-Expressjs、Ruby On Rails 等框架的优秀地方,完美支持 RESTful设计。 二、Sparkweb ...
项目是基于ASP.NET的Web应用程序开发,旨在构建一个高性能、可扩展和可靠的在线平台。我们将使用ASP.NET MVC框架和C#编程语言来实现这个项目。 ASP.NET MVC是一种成熟的开发框架,它采用模型-视图-控制器的设计模式...
用户管理采用ORM框架对数据库进行操作,用户登录时需要验证时的验证码采用AJAX对后台进行请求,动态验证验证码的正确性,用户可以实时刷新验证码。 用户请求主页时对后台请求,后台返回JSON数据供浏览器解析并向用户...
其开发宗旨是简单、快速的进行 Android应用程序的开发,包含Android mvc、简易sqlite orm、ioc模块、封装Android httpcliten… 开发工具在软件开发生命周期中扮演着至关重要的角色,它们旨在简化和加速从概念设计...
项目是基于ASP.NET的Web应用程序开发,旨在构建一个高性能、可扩展和可靠的在线平台。我们将使用ASP.NET MVC框架和C#编程语言来实现这个项目。 ASP.NET MVC是一种成熟的开发框架,它采用模型-视图-控制器的设计模式...
当当的基于jdbc协议的数据库分库分表解决方案,完美衔接spring+mybaits的ORM层实现(暂不支持oracle)。在本项目中用于实现CRUD的分库分表及读写分离。 #####github: 集成方式:嵌入式 使用依赖:jar包 项目配置文件...
java简易版开心农场源码 使用文档(完善进度70%,可以预览) QQ交流群:531812227 使用单位或项目: 宁波农行 山东农信 成都银行 中国建行上海开发中心 合肥农信 浦发电销 拉卡拉支付集团 中化壹化网 中化石化销售 苏州...