`
zyn010101
  • 浏览: 325698 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

自己写的一个类orm映射工具

    博客分类:
  • java
阅读更多

利用xml做配置文件,可以动态生成sql:

package com.landray.kmss.util;

import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.JDOMException;
import org.jdom.input.SAXBuilder;
import org.mira.lucene.analysis.c;
import org.springframework.jdbc.core.JdbcTemplate;
import com.landray.kmss.sys.transport.model.Exam;

/**
 * createBy Zhang Yanan
 *
 * createTime 2012-6-14 下午03:53:19
 *
 * desc 类和表的映射工具
 *
 */
public class MappingUtil {
	private JdbcTemplate jdbcTemplate;
	private JdbcTemplate jdbcTemplateAssist;
	
	public MappingUtil(JdbcTemplate jdbcTemplate,JdbcTemplate Assist){
		this.jdbcTemplate = jdbcTemplate;
		this.jdbcTemplateAssist = jdbcTemplateAssist;
	}
	
	public MappingUtil(){
		
	}

	public JdbcTemplate getJdbcTemplate() {
		return jdbcTemplate;
	}

	public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
		this.jdbcTemplate = jdbcTemplate;
	}

	public JdbcTemplate getJdbcTemplateAssist() {
		return jdbcTemplateAssist;
	}

	public void setJdbcTemplateAssist(JdbcTemplate jdbcTemplateAssist) {
		this.jdbcTemplateAssist = jdbcTemplateAssist;
	}

	//从Object[] 转为Bean
	public Object fromObject2Bean(Class c ,Object[] o) throws InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException{
		Object ob = c.newInstance();
		Method[] f = c.getMethods();
		String path = this.getXmlFileName(c);
		Map map = this.readXml(path);
		for(int i=0;i<f.length;i++){
			Method method = f[i];
			String methodName = method.getName();
			if(methodName.startsWith("set")){
				String fieldName = methodName.replace("set", "");
				String upChar = fieldName.charAt(0)+"";
				fieldName=fieldName.replace(upChar,upChar.toLowerCase());
				String order = (String)map.get(fieldName);
				method.invoke(ob, o[Integer.valueOf(order)-1]);
			}
		}
		return ob;
	}
	
	//获取class获取映射文件位置
	private String getXmlFileName(Class c){
		String path = "";
		String xml = c.getName().substring((c.getName().lastIndexOf("."))+1)+".xml";
		path = c.getResource(xml).toString();
		return path;
	}
	
	//读取xml,把属性,顺序放入map
	private Map readXml(String path){
		Map map = new HashMap();
		SAXBuilder sb = new SAXBuilder();
		try {
			Document myDocument = sb.build(path);
			Element root = myDocument.getRootElement();
			Element table = root.getChild("table");
			List<Element> list = table.getChildren("property");
			for(Element e:list){
				String order = e.getAttributeValue("order");
				String name = e.getAttributeValue("name");
				map.put(name, order);
			}
		} catch (JDOMException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
		return map;
	}
	
	//读取xml,把属性名,表字段放入map
	private Map readXmlForsql(String path){
		Map map = new HashMap();
		SAXBuilder sb = new SAXBuilder();
		try {
			Document myDocument = sb.build(path);
			if(myDocument==null){
				throw new RuntimeException("请检查xml的路径");
			}
			Element root = myDocument.getRootElement();
			Element table = root.getChild("table");
			List<Element> list = table.getChildren("property");
			String tableName = table.getAttributeValue("name");
			map.put("table_name", tableName);
			for(Element e:list){
				String column = e.getAttributeValue("column");
				String name = e.getAttributeValue("name");
				map.put(name, column);
			}
		} catch (JDOMException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
		return map;
	}
	
	//根据对象转换插入sql语句
	public String fromBean2InsertSql(Object o){
		StringBuilder sb = new StringBuilder();
//		System.out.println(o.getClass());
		String path = this.getXmlFileName(o.getClass());
		Map map = this.readXmlForsql(path);
		sb.append("insert into "+map.get("table_name"));
		map.remove("table_name");
		Set set = map.entrySet();
		Iterator it = set.iterator();
		StringBuilder columns = new StringBuilder();
		StringBuilder values = new StringBuilder();
		columns.append("(");
		values.append("(");
		while(it.hasNext()){
			Map.Entry e = (Map.Entry)it.next();
			columns.append(e.getValue()+",");
			Object ob = this.getValueOfObject(o, e.getKey().toString());
			if(null == ob){
				values.append("null,");
			}else{
				values.append("'"+ob+"',");
			}
		}	
		String cStr = columns.toString().substring(0, columns.toString().length()-1);
		String vStr = values.toString().substring(0,values.toString().length()-1);
		sb.append(cStr+")");
		sb.append(" values ");
		sb.append(vStr+")");
		return sb.toString();
	}
	
	//根据属性名称获取对象该属性的值
	public Object getValueOfObject(Object ob,String field){
		Object o = new Object();
		String s = field.substring(0,1);
		String fieldNew = s.toUpperCase()+field.substring(1,field.length());
		String method = "get"+fieldNew;
		try {
			try {
				Method m = ob.getClass().getMethod(method);
				o = m.invoke(ob);
			} catch (IllegalArgumentException e) {
				e.printStackTrace();
			} catch (IllegalAccessException e) {
				e.printStackTrace();
			} catch (InvocationTargetException e) {
				e.printStackTrace();
			}
		} catch (SecurityException e) {
			e.printStackTrace();
		} catch (NoSuchMethodException e) {
			e.printStackTrace();
		}
		return o;
	}
	
	//根据id和class生成删除sql
	public String getDeleteSql(Class c,String id){
		String path = this.getXmlFileName(c);
		Map map = this.readXmlForsql(path);
		String sql = "delete from "+map.get("table_name")+" where fd_id='"+id+"'";
		return sql;
	}
	
	//根据对象生成更新sql
	public String getUpdateSql(Object o){
		StringBuilder sb = new StringBuilder();
		String path = this.getXmlFileName(o.getClass());
		Map map = this.readXmlForsql(path);
		sb.append("update "+map.get("table_name"));
		//把主键和表名移除,全剩属性
		map.remove("fdId");
		map.remove("table_name");
		Set set = map.entrySet();
		Iterator it = set.iterator();
		StringBuilder values = new StringBuilder();
		values.append(" set ");
		while(it.hasNext()){
			Map.Entry e = (Map.Entry)it.next();
			Object ob = this.getValueOfObject(o, e.getKey().toString());
			if(null == ob){
				values.append(e.getValue()+"=null");
			}else{
				values.append(e.getValue()+"='"+ob+"',");
			}
		}	
		String vStr = values.toString().substring(0,values.toString().length()-1);
		sb.append(vStr);
		//主键地方需要改进
		sb.append(" where fd_id= '"+getValueOfObject(o,"fdId")+"'");
		return sb.toString();
	}
	
	//把一个List<Object[]> 转为List<Bean>
	public List<?> getBeanListFromObjectArrList(List<Object[]> list, Class c ){
		List newList = new ArrayList ();
		for(Object[] o:list){
			try{
				Object ob = this.fromObject2Bean(c, o);
				newList.add(ob);
			}catch(Exception e){
				e.printStackTrace();
			}
		}
		return newList;
	}
	
	//根据对象生成查询sql
	public String getQuerySqlFromBean(Object o){
		StringBuilder sb = new StringBuilder();
		String path = this.getXmlFileName(c.class);
		Map map = this.readXmlForsql(path);
		sb.append("select * from "+map.get("table_name")+"  where 1 = 1");
		map.remove("table_name");
		map.remove("fdId");
		Set set = map.entrySet();
		sb.append(this.getFilterSql(set, o));
		return sb.toString();
	}
	
	//生成过滤条件语句
	public String getFilterSql(Set set,Object o){
		StringBuilder sb = new StringBuilder();
		Iterator it = set.iterator();
		while(it.hasNext()){
			Map.Entry e = (Map.Entry)it.next();
			Object ob = this.getValueOfObject(o, e.getKey().toString());
			if(null != ob && !ob.toString().equals("")){
				sb.append(" and "+e.getValue()+"='"+ob+"'");
			}
		}	
		return sb.toString();
	}
	
	//查询数目语句
	public String getCountSqlFromBean(Object o){
		StringBuilder sb = new StringBuilder();
		String path = this.getXmlFileName(c.class);
		Map map = this.readXmlForsql(path);
		sb.append("select count(0) from "+map.get("table_name")+"  where 1 = 1");
		map.remove("table_name");
		map.remove("fdId");
		Set set = map.entrySet();
		sb.append(this.getFilterSql(set, o));
		return sb.toString();
	}
	
	//生成查询分页语句
	public String getQuerySqlFromBean(Object o,int pageNo,int pageSize){
		String sql = this.getQuerySqlFromBean(o);
		sql += " limit "+(pageNo-1)*pageSize+","+pageSize;
		return sql;
	}
	
	//根据id和class返回对象
	public Object getBeanById(Class c,String id){
		String path = this.getXmlFileName(c);
		Map map = this.readXmlForsql(path);
		String table = map.get("table_name").toString();
		//此处主键需要改进
		String sql = "select * from "+table+" where fd_id='"+id+"'";
		List<Object[]> list = JdbcTemplateUtil.getObjectList(jdbcTemplateAssist, sql);
		Object[] o = list.get(0);
		Object ob = new Object();
		try{
			ob = this.fromObject2Bean(c, o);	
		}catch(Exception e){
			e.printStackTrace();
		}
		return ob;
	}
	
	//根据过滤条件生成查询sql
	public String getQuerySqlFromFilters(Class c,Map equilFilter,Map likeFilter){
		StringBuilder sb = new StringBuilder();
		String path = this.getXmlFileName(c);
		Map map = this.readXmlForsql(path);
		sb.append("select * from "+map.get("table_name")+"  where 1 = 1");
		sb.append(this.createrSqlByFilters(equilFilter, likeFilter));
		return sb.toString();
	}
	
	//生成过滤条件的sql
	public String createrSqlByFilters(Map equilFilter,Map likeFilter){
		StringBuilder sb = new StringBuilder();
		Set eSet = equilFilter.entrySet();
		Iterator eIt = eSet.iterator();
		while(eIt.hasNext()){
			Map.Entry e = (Map.Entry)eIt.next();
			if(null != e.getValue() && !"".equals(e.getValue().toString())){
				sb.append(" and "+e.getKey()+"='"+e.getValue()+"'");
			}
		}
		Set lSet = likeFilter.entrySet();
		Iterator lIt = lSet.iterator();
		while(lIt.hasNext()){
			Map.Entry e = (Map.Entry)lIt.next();
			if(null != e.getValue() && !"".equals(e.getValue().toString())){
				sb.append(" and "+e.getKey()+" like '%"+e.getValue()+"%'");
			}
		}
		return sb.toString();
	}
	
	//根据过滤条件生成分页
	public String getQuerySqlFromFilters(Class c,Map equilFilter,Map likeFilter,int pageNo,int pageSize){
		String sql = this.getQuerySqlFromFilters(c, equilFilter, likeFilter);
		sql += " limit "+(pageNo-1)*pageSize+","+pageSize;
		return sql;
	}
	
	//根据过滤条件查询数目
	public String getCountSqlFromFilters(Class c,Map equilFilter,Map likeFilter){
		String path = this.getXmlFileName(c);
		Map map = this.readXmlForsql(path);
		StringBuilder sb = new StringBuilder();
		sb.append("select count(0) from "+map.get("table_name")+" where 1 = 1");
		sb.append(this.createrSqlByFilters(equilFilter, likeFilter));
		return sb.toString();
	}
	
	/**
	 * @param args
	 * @throws IllegalAccessException 
	 * @throws InstantiationException 
	 * @throws InvocationTargetException 
	 * @throws IllegalArgumentException 
	 */
	public static void main(String[] args) throws InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException {
		MappingUtil u = new MappingUtil();
		Class c = Exam.class;
		Object[] o = new Object[4];
		o[0]="1";
		o[1]="2";
		o[2]="3";
		o[3]="4";
		u.fromObject2Bean(c, o);
		Exam e = new Exam();
		e.setFdAddress("地址");
		e.setFdId("1");
		e.setFdContent("备注");
		e.setFdTime("2012-06-14");
		System.out.println(u.fromBean2InsertSql(e));
		System.out.println(u.getUpdateSql(e));
		System.out.println(u.getDeleteSql(c, e.getFdId()));
	}

}

 Exam.xml

<?xml version="1.0" encoding="UTF-8"?>
<root>
<table name="exam_info">
<property name="fdId" column="fd_id" order="1"/>
<property name="fdAddress" column="fd_address" order="2"/>
<property name="fdTime" column="fd_time" order ="3"/>
<property name="fdContent" column="fd_content" order="4"/>
<property name="fdOperatorId" column="fd_operator_id" order="5"/>
<property name="fdOparatorName" column="fd_operator_name" order="6"/>
<property name="fdCreateTime" column="fd_create_time" order="7"/>
<property name="fdAlterTime" column="fd_alter_time" order="8"/>
<property name="fdIsAbandon" column="fd_is_abandon" order="9"/>
<property name="fdName" column="fd_name" order="10"/>
</table>
</root>

 

Exam.java

package com.landray.kmss.sys.transport.model;


public class Exam {
	private String fdId;
	private String fdAddress;
	private String fdTime;
	private String fdContent;
	private String fdOperatorId;
	private String fdOparatorName;
	private String fdCreateTime;
	private String fdAlterTime;
	private String fdIsAbandon;
	private String fdName;
	public String getFdName() {
		return fdName;
	}
	public void setFdName(String fdName) {
		this.fdName = fdName;
	}
	public String getFdId() {
		return fdId;
	}
	public void setFdId(String fdId) {
		this.fdId = fdId;
	}
	public String getFdAddress() {
		return fdAddress;
	}
	public void setFdAddress(String fdAddress) {
		this.fdAddress = fdAddress;
	}
	public String getFdTime() {
		return fdTime;
	}
	public void setFdTime(String fdTime) {
		this.fdTime = fdTime;
	}
	public String getFdContent() {
		return fdContent;
	}
	public void setFdContent(String fdContent) {
		this.fdContent = fdContent;
	}
	public String getFdOperatorId() {
		return fdOperatorId;
	}
	public void setFdOperatorId(String fdOperatorId) {
		this.fdOperatorId = fdOperatorId;
	}
	public String getFdOparatorName() {
		return fdOparatorName;
	}
	public void setFdOparatorName(String fdOparatorName) {
		this.fdOparatorName = fdOparatorName;
	}
	public String getFdCreateTime() {
		return fdCreateTime;
	}
	public void setFdCreateTime(String fdCreateTime) {
		this.fdCreateTime = fdCreateTime;
	}
	public String getFdIsAbandon() {
		return fdIsAbandon;
	}
	public void setFdIsAbandon(String fdIsAbandon) {
		this.fdIsAbandon = fdIsAbandon;
	}
	public String getFdAlterTime() {
		return fdAlterTime;
	}
	public void setFdAlterTime(String fdAlterTime) {
		this.fdAlterTime = fdAlterTime;
	}
	
	
}

 该表的sql

/*
Navicat MySQL Data Transfer

Source Server         : 
Source Server Version : 50145
Source Host           : 
Source Database       : china
Target Server Type    : MYSQL
Target Server Version : 50145
File Encoding         : 65001

Date: 2012-06-16 16:48:20
*/

SET FOREIGN_KEY_CHECKS=0;
-- ----------------------------
-- Table structure for `exam_info`
-- ----------------------------
DROP TABLE IF EXISTS `exam_info`;
CREATE TABLE `exam_info` (
  `fd_id` varchar(36) NOT NULL DEFAULT '',
  `fd_address` varchar(100) DEFAULT NULL,
  `fd_time` varchar(100) DEFAULT NULL,
  `fd_content` varchar(500) DEFAULT NULL,
  `fd_operator_id` varchar(36) DEFAULT NULL,
  `fd_operator_name` varchar(50) DEFAULT NULL,
  `fd_create_time` varchar(20) DEFAULT NULL,
  `fd_alter_time` varchar(20) DEFAULT NULL,
  `fd_is_abandon` varchar(5) DEFAULT NULL,
  `fd_name` varchar(50) DEFAULT NULL,
  PRIMARY KEY (`fd_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of exam_info
