------------------------------
 Loonframework-DAO-Alpha-0.1.0 - 2008年2月24日
------------------------------

开发JDK: JDK1.4(所以此版本不支持Annotation)

文件名称:Loonframework-DAO-Alpha-0.1.0.jar
                    Loonframework-DAO-Alpha-0.1.0-src.zip

版本声明:此为测试用版本,是一个供测试与调整用的系统原型,不保证现有接口或函数实现在可见的未来无变更,不保证运行效率及错误会得到有效处理,强烈反对任何个人或组织将此版本投入到实际或自认为有用的项目中……

版权声明:Loonframework下属所有源码遵循Apache License 2.0协议,保留对其下代码的版权,任何对源代码的改进和变动,请告知原作者;不能将Loonframework全部或部分编译后再以其他项目名义发布, 不得经简单修改单独商品化销售.所有对Loonframework源码与文档的引用和转载请注明出处.

1.什么是Loonframework

Loonframework由三个子项目构成,分别对应DAO框架实现,WEB框架实现,以及一个2D的GAME框架实现,全部完成后将作为一个快速开发用综合框架而存在;目前三部分都尚处于开发阶段。

2.关于Loonframework-DAO

Loonframework-DAO是loonframework项目下的DAO实现,是一个轻量级、低外部依赖度的实现;为实现小规模项目的快速开发而诞生,目前提供了jdbc数据接口的封装及简单的pojo应用处理能力(但并不是彻底的orm)。loonframework-DAO本身是一个试验性质的项目,内部提供了事务、日志、Cache、异常处理等方面的简单实现,能够不依赖于任何第三方项目而单独运行,当然也可以通过接口选择和其它项目并用,将会陆续提供支持第三方的template以供调用。

3.关于Loonframework-DAO的文件构成
Loonframework-DAO-Alpha-0 1 0发布

本次公开测试的代码部分如上图所示。

4.关于Loonframework-DAO的初始化设置

