`
zhaohaolin
  • 浏览: 1017801 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Java的ActiveRecord框架原码及依赖包放出

    博客分类:
  • JAVA
阅读更多

下面是我自己在前阵子为了工作上的需要来实现的一个ROR形式的Java中的ActiveRecord框架,其实可能会有一些瑕疵,希望朋友们测试,研究后给我好的意见,我的目的是想开源出来,大家共同进步。

 

下面的是主框架ActiveRecord

 

以mysql数据库为例,给出主要类的代码:

package com.abblie.jdbc.mysql;

import com.abblie.jdbc.Base;
import com.abblie.jdbc.anno.Table;
import com.abblie.jdbc.handler.RecordHandler;
import com.abblie.jdbc.iface.BaseActiveRecord;
import com.database.pool.DBConnect;

/**
 * <b>mysql数据库操作基础类封装过的方法: </b><br/>
 * 查询用方法:find(tag,param) <br/>
 * 添加用方法:add(obj) <br/>
 * 修改用方法:edit(obj)<br/>
 * 删除用方法:del(obj)<br/>
 */
public abstract class ActiveRecord extends Base implements BaseActiveRecord{
	
	public ActiveRecord() {
		super();
	}
	public ActiveRecord(Class clss) {
		this.clss=clss;
	}
	public ActiveRecord(DBConnect conn) {
		this.conn=conn;
	}
	public ActiveRecord(Class clss,String dbName) {
		this.clss=clss;
		this.dbName=dbName;
	}

	//调用数据库
	public DBConnect call(String dbName) {
		return super.call(dbName);
	}
	//调用数据库,带外连接
	public DBConnect call(DBConnect conn,String dbName) {
		this.conn=conn;
		return call(dbName);
	}
	//打开数据库连接(内连接)
	public DBConnect open() {
		return super.open();
	}
	//打开数据库连接(外连接)
	public DBConnect open(DBConnect conn) {
		return super.open(conn);
	}
	//关闭数据库连接(内连接)
	public void close() {
		super.close();
	}
	//关闭数据库连接(外连接)
	public void close(DBConnect conn) {
		super.close(conn);
	}
	//查询主方法(内连接)
	public Object find(int tag, Object... param) {
		open();
		Object obj = find_by_conn(conn, tag, param);
		close();
		return obj;
	}
	//外连接查询主方法
	public Object find_by_conn(DBConnect conn,int tag, Object... param) {
		Object obj = null;
		switch (tag) {
			case $ONE :
				obj = find_reone_by_conn(conn, param);
				break;
			case $PAGE :
				obj = find_page_by_conn(conn, param);
				break;
			case $ALL :
				obj = find_all_by_conn(conn, param);
				break;
			case $SQL :
				obj = find_sql_by_conn(conn, param);
				break;
			case $JOIN :
				obj = find_join_by_conn(conn, param);
				break;
			case $COUNT :
				obj = find_conver_by_conn(conn, $COUNT, param);
				break;
			case $MAX :
				obj = find_conver_by_conn(conn, $MAX, param);
				break;
			case $MIN :
				obj = find_conver_by_conn(conn, $MIN, param);
				break;
			case $SUM :
				obj = find_conver_by_conn(conn, $SUM, param);
				break;
			case $AVG :
				obj = find_conver_by_conn(conn, $AVG, param);
				break;
			case $CONVER :
				obj = find_conver_by_conn(conn, param);
				break;
			case $SOME :
				obj = find_some_by_conn(conn, param);
				break;
			default :
				obj = find_reone_by_conn(conn, param);
				break;
		}
		return obj;
	}
	//查询部分值的方法(内连接)
	public Object find_some(Object... param) {
		open();
		Object obj = find_some_by_conn(conn, param);
		close();
		return obj;
	}
	//查询部分值的方法(外连接)
	public Object find_some_by_conn(DBConnect conn, Object... param) throws NumberFormatException {
		int len=param.length;
		
		if (len < 2) {
			System.out.println("是否没有设置返回标签或者查询的参数没有齐全?");
			return null;
		}
		Object obj=null;
		Table table = getTable();
		int rtag = Integer.valueOf(param[0].toString());
		// 当只有要求字段查询时
		if (len == 2) {
			String[] fields = RecordHandler.getStrs(param[1].toString());
			int flen = fields.length;
			sql = "SELECT ";
			for (int i = 0; i < flen; i++) {
				if (i == (flen - 1)) {
					sql += fields[i];
				} else {
					sql += fields[i] + ",";
				}
			}
			sql += " FROM " + table.name();
			switch (rtag) {
				case $RONE :
					if (flen == 1) {
						sql += " LIMIT 0,1";
						obj = getOneBySql(conn, sql);
					} else {
						System.out.println("请求的查询条件错误,只能查询单个值对象!");
					}
					break;
				case $ROBJ :
					sql += " LIMIT 0,1";
					obj = getBeanBySql(conn, sql);
					break;
				case $RLIST :
					obj = getListBySql(conn, sql);
					break;
				default :
					System.out.println("请求的返回类型或要求的查询字段或者参数不齐全!");
					break;
			}
		}
		// 当有sql条件查询时
		if (len == 3) {
			String[] fields = RecordHandler	.getStrs(param[1].toString());
			int flen = fields.length;
			sql = "SELECT ";
			for (int i = 0; i < flen; i++) {
				if (i == (flen - 1)) {
					sql += fields[i];
				} else {
					sql += fields[i] + ",";
				}
			}
			sql += " FROM " + table.name();
			switch (rtag) {
				case $RONE :
					if (flen == 1) {
						sql += " WHERE " + param[2].toString()	+ " LIMIT 0,1";
						obj = getOneBySql(conn, sql);
					} else {
						System.out.println("request is error,your input feild must be only one!");
					}
					break;
				case $ROBJ :
					sql += " WHERE " + param[2].toString()	+ " LIMIT 0,1";
					obj = getBeanBySql(conn, sql);
					break;
				case $RLIST :
					sql += " WHERE " + param[2].toString();
					obj = getListBySql(conn, sql);
					break;
				default :
					System.out.println("your request type or input feild or input param is error!");
					break;
			}
		}
		// 当有其它参数条件时
		if (len > 3) {
			String[] fields = RecordHandler	.getStrs(param[1].toString());
			int flen = fields.length;
			sql = "SELECT ";
			for (int i = 0; i < flen; i++) {
				if (i == (flen - 1)) {
					sql += fields[i];
				} else {
					sql += fields[i] + ",";
				}
			}
			sql += " FROM " + table.name();
			switch (rtag) {
				case $RONE :
					if (flen == 1) {
						sql += " WHERE " + param[2].toString()	+ " LIMIT 0,1";
						obj = getOneByParam2(conn, sql, param);
					} else {
						System.out.println("request is error,your input feild must be only one!");
					}
					break;
				case $ROBJ :
					sql += " WHERE " + param[2].toString()	+ " LIMIT 0,1";
					obj = getBeanByParam2(conn, sql, param);
					break;
				case $RLIST :
					sql += " WHERE " + param[2].toString();
					obj = getListByParam2(conn, sql, param);
					break;
				default :
					System.out.println("your request type or input feild or input param is error!");
					break;
			}
		}
		return obj;
	}
	//聚合函数(内连接)
	public Object find_conver(Object... param) {
		open();
		Object obj=find_conver_by_conn(conn,param);
		close();
		return obj;
	}
	//聚合函数(外连接)
	public Object find_conver_by_conn(DBConnect conn, Object... param) throws NumberFormatException {
		int len=param.length;
		if(len<1) {
			System.out.println("The input params is not enough!");
			return null;
		}
		Object obj=null;
		int tags2=Integer.valueOf(param[0].toString());
		switch (tags2) {
			case $COUNT :
				obj = doConver(conn, "COUNT", param);
				break;
			case $MIN :
				obj = doConver(conn, "MIN", param);
				break;
			case $MAX :
				obj = doConver(conn, "MAX", param);
				break;
			case $SUM :
				obj = doConver(conn, "SUM", param);
				break;
			case $AVG :
				obj = doConver(conn, "AVG", param);
				break;
			default :
				break;
		}
		return obj;
	}
	//连接查询(内连接)
	public Object find_join(Object... param) {
		open();
		Object obj = find_join_by_conn(conn, param);
		close();
		return obj;
	}
	public Object find_join_inner(Object... param) {
		return find_join($INNER,param);
	}
	//连接查询(外连接)
	public Object find_join_by_conn(DBConnect conn, Object... param) throws NumberFormatException {
		int len=param.length;
		if (len < 1) {
			System.out.println("parameter is not complete");
			return null;
		}
		Object obj=null;
		int tags1 = Integer.valueOf(param[0].toString());// 采用什么连接查询
		if (len==1) {
			linkSql(tags1);
			obj = getListBySql(conn, sql);
		} else if(len==2){
			linkSql(tags1);
			String start = param[1].toString().toUpperCase();
			if (start.startsWith("ORDER")||start.startsWith("GROUP")) {
				sql += " " + param[1];
			}else {
				sql += " WHERE " + param[1];
			}
			obj = getListBySql(conn, sql);
		}else if (len>2) {
			//当有参数传入时
			linkSql(tags1);
			String start = param[1].toString().toUpperCase();
			if (start.startsWith("ORDER")||start.startsWith("GROUP")) {
				sql += " " + param[1];
			}else {
				sql += " WHERE " + param[1];
			}
			obj = getListByParam1(conn, sql, param);
		}
		return obj;
	}
	//SQL语句查询(内连接)
	public Object find_sql(Object...param) {
		open();
		Object obj=find_sql_by_conn(conn,param);
		close();
		return obj;
	}
	//SQL语句查询(外连接)
	public Object find_sql_by_conn(DBConnect conn, Object... param) throws NumberFormatException {
		int len=param.length;
		if (len < 2) {
			System.out.println("输入的参数不齐全!");
			return null;
		}
		Object obj=null;
		int tags = Integer.valueOf(param[0].toString());// 返回标志位
		sql = param[1].toString();
		if (len == 2) {
			switch (tags) {
				case $RONE :
					obj = getOneBySql(conn, sql);
					break;
				case $ROBJ :
					obj = getBeanBySql(conn, sql);
					break;
				case $RLIST :
					obj = getListBySql(conn, sql);
					break;
				default :
					obj = getOneBySql(conn, sql);
					break;
			}
		} else if (len > 2) {
			switch (tags) {
				case $RONE :
					obj = getOneByParam1(conn, sql, param);
					break;
				case $ROBJ :
					obj = getBeanByParam1(conn, sql, param);
					break;
				case $RLIST :
					obj = getListByParam1(conn, sql, param);
					break;
				default :
					obj = getOneByParam1(conn, sql, param);
					break;
			}
		}
		return obj;
	}
	//查询全部(内连接)
	public Object find_all(Object... param) {
		open();
		Object obj=find_all_by_conn(conn, param);
		close();
		return obj;
	}
	//查询全部(外连接)
	public Object find_all_by_conn(DBConnect conn, Object... param) {
		Object obj=null;
		int len=param.length;
		Table table = getTable();
		sql = "SELECT * FROM " + table.name();
		if (len == 0) {
			obj = getListBySql(conn, sql);
		} else if (len == 1) {
			String start = param[0].toString().toUpperCase();
			if (start.startsWith("ORDER")||start.startsWith("GROUP")) {
				sql += " " + param[0];
			}else {
				sql += " WHERE " + param[0];
			}
			obj = getListBySql(conn, sql);
		} else if (len > 1) {
			sql += " WHERE " + param[0];
			obj = getListByParam0(conn, sql, param);
		}
		return obj;
	}
	//分页查询(内连接)
	public Object find_page(Object... param) {
		open();
		Object obj=find_page_by_conn(conn, param);
			close();
		return obj;
	}

	//分页查询(外连接)
	public Object find_page_by_conn(DBConnect conn, Object... param) throws NumberFormatException {
		int len=param.length;
		if (len < 2) {
			System.out.println("输入的参数不齐全!");
			return null;
		}
		Object obj=null;
		Table table = getTable();
		sql = "SELECT * FROM " + table.name();
		int page = Integer.valueOf(param[0].toString());
		int size = Integer.valueOf(param[1].toString());

		if (len == 2) {
			sql += " LIMIT " + size * (page - 1) + "," + size;
			obj = getListBySql(conn, sql);
		} else if (len == 3) {
			String start = param[2].toString().toUpperCase();
			if (start.startsWith("ORDER")||start.startsWith("GROUP")) {
				sql += " " + param[2] + " LIMIT " + size * (page - 1)+ "," + size;
			} else if(param[2].toString().length()>0){
				sql += " WHERE " + param[2] + " LIMIT " + size	* (page - 1) + "," + size;
			}else {
				sql +=param[2] + " LIMIT " + size	* (page - 1) + "," + size;
			}
			obj = getListBySql(conn, sql);
		} else if (len > 3) {
			sql += " WHERE " + param[2] + " LIMIT " + size * (page - 1)	+ "," + size;
			obj = getListByParam2(conn, sql, param);
		}
		return obj;
	}
	//返回单个值查询(内连接)
	public Object find_reone(Object... param) {
		open();
		Object obj = find_reone_by_conn(conn, param);
		close();
		return obj;
	}
	//返回单个值查询(外连接)
	public Object find_reone_by_conn(DBConnect conn, Object... param) {
		Object obj=null;
		int len=param.length;
		Table table = getTable();
		sql = "SELECT * FROM " + table.name();
		if (len == 0) {
			sql += " LIMIT 0,1";
			obj = getBeanBySql(conn, sql);
		} else if (len == 1) {
			String start = param[0].toString().toUpperCase();
			if ("DESC".equals(start)) {
				sql += " ORDER BY " + table.key() + " DESC LIMIT 0,1";
			} else if ("ASC".equals(start)) {
				sql += " ORDER BY " + table.key() + " ASC LIMIT 0,1";
			} else if (start.startsWith("ORDER")||start.startsWith("GROUP")) {
				sql += " " + param[0] + " LIMIT 0,1";
			} else {
				sql += " WHERE " + param[0] + " LIMIT 0,1";
			}
			obj = getBeanBySql(conn, sql);
		} else if (len > 1) {
			sql += " WHERE " + param[0] + " LIMIT 0,1";
			obj = getBeanByParam0(conn, sql, param);
		}
		return obj;
	}

	/**
	 * @param obj
	 * @param len
	 * @param param
	 * @return
	 */
	private Object doConver(DBConnect conn, String type, Object... param) {
		int len=param.length;
		Object obj=null;
		Table table = getTable();
		if (len == 1) {
			sql = "SELECT "+type+"("+table.key()+") AS ONE FROM "+table.name();
			obj=getOneBySql(conn, sql);
		}else if (len == 2) {
			sql = "SELECT "+type+"("+param[1].toString()+") AS ONE FROM "+table.name();
			obj=getOneBySql(conn, sql);
		}else if (len==3) {
			sql = "SELECT "+type+"("+param[1].toString()+") AS ONE FROM "+table.name()+" "+param[2].toString();
			obj=getOneBySql(conn, sql);
		}else if(len >3){
			sql = "SELECT "+type+"("+param[1].toString()+") AS ONE FROM "+table.name()+" "+param[2].toString();
			obj = getOneByParam2(conn, sql, param);
		}
		System.out.println(sql);
		return obj;
	}

	public int save(int tag, Object... param) {
		open();
		int i = save_by_conn(conn, tag, param);
		close();
		return i;
	}

	/**
	 * 添加 修改 删除
	 * 
	 * @param tag
	 * @param param
	 * @return int
	 */
	public int save_by_conn(DBConnect conn,int tag, Object... param) {
		int rel = 0;
		table = getTable();
		switch (tag) {
			case $ADD :
				// ADD
				rel = execute(conn, TSql.addSQL(clss, param[0]));
				break;
			case $MOD :
				// EDIT
				rel = execute(conn, TSql.editSQL(clss, param[0]));
				break;
			case $DEL :
				// DEL
				rel = execute(conn, TSql.delSQL(clss, Integer.valueOf(param[0].toString())));
				break;

			default :
				break;
		}
		return rel;
	}
//	 其它操作接口
	public int add_by_conn(DBConnect conn,Object... param) {
		return save_by_conn(conn,$ADD, this, param);
	}
	public int add(Object... param) {
		return save($ADD, this, param);
	}
	public int mod_by_conn(DBConnect conn,Object... param) {
		return save_by_conn(conn,$MOD, this, param);
	}
	public int mod(Object... param) {
		return save($MOD, this, param);
	}
	public int del_by_conn(DBConnect conn,Object id, Object... param) {
		return save_by_conn(conn,$DEL, id, param);
	}
	public int del(Object id, Object... param) {
		return save($DEL, id, param);
	}
	private void linkSql(int tags1) {
		switch (tags1) {
			case $LEFT :// 左连接
				sql = TSql.linkSql(clss, $LEFT);
				break;
			case $RIGHT :// 右连接
				sql = TSql.linkSql(clss, $RIGHT);
				break;
			case $INNER :// 内连接
				sql = TSql.linkSql(clss, $INNER);
				break;
			case $OUTER :// 外连接
				sql = TSql.linkSql(clss, $OUTER);
				break;
			case $CROSS :// 交叉连接
				sql = TSql.linkSql(clss, $CROSS);
				break;
			default :
				break;
		}
	}
}

 

 

时间关系,以后慢慢介绍。

 

下面给出我的项目中调用这个框架的部分代码以用参考。目的只想大家能把这个框架用起来,不断改进,不断优化。以达到让Java的敏捷开发。

 

主要Action中代码:CompanyAction.java

package action;

import com.util.lang.StringUtil;

import bean.Company;

@SuppressWarnings("serial")
public class CompanyAction extends BaseAction {

	private Company company;
	public CompanyAction() {
		company = new Company();
	}
	public String list() {
		tag("list");
		set("list", company.find_all());
		return SUCCESS;
	}
	public String toadd() {
		tag("toadd");
		set("list", company.find_all());
		return SUCCESS;
	}
	public String add() {
		tag("toadd");
		// 检查输入
		if (StringUtil.isEmpty(company.getCname())) {
			set("list", company.find_all());
			msg("公司名称不能为空!");
			return SUCCESS;
		}
		company.add();
		msg("公司添加成功!");
		return list();
	}
	public String tomod() {
		tag("tomod");
		set("list", company.find_all());
		company = (Company) company.find_reone("id=?", get("id"));
		return SUCCESS;
	}
	public String mod() {
		tag("mod");
		// 检查输入
		if (StringUtil.isEmpty(company.getCname())) {
			set("list", company.find_all());
			msg("公司名称不能为空!");
			return SUCCESS;
		}
		if (company.getId()==company.getPid()) {
			set("list", company.find_all());
			msg("上级公司不能选择本公司!");
			return SUCCESS;
		}
		company.mod();
		msg("公司修改成功!");
		return list();
	}
	public String del() {
		company.del(get("id"));
		msg("公司删除成功!");
		return list();
	}
	public Company getCompany() {
		return company;
	}
	public void setCompany(Company company) {
		this.company = company;
	}
}

 


 

 

对应的Bean类代码是:Company.java

package bean;

import java.io.Serializable;

import com.abblie.jdbc.anno.Table;
import com.abblie.jdbc.mysql.ActiveRecord;

@SuppressWarnings("serial")
@Table(name = "company", key = "id")
public class Company extends ActiveRecord implements Serializable {

	private int id;
	private int pid;
	private String cname;
	private String address;
	private String logo;
	private String website;
	private String note;

	public String getLogo() {
		return logo;
	}
	public String getWebsite() {
		return website;
	}
	public void setLogo(String logo) {
		this.logo = logo;
	}
	public void setWebsite(String website) {
		this.website = website;
	}
	public String getAddress() {
		return address;
	}
	public String getCname() {
		return cname;
	}
	public int getId() {
		return id;
	}
	public String getNote() {
		return note;
	}
	public void setAddress(String address) {
		this.address = address;
	}
	public void setCname(String cname) {
		this.cname = cname;
	}
	public void setId(int id) {
		this.id = id;
	}
	public void setNote(String note) {
		this.note = note;
	}
	public int getPid() {
		return pid;
	}
	public void setPid(int pid) {
		this.pid = pid;
	}
}

 


 

 

后面是相关包,包中有原代码可以查看,直接导入Eclipse就行了。

有两个配置文件要给出:

web.prop

 

[configfile]
dbconfigfile=server_db.prop

 

server_db.prop

[dbconfig]
dblist=server
logfile=d:\\server.log
dbdefault=server
sqlout=true

[server]
url=jdbc:mysql://localhost/server?useUnicode=true&characterEncoding=UTF-8
username=root
password=111111
maxconn=10
driver=org.gjt.mm.mysql.Driver

 

1
0
分享到:
评论

相关推荐

    Java敏捷持久层-ROR-ActiveRecord持久层框架的Java实现

    在Java世界里,虽然Hibernate和JPA等框架已经非常成熟,但Ruby on Rails(ROR)中的ActiveRecord模式也受到了不少Java开发者的青睐,并有了一些移植到Java平台的实现。 ActiveRecord是一种对象关系映射(ORM)模式...

    国产开源java框架JFinal 实例入门源码

    标题中的"国产开源java框架JFinal 实例入门源码"表明了这是一个关于使用JFinal框架的入门教程,其中包含了源代码。JFinal是一个由中国开发者开发的轻量级Java Web开发框架,它以简洁、高效著称。这里的"实例入门...

    基于ActiveRecord思想开发的至简化的java的Orm框架.zip

    本压缩包“基于ActiveRecord思想开发的至简化的java的Orm框架.zip”显然提供了一个简化版的Java ORM解决方案。 在ORM框架中,ActiveRecord模式的主要特点包括: 1. **对象-关系映射**:ORM框架的核心功能是将Java...

    简单Castle.ActiveRecord.Generator

    Castle项目是一个开源的.NET框架集合,其中包括动态代理、依赖注入容器(Windsor)以及ActiveRecord组件。ActiveRecord组件是针对ORM(对象关系映射)设计的,它允许开发者直接在类中定义与数据库表的映射,从而避免...

    ActiveRecord简单实例_activerecord.zip

    在Ruby on Rails框架中,ActiveRecord是一个至关重要的组件,它负责模型(Model)与数据库之间的交互。本实例将深入探讨ActiveRecord的基本用法,帮助理解如何在实际开发中有效地运用这个强大的工具。 首先,让我们...

    基于Java语言的Ruby on Rails ActiveRecord设计理念实现的设计源码

    该项目是采用Java语言实现的Ruby on Rails ActiveRecord设计理念的源码,总计包含46个文件,...该设计旨在通过Java语言实现类似于Ruby on Rails框架的ActiveRecord模式,以提供数据库操作的高级抽象和简化数据访问。

    Patron-ActiveRecord:JAVA中的Active Record持久性模式示例

    "Patron-ActiveRecord" 这个标题指的是一个项目或者库,它在JAVA中实现了Active Record持久性模式。Active Record是面向对象数据库映射(Object-Relational Mapping, ORM)的一种实现方式,它将数据库操作与业务对象...

    Pro ActiveRecord Databases with Ruby and Rails.pdf

    《Pro ActiveRecord Databases with Ruby and Rails》这本书深入探讨了如何使用ActiveRecord框架来高效地处理Ruby on Rails中的数据库操作。本书由Kevin Marshall、Chad Pytel和Jon Yurek共同撰写,他们都是在Ruby与...

    Castle ActiveRecord快速入门指南、ActiveRecord帮助文档

    - Castle ActiveRecord 可以通过 NuGet 包管理器在 Visual Studio 中安装,输入 "Castle.ActiveRecord" 即可找到相应的包。 - 确保已经安装了 Castle.Core 和 NHibernate(因为 ActiveRecord 基于 NHibernate 实现...

    JAVA WEB + ORM框架.zip

    JAVA WEB + ORM框架JAVA极速WEB+ORM框架JFinal中文 EnglishJFinal是基于Java语言的极速WEB + ORM框架,其核心设计目标是开发迅速、代码量少、学习简单、功能强大、量轻、易扩展、Restful。在拥有Java语言的所有优势...

    NHibernate中文教程+activerecord

    ActiveRecord是基于NHibernate的一个轻量级框架,它结合了ORM和领域驱动设计(DDD)的概念。使用ActiveRecord,可以直接在对象上执行CRUD操作,无需通过Session,使得代码更简洁。 8. ** Castle ActiveRecord** ...

    MyBatisPlus的ActiveRecord实现CRUD示例代码

    MyBatisPlus是一个基于MyBatis的扩展框架,它提供了更方便的数据操作API,简化了对数据库的操作。在本示例中,我们将深入探讨MyBatisPlus如何通过ActiveRecord模式实现CRUD(创建、读取、更新、删除)操作。...

    全面学习Mybatis插件之Mybatis-Plus_Java框架视频教程

    有一定的Java以及Mybatis框架的基础。 从0开始全面讲解Mybatis-Plus框架 l 快速入门 n Mybatis + MP 整合 n Spring + Mybatis + MP 整合 n SpringBoot + Mybatis + MP 整合 n 通用CRUD的全面讲解 n 配置 l 高级用法...

    scala-activerecord-specs_2.9.2-0.2.3.zip

    这可能是Scala Activerecord的主要库文件,而"scala activerecord scalatraactiverecord"则暗示Scala Activerecord可能与ScalatraActiverecord有关,ScalatraActiverecord是一个基于Scalatra框架的扩展,用于提供ORM...

    JFinal框架在Java Web开发中的应用.pdf

    JFinal是一个专门为Java Web开发打造的轻量级MVC框架,具有国产化、开源化的特点,它是由陆文瑞、卢盼娜和王彦婕等人在山西信息产业技术研究院有限公司进行研究和应用的。JFinal的特点在于它的便捷性、高效性和设计...

    [IronRuby] C# 4.0调用ActiveRecord

    从提供的文件信息中,我们可以得知这篇博文主要讨论的是如何使用C# 4.0调用IronRuby中的ActiveRecord功能。不过由于博文链接和部分详细内容无法提供,知识点将基于文件信息部分和公共知识构建。 知识点一:IronRuby...

    Castle.ActiveRecord (.NET FrameWork 2.0)

    Castle.ActiveRecord For .NET FrameWork 2.0 如果你想使用Castle.ActiveRecord,但又不想使用.NET Framework 3.0/3.5/4.0或更高版本,那么这个就是你所需要的,For .NET FrameWork 2.0,我整理了好久,自己从官方...

    C# Castle.ActiveRecord CS源码示例教程.zip

    在 C# 中,使用 Castle.ActiveRecord 首先需要引入相关的 NuGet 包,例如 Castle.ActiveRecord 和 Castle.Core。接着,你需要定义一个继承自 ActiveRecordBase 或直接实现了 IActiveRecord 接口的类,该类代表数据库...

    基于 Java 语言的极速 WEB + ORM 框架.zip

    1. **轻量级**:JFinal 体积小,无依赖,只需引入 jar 包即可开始开发,这对于小型项目或者希望快速搭建原型的开发者来说非常方便。 2. **高性能**:JFinal 采用了 AOP(面向切面编程)思想,实现了拦截器链,使得...

Global site tag (gtag.js) - Google Analytics