-- ----------------------------
INSERT INTO `exam_info` VALUES ('137ef3d1a4d9b4c5d88591a43a78ccc7', '天津第一高级中学', '2012-03-30 09:00:00', '考试说明', '12f67c5cfba228b501b8f464308b5cd5', '培训主管', '2012-06-15 04:23:22', '2012-06-15 04:46:22', '0', '2012第一季度考试');
INSERT INTO `exam_info` VALUES ('137ef531c4680441617a0dd4741ba97c', '第一实验小学', '2012-06-30 16:46:00', '22', '12f67c5cfba228b501b8f464308b5cd5', '培训主管', '2012-06-15 04:47:10', '2012-06-15 04:47:14', '0', '天津第二季度考试');
INSERT INTO `exam_info` VALUES ('137f3f66306e18d3d79ba7f46c69efa8', '天津第一高级中学', '2012-09-29 14:23:00', '', '12f67c5cfba228b501b8f464308b5cd5', '培训主管', '2012-06-16 02:23:59', '2012-06-16 02:23:59', '0', '2012第三季度考试');
INSERT INTO `exam_info` VALUES ('137f3f7df45447143f7130148fba42ad', '天津实验小学', '2012-12-16 14:25:00', '', '12f67c5cfba228b501b8f464308b5cd5', '培训主管', '2012-06-16 02:25:37', '2012-06-16 02:25:37', '0', '2012天津第四季度');

 目前只支持String类型的.......

 

