- 浏览: 1017801 次
- 性别:
- 来自: 杭州
文章分类
- 全部博客 (826)
- 硬件 (8)
- 软件 (24)
- 软件工程 (34)
- JAVA (229)
- C/C++/C# (77)
- JavaScript (8)
- PHP (1)
- Ruby (3)
- MySQL (14)
- 数据库 (19)
- 心情记事 (12)
- 团队管理 (19)
- Hadoop (1)
- spring (22)
- mybatis(ibatis) (7)
- tomcat (16)
- velocity (0)
- 系统架构 (6)
- JMX (8)
- proxool (1)
- 开发工具 (16)
- python (10)
- JVM (27)
- servlet (5)
- JMS (26)
- ant (2)
- 设计模式 (5)
- 智力题 (2)
- 面试题收集 (1)
- 孙子兵法 (16)
- 测试 (1)
- 数据结构 (7)
- 算法 (22)
- Android (11)
- 汽车驾驶 (1)
- lucene (1)
- memcache (12)
- 技术架构 (7)
- OTP-Erlang (7)
- memcached (17)
- redis (20)
- 浏览器插件 (3)
- sqlite (3)
- Heritrix (9)
- Java线程 (1)
- scala (0)
- Mina (6)
- 汇编 (2)
- Netty (15)
- libevent (0)
- CentOS (12)
- mongod (5)
- mac os (0)
最新评论
-
kingasdfg:
你这里面存在一个错误添加多个任务 应该是这样的 /** * ...
Quartz的任务的临时启动和暂停和恢复【转】 -
kyzeng:
纠正一个错误,long型对应的符号是J,不是L。
Jni中C++和Java的参数传递 -
zhaohaolin:
抱歉,兄弟,只是留下作记录,方便学习,如果觉得资料不好,可以到 ...
netty的个人使用心得【转】 -
cccoooccooco:
谢谢!自己一直以为虚机得使用网线才可以与主机连接呢。。
主机网卡无网线连接与虚拟机通信 -
yuqilin001:
要转别人的东西,请转清楚点嘛,少了这么多类,误人子弟
netty的个人使用心得【转】
下面是我自己在前阵子为了工作上的需要来实现的一个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
- ActiveRecord-zhaohl.rar (850.1 KB)
- 下载次数: 36
发表评论
-
调试jdk中的源码,查看jdk局部变量
2013-06-15 23:30 1055调试jdk中的源码,查看jdk局部变量 2012-04 ... -
Eclipse快捷键 10个最有用的快捷键<转>
2013-04-11 23:28 1082Eclipse中10个最有用的快捷键组合 一个Eclip ... -
Lucene 3.6 中文分词、分页查询、高亮显示等
2012-12-09 23:35 18241、准备工作 下载lucene 3.6.1 : htt ... -
Maven实战(九)——打包的技巧(转)
2012-10-12 00:41 941“打包“这个词听起 ... -
基于Maven的web工程如何配置嵌入式Jetty Server开发调试环境(转)
2012-10-12 00:28 9421、首先在web工程的POM文件里添加依赖jar包如下: ... -
轻轻松松学Solr(1)--概述及安装[转]
2012-09-18 14:59 998概述 这段时间对企 ... -
分析Netty工作流程[转]
2012-09-04 19:02 893下面以Netty中Echo的例 ... -
让eclipse在ubuntu下面好看一点
2012-03-27 10:17 925<p> </p> <h1 cla ... -
zookeeper安装和应用场合(名字,配置,锁,队列,集群管理)[转]
2012-01-12 17:59 1653安装和配置详解 本文 ... -
Jakarta-Common-BeanUtils使用笔记[转]
2012-01-10 14:13 1160Jakarta-Common-BeanUtils ... -
一个关于Java Thread wait(),notify()的实用例【转】
2012-01-07 16:05 1024///// // ProducerConsume ... -
Java基础:Java中的 assert 关键字解析【转】
2012-01-06 19:50 1066J2SE 1.4在语言上提供了 ... -
一篇不错的讲解Java异常的文章(转载)----感觉很不错,读了以后很有启发[转]
2012-01-06 15:02 1272六种异常处理的陋习 ... -
如何解决HP QC(Quality Center)在Windows 7下不能工作的问题
2011-12-26 10:48 1588HP QC(Quantity Center) 是一款不错的测 ... -
JAVA读写文件,中文乱码 【转】
2011-12-19 23:43 2123最近在做HTML静态生成,需要从硬盘上把模版文件的内容读出来。 ... -
Java 6 JVM参数选项大全(中文版)【转】
2011-12-19 19:51 974Java 6 JVM参数选项大全(中文版) 作者 ... -
使用assembly plugin实现自定义打包【转】
2011-12-13 01:58 975在上一篇文章中,讨论到在对maven的机制不熟悉的情况下,为了 ... -
使用maven ant task实现非标准打包[转]
2011-12-13 01:56 1050maven很强大,但是总有些事情干起来不是得心应手,没有使用a ... -
Java日期转换SimpleDateFormat格式大全【转】
2011-12-08 20:22 131924小时制时间 显示: public clas ... -
使用Spring的表单标签库
2011-11-22 20:08 107813.9. 使用Spring的 ...
相关推荐
在Java世界里,虽然Hibernate和JPA等框架已经非常成熟,但Ruby on Rails(ROR)中的ActiveRecord模式也受到了不少Java开发者的青睐,并有了一些移植到Java平台的实现。 ActiveRecord是一种对象关系映射(ORM)模式...
标题中的"国产开源java框架JFinal 实例入门源码"表明了这是一个关于使用JFinal框架的入门教程,其中包含了源代码。JFinal是一个由中国开发者开发的轻量级Java Web开发框架,它以简洁、高效著称。这里的"实例入门...
本压缩包“基于ActiveRecord思想开发的至简化的java的Orm框架.zip”显然提供了一个简化版的Java ORM解决方案。 在ORM框架中,ActiveRecord模式的主要特点包括: 1. **对象-关系映射**:ORM框架的核心功能是将Java...
Castle项目是一个开源的.NET框架集合,其中包括动态代理、依赖注入容器(Windsor)以及ActiveRecord组件。ActiveRecord组件是针对ORM(对象关系映射)设计的,它允许开发者直接在类中定义与数据库表的映射,从而避免...
在Ruby on Rails框架中,ActiveRecord是一个至关重要的组件,它负责模型(Model)与数据库之间的交互。本实例将深入探讨ActiveRecord的基本用法,帮助理解如何在实际开发中有效地运用这个强大的工具。 首先,让我们...
该项目是采用Java语言实现的Ruby on Rails ActiveRecord设计理念的源码,总计包含46个文件,...该设计旨在通过Java语言实现类似于Ruby on Rails框架的ActiveRecord模式,以提供数据库操作的高级抽象和简化数据访问。
"Patron-ActiveRecord" 这个标题指的是一个项目或者库,它在JAVA中实现了Active Record持久性模式。Active Record是面向对象数据库映射(Object-Relational Mapping, ORM)的一种实现方式,它将数据库操作与业务对象...
《Pro ActiveRecord Databases with Ruby and Rails》这本书深入探讨了如何使用ActiveRecord框架来高效地处理Ruby on Rails中的数据库操作。本书由Kevin Marshall、Chad Pytel和Jon Yurek共同撰写,他们都是在Ruby与...
- Castle ActiveRecord 可以通过 NuGet 包管理器在 Visual Studio 中安装,输入 "Castle.ActiveRecord" 即可找到相应的包。 - 确保已经安装了 Castle.Core 和 NHibernate(因为 ActiveRecord 基于 NHibernate 实现...
JAVA WEB + ORM框架JAVA极速WEB+ORM框架JFinal中文 EnglishJFinal是基于Java语言的极速WEB + ORM框架,其核心设计目标是开发迅速、代码量少、学习简单、功能强大、量轻、易扩展、Restful。在拥有Java语言的所有优势...
ActiveRecord是基于NHibernate的一个轻量级框架,它结合了ORM和领域驱动设计(DDD)的概念。使用ActiveRecord,可以直接在对象上执行CRUD操作,无需通过Session,使得代码更简洁。 8. ** Castle ActiveRecord** ...
MyBatisPlus是一个基于MyBatis的扩展框架,它提供了更方便的数据操作API,简化了对数据库的操作。在本示例中,我们将深入探讨MyBatisPlus如何通过ActiveRecord模式实现CRUD(创建、读取、更新、删除)操作。...
有一定的Java以及Mybatis框架的基础。 从0开始全面讲解Mybatis-Plus框架 l 快速入门 n Mybatis + MP 整合 n Spring + Mybatis + MP 整合 n SpringBoot + Mybatis + MP 整合 n 通用CRUD的全面讲解 n 配置 l 高级用法...
这可能是Scala Activerecord的主要库文件,而"scala activerecord scalatraactiverecord"则暗示Scala Activerecord可能与ScalatraActiverecord有关,ScalatraActiverecord是一个基于Scalatra框架的扩展,用于提供ORM...
JFinal是一个专门为Java Web开发打造的轻量级MVC框架,具有国产化、开源化的特点,它是由陆文瑞、卢盼娜和王彦婕等人在山西信息产业技术研究院有限公司进行研究和应用的。JFinal的特点在于它的便捷性、高效性和设计...
从提供的文件信息中,我们可以得知这篇博文主要讨论的是如何使用C# 4.0调用IronRuby中的ActiveRecord功能。不过由于博文链接和部分详细内容无法提供,知识点将基于文件信息部分和公共知识构建。 知识点一:IronRuby...
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 首先需要引入相关的 NuGet 包,例如 Castle.ActiveRecord 和 Castle.Core。接着,你需要定义一个继承自 ActiveRecordBase 或直接实现了 IActiveRecord 接口的类,该类代表数据库...
1. **轻量级**:JFinal 体积小,无依赖,只需引入 jar 包即可开始开发,这对于小型项目或者希望快速搭建原型的开发者来说非常方便。 2. **高性能**:JFinal 采用了 AOP(面向切面编程)思想,实现了拦截器链,使得...