Loonframework-DAO通过读取cfg.lf.xml文件初始化设置,该文件基本配置如下:
Loonframework-DAO-Alpha-0 1 0发布<?xml version="1.0" encoding="UTF-8"?>
Loonframework-DAO-Alpha-0 1 0发布
<loon>
Loonframework-DAO-Alpha-0 1 0发布  
<!-- 在loonframework中,配置会映射到一个对象实体进行操作,DAOFruit为数据驱动设定 --> 
Loonframework-DAO-Alpha-0 1 0发布  
<pojo id="dao" class="org.loon.framework.pojo.sys.DAOFruit">
Loonframework-DAO-Alpha-0 1 0发布  
<!-- 驱动别名,选填 -->
Loonframework-DAO-Alpha-0 1 0发布     
<set name="alias"><value type="string">mysql</value></set>
Loonframework-DAO-Alpha-0 1 0发布  
<!-- jdbc驱动类,可使用全写也支持'mysql'、'oralce'这样的简写方式 -->   
Loonframework-DAO-Alpha-0 1 0发布     
<set name="jdbcClass"><value type="string">org.gjt.mm.mysql.Driver</value></set>
Loonframework-DAO-Alpha-0 1 0发布  
<!-- url地址 -->            <set name="url"><value type="string">jdbc:mysql://localhost:3306/test?useUnicode=true</value></set>
Loonframework-DAO-Alpha-0 1 0发布  
<!-- 用户名 -->    
Loonframework-DAO-Alpha-0 1 0发布     
<set name="use"><value type="string">ltest</value></set>
Loonframework-DAO-Alpha-0 1 0发布  
<!-- 密码 -->
Loonframework-DAO-Alpha-0 1 0发布     
<set name="pwd"><value type="string"></value></set>
Loonframework-DAO-Alpha-0 1 0发布  
<!-- 最小连接数,选填。loonframework-dao内置有一个小型的连接池,可通过DAOManager类启动-->     
Loonframework-DAO-Alpha-0 1 0发布     
<set name="minconnection"><value type="int">100</value></set>
Loonframework-DAO-Alpha-0 1 0发布  
<!-- 最大连接数,选填-->     
Loonframework-DAO-Alpha-0 1 0发布     
<set name="maxconnection"><value type="int">100</value></set>
Loonframework-DAO-Alpha-0 1 0发布  
<!-- 超时设定 -->
Loonframework-DAO-Alpha-0 1 0发布     
<set name="timeout"><value type="int">5</value></set>
Loonframework-DAO-Alpha-0 1 0发布   
</pojo>
Loonframework-DAO-Alpha-0 1 0发布   
<pojo id="jtds" class="org.loon.framework.pojo.sys.DAOFruit">
Loonframework-DAO-Alpha-0 1 0发布     
<set name="alias"><value type="string">jtds</value></set>
Loonframework-DAO-Alpha-0 1 0发布     
<set name="jdbcClass"><value type="string">net.sourceforge.jtds.jdbc.Driver</value></set>
Loonframework-DAO-Alpha-0 1 0发布     
<set name="url"><value type="string">jdbc:jtds:sqlserver://localhost:1433/test</value></set>
Loonframework-DAO-Alpha-0 1 0发布     
<set name="use"><value type="string">sa</value></set>
Loonframework-DAO-Alpha-0 1 0发布     
<set name="pwd"><value type="string"></value></set>
Loonframework-DAO-Alpha-0 1 0发布     
<set name="minconnection"><value type="int">100</value></set>
Loonframework-DAO-Alpha-0 1 0发布     
<set name="maxconnection"><value type="int">100</value></set>
Loonframework-DAO-Alpha-0 1 0发布     
<set name="timeout"><value type="int">5</value></set>
Loonframework-DAO-Alpha-0 1 0发布   
</pojo>
Loonframework-DAO-Alpha-0 1 0发布   
<!-- LOGFruit为日志设定 -->
Loonframework-DAO-Alpha-0 1 0发布   
<pojo id="log" class="org.loon.framework.pojo.sys.LOGFruit">
Loonframework-DAO-Alpha-0 1 0发布     
<!-- 此项为生成的文件名,可以设定相关路径,无设置以默认路径保存 -->
Loonframework-DAO-Alpha-0 1 0发布     
<set name="file"><value type="string">log.txt</value></set>
Loonframework-DAO-Alpha-0 1 0发布     
<!-- 此项为log服务名,启动服务后有效 -->
Loonframework-DAO-Alpha-0 1 0发布     
<set name="servername"><value type="string">logserver</value></set>
Loonframework-DAO-Alpha-0 1 0发布     
<!-- 服务器所在地址 -->
Loonframework-DAO-Alpha-0 1 0发布     
<set name="host"><value type="string">127.0.0.1</value></set>
Loonframework-DAO-Alpha-0 1 0发布     
<!-- 服务器端口 -->
Loonframework-DAO-Alpha-0 1 0发布     
<set name="port"><value type="string">8071</value></set>
Loonframework-DAO-Alpha-0 1 0发布     
<!-- 是否在控制台显示log中信息 -->
Loonframework-DAO-Alpha-0 1 0发布     
<set name="filesys"><value type="boolean">true</value></set>
Loonframework-DAO-Alpha-0 1 0发布     
<!-- 是否保存log文件 -->
Loonframework-DAO-Alpha-0 1 0发布     
<set name="filemark"><value type="boolean">false</value></set>
Loonframework-DAO-Alpha-0 1 0发布     
<!-- 是否允许log服务启动 -->
Loonframework-DAO-Alpha-0 1 0发布     
<set name="netmark"><value type="boolean">false</value></set>
Loonframework-DAO-Alpha-0 1 0发布   
</pojo>
Loonframework-DAO-Alpha-0 1 0发布   
<!-- 此项为基础配置,在0.1.0版本中未实装 -->
Loonframework-DAO-Alpha-0 1 0发布   
<pojo id="cfg" class="org.loon.framework.pojo.sys.CFGFruit">
Loonframework-DAO-Alpha-0 1 0发布     
<set name="encoding"><value type="string">utf-8</value></set>
Loonframework-DAO-Alpha-0 1 0发布     
<set name="cache"><value type="boolean">true</value></set>
Loonframework-DAO-Alpha-0 1 0发布     
<set name="timeout"><value type="long">60</value></set>
Loonframework-DAO-Alpha-0 1 0发布     
<set name="sleep"><value type="long">10</value></set>
Loonframework-DAO-Alpha-0 1 0发布   
</pojo>
Loonframework-DAO-Alpha-0 1 0发布
</loon>

5.关于Loonframework-DAO的事务管理