4
2
分享到:
评论
7 楼 蚊子草 2013-03-11  
[flash=200,200][flash=200,200][flash=200,200][flash=200,200][flash=200,200][flash=200,200][flash=200,200][flash=200,200][flash=200,200][url][url][url][url][url][url][url][url][url][url][url][url][url][url][url][url][url][url][url][url][url][flash=200,200][url][img]
引用
[u][i][b][/b][/i][/u]
[/img][/url][/flash][/url][/url][/url][/url][/url][/url][/url][/url][/url][/url][/url][/url][/url][/url][/url][/url][/url][/url][/url][/url][/url][/flash][/flash][/flash][/flash][/flash][/flash][/flash][/flash][/flash]
|||||||||||||||||||||||||||||||||||
||||||||||||||||||||||||||||||||||
||||||||||||||||||||||||||||||||||
|||||||||||||||||||||||||||||||||
|||||||||||||||||||||||||||||||||
||||||||||||||||||||||||||||||||
||||||||||||||||||||||||||||||||
|||||||||||||||||||||||||||||||
|||||||||||||||||||||||||||||||
||||||||||||||||||||||||||||||
||||||||||||||||||||||||||||||
|||||||||||||||||||||||||||||
|||||||||||||||||||||||||||||
||||||||||||||||||||||||||||
||||||||||||||||||||||||||||
|||||||||||||||||||||||||||
|||||||||||||||||||||||||||
||||||||||||||||||||||||||
||||||||||||||||||||||||||
|||||||||||||||||||||||||
|||||||||||||||||||||||||
||||||||||||||||||||||||
||||||||||||||||||||||||
|||||||||||||||||||||||
|||||||||||||||||||||||
||||||||||||||||||||||
||||||||||||||||||||||
|||||||||||||||||||||
|||||||||||||||||||||
||||||||||||||||||||
||||||||||||||||||||
|||||||||||||||||||
|||||||||||||||||||
||||||||||||||||||
||||||||||||||||||
|||||||||||||||||
|||||||||||||||||
||||||||||||||||
||||||||||||||||
|||||||||||||||
|||||||||||||||
||||||||||||||
||||||||||||||
|||||||||||||
|||||||||||||
||||||||||||
||||||||||||
|||||||||||
|||||||||||
||||||||||
||||||||||
|||||||||
|||||||||
||||||||
||||||||
|||||||
|||||||
||||||
||||||
|||||
|||||
||||
||||
|||
|||
||
||
|
|
6 楼 hanmiao 2012-11-26  
我对楼主的这段代码的理解是:只能转换数据库中除了 boolean 型以外的其它字段,对吗?
如果有 boolean 型对象,通常用的是 isTrue() 这种方法。
if(methodName.startsWith("set")){  
                String fieldName = methodName.replace("set", "");  
                String upChar = fieldName.charAt(0)+"";                fieldName=fieldName.replace(upChar,upChar.toLowerCase());  
                String order = (String)map.get(fieldName);  
                method.invoke(ob, o[Integer.valueOf(order)-1]);  
            }