Loonframework-DAO-Alpha-0 1 0发布package test;
Loonframework-DAO-Alpha-0 1 0发布
Loonframework-DAO-Alpha-0 1 0发布
import java.sql.SQLException;
Loonframework-DAO-Alpha-0 1 0发布
Loonframework-DAO-Alpha-0 1 0发布
import org.loon.framework.dao.DAOManager;
Loonframework-DAO-Alpha-0 1 0发布
import org.loon.framework.dao.DAOTransaction;
Loonframework-DAO-Alpha-0 1 0发布
import org.loon.framework.log.Log;
Loonframework-DAO-Alpha-0 1 0发布
import org.loon.framework.log.LogFactory;
Loonframework-DAO-Alpha-0 1 0发布
Loonframework-DAO-Alpha-0 1 0发布Loonframework-DAO-Alpha-0 1 0发布
public class DAOTransactionTest ...{
Loonframework-DAO-Alpha-0 1 0发布    
Loonframework-DAO-Alpha-0 1 0发布    
final static private Log log=LogFactory.getInstance(DAOTransactionTest.class);
Loonframework-DAO-Alpha-0 1 0发布    
Loonframework-DAO-Alpha-0 1 0发布Loonframework-DAO-Alpha-0 1 0发布    
public static void main(String[]args)...{    
Loonframework-DAO-Alpha-0 1 0发布        
//获得默认事务
Loonframework-DAO-Alpha-0 1 0发布
        DAOTransaction transaction= DAOManager.getDefaultTransaction();
Loonframework-DAO-Alpha-0 1 0发布Loonframework-DAO-Alpha-0 1 0发布        
try ...{
Loonframework-DAO-Alpha-0 1 0发布            System.out.println(transaction.getTransactionConnection().isClosed());
Loonframework-DAO-Alpha-0 1 0发布Loonframework-DAO-Alpha-0 1 0发布        }
 catch (SQLException e) ...{
Loonframework-DAO-Alpha-0 1 0发布            log.debug(e.getMessage());
Loonframework-DAO-Alpha-0 1 0发布        }

Loonframework-DAO-Alpha-0 1 0发布        
Loonframework-DAO-Alpha-0 1 0发布    }

Loonframework-DAO-Alpha-0 1 0发布}

通过DAOManager,我们得到了一个通过连接池获取的,简化了的事务操作。

DAOManager提供的部分方法如下:
Loonframework-DAO-Alpha-0 1 0发布


利用DAOTransaction接口,我们可以构建一个简单的事务管理实现。

除了DAOManager外,本项目还提供了一个
javax.transaction.Transaction的实现,位于org.loon.framework.dao.jta下,需要用户提供UserTransaction实现。


6.关于Loonframework-DAO中的Engine

在Loonframework-DAO中,原则上所有的数据操作都要通过Engine类派生。此类位于org.loon.framework.dao下。

其中静态方法如下:

Loonframework-DAO-Alpha-0 1 0发布

我们可以通过读取默认配置,设置connection、datasource、daofruit或者选择配置文件中指定的pojo创建Engine。

Engine中,目前提供了两种数据处理模式可供选择。

1.通过Execute实现进行操作
Loonframework-DAO-Alpha-0 1 0发布//选择名为dao的数据源配置
Loonframework-DAO-Alpha-0 1 0发布
Engine engine=Engine.begin("dao");
Loonframework-DAO-Alpha-0 1 0发布
//获得一个Execute操作
Loonframework-DAO-Alpha-0 1 0发布
Execute execute=engine.makeExecute();

Execute接口如下:
Loonframework-DAO-Alpha-0 1 0发布

Execute接口是一个基于JDBC的常用CRUD操作封装,他将所有的SQLException封装为精简的LException异常进行处理,并提供了一个复刻ResultSet的Query结果集。

Query接口如下(部分,基本为ResultSet复刻):
Loonframework-DAO-Alpha-0 1 0发布

Query结果集没有数据库依赖,是一个存在于内存中的ResultSet缓存,我们完全可以关闭数据库后如常使用Query接口,但这也意味着Query中的数据量始终不能保存过大,否则过多的Query将导致内存耗尽。在下一版本会提出解决方案。

Query接口基本用法如下:
//选择名为dao的数据源配置
Engine engine=Engine.begin("dao");
//获得一个Execute操作
Execute execute=engine.makeExecute();
Query query
=execute.sqlQuery("select * from ltest");
Loonframework-DAO-Alpha-0 1 0发布
Loonframework-DAO-Alpha-0 1 0发布Loonframework-DAO-Alpha-0 1 0发布 
while(query.isNext())...{
Loonframework-DAO-Alpha-0 1 0发布            
//输出数据
Loonframework-DAO-Alpha-0 1 0发布
            System.out.println(query.getString(0));
Loonframework-DAO-Alpha-0 1 0发布            System.out.println(query.getString(
"name"));
Loonframework-DAO-Alpha-0 1 0发布  }