5 楼 yang8820 2012-09-04  
想法很好!
个人觉得还你的更新数据库语句存在安全问题,所有的值还不能有英文单引号“'”。
4 楼 lwkjob 2012-08-15  
本来是点击顶的 手一抖就点到踩了....楼组很强大 支持分享代码
3 楼 zyn010101 2012-07-18  
yaolifei 写道
你这个工具所有表的主键必须是fd_id? bean中必须是fdId? 联合主键呢? 应该直接从数据库中去获取某个表的主键列吧

这个是自己写的一个小玩意儿,还不完善,呵呵。
2 楼 yaolifei 2012-07-18  
你这个工具所有表的主键必须是fd_id? bean中必须是fdId? 联合主键呢? 应该直接从数据库中去获取某个表的主键列吧
1 楼 zongshoujin 2012-06-17  
不错哦!可以借鉴一下!呵呵

相关推荐

    orm 映射工具

    NHibernate是一个开源的ORM框架,它提供了对.NET应用程序和各种关系型数据库之间的映射功能。通过NHibernate,开发人员可以将数据库中的表映射到C#类,这些类可以直接操作,而无需编写大量的SQL语句。 映射过程主要...

    ORM映射与WEB的应用

    ORM映射,全称为Object-Relational Mapping,是对象关系映射,是现代Web应用程序中一个重要的技术。它提供了一种方式,将数据库中的表结构映射为编程语言中的对象,使得开发者可以使用面向对象的方式来操作数据库,...

    .NET的ORM映射工具 AutoMapper.zip

    AutoMapper是基于对象到对象约定的映射工具,常用于(但并不仅限制于)把复杂的对象模型转为DTO,一般用于ViewModel模式和跨 服务范畴。AutoMapper给用户提供了便捷的配置API,就像使用约定来完成自动映射那样。...

    ORM对象关系映射

    ORM 技术包括以下四部分:一个对持久类对象进行 CRUD 操作的 API;一个语言或 API 用来规定与类和类属性相关的查询;一个规定 mapping metadata 的工具;一种技术可以让 ORM 的实现同事务对象一起进行 dirty ...

    针对自己的框架 写的 orm自动工具

    在本主题中,我们讨论的是一个自定义的 ORM 工具,它专为作者自己的框架设计,旨在提高开发效率和代码的可维护性。 【描述】:虽然描述为空,但根据“博文链接:https://mojianpo.iteye.com/blog/1179698”可以推测...

    自己开发了一个小型ORM项目

    在你开发的小型ORM项目中,包含了一个代码生成工具,这通常是为了简化开发过程,自动生成与数据库表结构对应的实体类、数据访问接口以及实现。通过这种方式,开发者只需要关注业务逻辑,而无需手动编写繁琐的数据库...

    一个DELPHI的ORM类设计工具,可以自动生成实体类

    这个工具提供了一个可视化界面,允许开发者通过拖放类图元素来创建和设计ORM模型。 在该描述中,我们了解到这个特定的ORM工具是基于DELPHI开发的,这意味着它充分利用了DELPHI的VCL(Visual Component Library)...

    Spot2一个MySQL的ORM映射器

    Spot2是一个针对MySQL数据库的Object-Relational Mapping (ORM)工具,主要应用于PHP开发环境。ORM是一种编程技术,它允许开发者使用面向对象的方式来操作数据库,而无需直接编写SQL语句,从而提高了代码的可读性、可...

    一款orm.net工具

    而`chm`文件则可能是一个帮助文档,包含工具的使用指南、API参考、示例代码等内容,帮助用户更好地理解和使用这款ORM工具。 学习和掌握ORM工具是现代.NET开发中的重要技能之一,它能提升开发效率,降低维护成本,...

    SqlSugar ORM工具箱2.2.7z

    SqlSugar是一个在中国广泛使用的对象关系映射(ORM)框架,它极大地简化了.NET开发者与数据库交互的工作。ORM工具箱如SqlSugar,通过提供高级抽象,允许程序员以面向对象的方式处理数据库操作,而无需直接编写SQL...

    手写orm

    【标题】:“手写ORM”指的是自己动手实现Object-Relational Mapping(对象关系映射)技术,这是一种在软件开发中将数据库操作与业务逻辑解耦的方法。ORM允许开发者使用面向对象的方式来操作数据库,无需关心底层SQL...

    ORM关系映射

    ORM的核心思想是将数据库中的表与程序中的类进行映射,表中的行映射为类的实例,表中的列映射为类的属性。这样,当我们在程序中操作对象时,实际上是在操作数据库中的数据。ORM框架会自动处理SQL的生成和执行,以及...

    K-ORM 自定义ORM工具

    本文将详细探讨一个名为“K-ORM”的自定义ORM工具,该工具基于JDBC和Java反射机制实现,旨在提供简单易用的数据操作接口。 首先,我们要理解JDBC(Java Database Connectivity)在其中的角色。JDBC是Java平台上的...

    .NET2.0映射工具

    以NHibernate为例,它是.NET平台上一个非常流行的ORM框架,能够处理.NET 2.0的应用程序。NHibernate允许开发者定义对象-关系映射配置,通常是XML文件或者使用Fluent NHibernate(一种更直观的API)来配置。一旦配置...

    手写简易版ORM框架(仿mybatis)

    你可能实现了一个简单的会话接口或类,供用户进行数据库操作。 5. **结果集映射**:框架需要能够将数据库查询的结果映射为Java对象,这可能通过自定义的映射逻辑或自动类型转换来实现。 6. **接口与注解**:为了让...

    02-01-11-基于Spring JDBC手写定制自己的ORM框架1

    在本课程"02-01-11-基于Spring JDBC手写定制自己的ORM框架1"中,我们将探讨如何利用Spring的JdbcTemplate设计理念,来构建一个自定义的ORM(对象关系映射)框架。ORM框架的主要目的是简化Java应用程序与数据库之间的...

    基于注解的hbase orm小工具,目前比较简单

    本篇文章将详细介绍一个基于注解的HBase ORM小工具,帮助你更好地理解和应用。 **ORM简介** ORM,全称Object-Relational Mapping,是将关系数据库的数据映射到对象模型的一种技术。它简化了数据库与程序之间的交互...

    ORM_数据持久层_生成工具

    “生成工具”通常是指能够自动生成ORM映射代码或数据库架构的工具,这些工具可以帮助开发者快速地建立模型和数据库之间的关联,减少手动编写SQL和映射代码的工作量。例如,Entity Framework的Code First开发模式就...

Global site tag (gtag.js) - Google Analytics