我们可以看出,Query接口缓存ResultSet后滚动结果集的方式几乎与ResultSet接口相同;区别在于,Query接口内部是通过数组及Map实现的,所以索引由0开始。

由于Query本质上是由一个数组内部封装Map实现,所以也提供了很多集合操作功能,如叠代器操作。
Loonframework-DAO-Alpha-0 1 0发布Loonframework-DAO-Alpha-0 1 0发布for(Iterator it=query.iterator();it.hasNext();)...{
Loonframework-DAO-Alpha-0 1 0发布            System.out.println(((Map)it.next()).get(
"id"));
Loonframework-DAO-Alpha-0 1 0发布}

Query甚至可以通过makeTo方法直接自身匹配为目标类型
Loonframework-DAO-Alpha-0 1 0发布//将query中数据映射到指定类中自动匹配,并返回对象数组
Loonframework-DAO-Alpha-0 1 0发布
        Object[] ltests=query.makeTo(Ltest.class);
Loonframework-DAO-Alpha-0 1 0发布        
//ArrayIterator为loonframework提供的数组叠代器
Loonframework-DAO-Alpha-0 1 0发布
        ArrayIterator it=new ArrayIterator(ltests);
Loonframework-DAO-Alpha-0 1 0发布Loonframework-DAO-Alpha-0 1 0发布        
for(;it.hasNext();)...{
Loonframework-DAO-Alpha-0 1 0发布            System.out.println(
"name="+((Ltest)it.next()).getName());
Loonframework-DAO-Alpha-0 1 0发布        }


在Execute接口的辅助工具中,还有如Select类这样的存在。

Select是一个简单的xml文件配置查询器,他用于查询及返回存在于xml中的sql语句。

比如,我有已配置好的sql语句如下:
Loonframework-DAO-Alpha-0 1 0发布<loon>
Loonframework-DAO-Alpha-0 1 0发布
<sql>
Loonframework-DAO-Alpha-0 1 0发布      
<list id="list1"><![CDATA[select * from ltest]]></list>
Loonframework-DAO-Alpha-0 1 0发布      
<list id="list2"><![CDATA[select * from ltest where id>#id# and name like '%#name#%']]></list>
Loonframework-DAO-Alpha-0 1 0发布      
<list id="list3"><![CDATA[select count(id) from ltest]]></list>
Loonframework-DAO-Alpha-0 1 0发布
</sql>
Loonframework-DAO-Alpha-0 1 0发布
</loon>

借助Select类可以这样获得动态的sql语句:
Loonframework-DAO-Alpha-0 1 0发布        Select select =new Select();
Loonframework-DAO-Alpha-0 1 0发布        
//或者Select select=Select("/sql.lf.xml");
Loonframework-DAO-Alpha-0 1 0发布        
//初始一个xml文档
Loonframework-DAO-Alpha-0 1 0发布
        select.initializeConfigure("/sql.lf.xml");
Loonframework-DAO-Alpha-0 1 0发布        
//以getSelect方式获得指定名称的节点数据
Loonframework-DAO-Alpha-0 1 0发布
        List list=execute.sqlQueryToList(select.getSelect("list1"));
Loonframework-DAO-Alpha-0 1 0发布Loonframework-DAO-Alpha-0 1 0发布        
for(Iterator it=list.iterator();it.hasNext();)...{
Loonframework-DAO-Alpha-0 1 0发布            System.out.println(((Map)it.next()).get(
"id"));
Loonframework-DAO-Alpha-0 1 0发布        }

Loonframework-DAO-Alpha-0 1 0发布        

Select还可以根据不同的设置读取任意xml文档,比如有ibatis演示用例的Account.xml
Loonframework-DAO-Alpha-0 1 0发布<?xml version="1.0" encoding="UTF-8" ?>
Loonframework-DAO-Alpha-0 1 0发布
Loonframework-DAO-Alpha-0 1 0发布
<!DOCTYPE sqlMap      
Loonframework-DAO-Alpha-0 1 0发布    PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN"      
Loonframework-DAO-Alpha-0 1 0发布    "http://ibatis.apache.org/dtd/sql-map-2.dtd"
>
Loonframework-DAO-Alpha-0 1 0发布
Loonframework-DAO-Alpha-0 1 0发布
<sqlMap namespace="Account">
Loonframework-DAO-Alpha-0 1 0发布
Loonframework-DAO-Alpha-0 1 0发布  
<!-- Use type aliases to avoid typing the full classname every time. -->
Loonframework-DAO-Alpha-0 1 0发布  
<typeAlias alias="Account" type="com.mydomain.domain.Account"/>
Loonframework-DAO-Alpha-0 1 0发布
Loonframework-DAO-Alpha-0 1 0发布  
<!-- Result maps describe the mapping between the columns returned
Loonframework-DAO-Alpha-0 1 0发布       from a query, and the class properties.  A result map isn't
Loonframework-DAO-Alpha-0 1 0发布       necessary if the columns (or aliases) match to the properties 
Loonframework-DAO-Alpha-0 1 0发布       exactly. 
-->
Loonframework-DAO-Alpha-0 1 0发布  
<resultMap id="AccountResult" class="Account">
Loonframework-DAO-Alpha-0 1 0发布    
<result property="id" column="ACC_ID"/>
Loonframework-DAO-Alpha-0 1 0发布    
<result property="firstName" column="ACC_FIRST_NAME"/>
Loonframework-DAO-Alpha-0 1 0发布    
<result property="lastName" column="ACC_LAST_NAME"/>
Loonframework-DAO-Alpha-0 1 0发布    
<result property="emailAddress" column="ACC_EMAIL"/>
Loonframework-DAO-Alpha-0 1 0发布  
</resultMap>
Loonframework-DAO-Alpha-0 1 0发布
Loonframework-DAO-Alpha-0 1 0发布  
<!-- Select with no parameters using the result map for Account class. -->
Loonframework-DAO-Alpha-0 1 0发布  
<select id="selectAllAccounts" resultMap="AccountResult">
Loonframework-DAO-Alpha-0 1 0发布    select * from ACCOUNT
Loonframework-DAO-Alpha-0 1 0发布  
</select>
Loonframework-DAO-Alpha-0 1 0发布
Loonframework-DAO-Alpha-0 1 0发布  
<!-- A simpler select example without the result map.  Note the 
Loonframework-DAO-Alpha-0 1 0发布       aliases to match the properties of the target result class. 
-->
Loonframework-DAO-Alpha-0 1 0发布  
<select id="selectAccountById" parameterClass="int" resultClass="Account">
Loonframework-DAO-Alpha-0 1 0发布    select
Loonframework-DAO-Alpha-0 1 0发布      ACC_ID as id,
Loonframework-DAO-Alpha-0 1 0发布      ACC_FIRST_NAME as firstName,
Loonframework-DAO-Alpha-0 1 0发布      ACC_LAST_NAME as lastName,
Loonframework-DAO-Alpha-0 1 0发布      ACC_EMAIL as emailAddress
Loonframework-DAO-Alpha-0 1 0发布    from ACCOUNT
Loonframework-DAO-Alpha-0 1 0发布    where ACC_ID = #id#
Loonframework-DAO-Alpha-0 1 0发布  
</select>
Loonframework-DAO-Alpha-0 1 0发布   
Loonframework-DAO-Alpha-0 1 0发布  
<!-- Insert example, using the Account parameter class -->
Loonframework-DAO-Alpha-0 1 0发布  
<insert id="insertAccount" parameterClass="Account">
Loonframework-DAO-Alpha-0 1 0发布    insert into ACCOUNT (
Loonframework-DAO-Alpha-0 1 0发布      ACC_ID,
Loonframework-DAO-Alpha-0 1 0发布      ACC_FIRST_NAME,
Loonframework-DAO-Alpha-0 1 0发布      ACC_LAST_NAME,
Loonframework-DAO-Alpha-0 1 0发布      ACC_EMAIL
Loonframework-DAO-Alpha-0 1 0发布    values (
Loonframework-DAO-Alpha-0 1 0发布      #id#, #firstName#, #lastName#, #emailAddress#
Loonframework-DAO-Alpha-0 1 0发布    )
Loonframework-DAO-Alpha-0 1 0发布  
</insert>
Loonframework-DAO-Alpha-0 1 0发布
Loonframework-DAO-Alpha-0 1 0发布  
<!-- Update example, using the Account parameter class -->
Loonframework-DAO-Alpha-0 1 0发布  
<update id="updateAccount" parameterClass="Account">
Loonframework-DAO-Alpha-0 1 0发布    update ACCOUNT set
Loonframework-DAO-Alpha-0 1 0发布      ACC_FIRST_NAME = #firstName#,
Loonframework-DAO-Alpha-0 1 0发布      ACC_LAST_NAME = #lastName#,
Loonframework-DAO-Alpha-0 1 0发布      ACC_EMAIL = #emailAddress#
Loonframework-DAO-Alpha-0 1 0发布    where
Loonframework-DAO-Alpha-0 1 0发布      ACC_ID = #id#
Loonframework-DAO-Alpha-0 1 0发布  
</update>
Loonframework-DAO-Alpha-0 1 0发布
Loonframework-DAO-Alpha-0 1 0发布  
<!-- Delete example, using an integer as the parameter class -->
Loonframework-DAO-Alpha-0 1 0发布  
<delete id="deleteAccountById" parameterClass="int">
Loonframework-DAO-Alpha-0 1 0发布    delete from ACCOUNT where ACC_ID = #id#
Loonframework-DAO-Alpha-0 1 0发布  
</delete>
Loonframework-DAO-Alpha-0 1 0发布
Loonframework-DAO-Alpha-0 1 0发布
</sqlMap>

Loonframework-DAO-Alpha-0 1 0发布    // 也可用于读取其他框架中通过xml进行的sql设置
Loonframework-DAO-Alpha-0 1 0发布
        select.initializeConfigure("/Account.xml","sqlMap","select","id");
Loonframework-DAO-Alpha-0 1 0发布        System.out.println(select.getSelect(
"account"));

此时我们只要知道目标节点,下属子节点名以及属性就可以检索其中的sql语句

Select类也允许将object中数据自动匹配到获得的sql的#?#标记中

Loonframework-DAO-Alpha-0 1 0发布Ltest test=new Ltest();
Loonframework-DAO-Alpha-0 1 0发布System.out.println(select.matchObject(test, 
"list2"));

此时,会自动匹配所有符合条件的数据到sql中,完成sql语句。



2.通过Handle实现进行操作

该接口目前设置如下:
Loonframework-DAO-Alpha-0 1 0发布

Handle是Execute的二次封装,他将Execute抽象为针对pojo映射进行操作。

Loonframework-DAO-Alpha-0 1 0发布Engine engine=Engine.begin();
Loonframework-DAO-Alpha-0 1 0发布
//与Execute相同,Handle也需要通过Engine获得
Loonframework-DAO-Alpha-0 1 0发布
Handle handle=engine.makeHandle();

获得Handle后,假设我有如下pojo对象。

Loonframework-DAO-Alpha-0 1 0发布Loonframework-DAO-Alpha-0 1 0发布public class Role...{
Loonframework-DAO-Alpha-0 1 0发布
Loonframework-DAO-Alpha-0 1 0发布    
int caseid;
Loonframework-DAO-Alpha-0 1 0发布
Loonframework-DAO-Alpha-0 1 0发布    String name;
Loonframework-DAO-Alpha-0 1 0发布
Loonframework-DAO-Alpha-0 1 0发布    
long sex;
Loonframework-DAO-Alpha-0 1 0发布
Loonframework-DAO-Alpha-0 1 0发布    Date day;
Loonframework-DAO-Alpha-0 1 0发布
Loonframework-DAO-Alpha-0 1 0发布    
boolean die;
Loonframework-DAO-Alpha-0 1 0发布
Loonframework-DAO-Alpha-0 1 0发布    String death;
Loonframework-DAO-Alpha-0 1 0发布
Loonframework-DAO-Alpha-0 1 0发布Loonframework-DAO-Alpha-0 1 0发布    
public int getCaseid() ...{
Loonframework-DAO-Alpha-0 1 0发布        
return caseid;
Loonframework-DAO-Alpha-0 1 0发布    }

Loonframework-DAO-Alpha-0 1 0发布

相关文章:

  • 2022-02-17
  • 2022-02-26
  • 2022-12-23
  • 2021-08-28
  • 2021-08-25
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2021-09-21
  • 2021-12-17
  • 2021-04-24
  • 2022-12-23
  • 2021-11-27
  • 2022-12-23
  • 2021-11-30
相关资源
相似解决方案