Zhiqim ORM即知启蒙数据库映射,是Zhiqim Framework面向数据库开发的多例服务,包括ZSQL规范和三大映射关系(表映射、字段映射和指令映射)。

森中灵 最后提交于1月前 替换zhiqim.jar,重新打包
README.md29KB
### 什么是“知启蒙数据库映射”?
---------------------------------------
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;“知启蒙数据库映射(ZhiqimORM)”是Zhiqim Development Kit面向数据库开发的多例服务,包括ZSQL规范和三大映射关系(表映射、字段映射和指令映射),有比MyBatis更简单的动态SQL,和比Hibernate更彻底的对象关系映射:<br>
1、数据库二维表和Java对象之间的注解定义映射,表和视图分别对应Java的_Table、_View;<br>
2、数据库表列和Java字段的数据格式映射,支持6种数据库的9种数据格式;<br>
3、数据库SQL语句和Java指令映射,基于ZTable、ZView的创建、清空、存在、分页、列表、单条、数目、求和、插入、更新、替换、删除等指令。<br>

<br>

### 知启蒙数据库映射有哪些优点?
---------------------------------------
1、ZhiqimORM仅依赖JDK1.7+和ZhiqimKernel。15年的坚持,值得信赖。<br>
2、ZhiqimORM是基于ZhiqimKernel设计的多例服务,支持配置多个数据库,且自带JDBC连接池。<br>
3、ZhiqimORM的ZSQL语句可以通过XML配置,和Java代码分离,更易查看和检查,支持不同后缀适配不同的数据库;<br>
4、ZhiqimORM的ZSQL/ZDBO规范通过(?、##、$$)三个通配符建立SQL语句和Java对象的映射关联,简洁清晰。<br>
5、ZhiqimORM提供了标准的ZTable规则,对应数据库表设计,大量的基于表的增、删、改、查、列表、分页、统计无需编写SQL语句;<br>
6、ZhiqimORM提供了标签的ZTView规则,对应多表关联设计,大量基于视图的查询、列表、分页和统计无需编写SQL语句。<br>

<br>

### 知启蒙数据库映射目前支持的6种数据库
---------------------------------------
<table style="border-collapse:collapse; border:1px solid #333; height:400px; width:100%">
<tr bgcolor="#f5f5f5">
    <td width="8%" align="center">编号</td>
    <td width="13%">数据库名称</td>
    <td width="28%">常用的驱动</td>
    <td width="*">连接URL</td>
</tr>
<tr>
    <td align="center">1</td>
    <td class="zi-px20 z-bold">mysql</td>
    <td>com.mysql.jdbc.Driver</td>
    <td>jdbc:mysql://127.0.0.1:3306/zhiqim?useUnicode=true&amp;amp;characterEncoding=UTF-8</td>
</tr>
<tr>
    <td align="center">2</td>
    <td class="zi-px20 z-bold">oracle</td>
    <td>oracle.jdbc.driver.OracleDriver</td>
    <td>jdbc:oracle:thin:@127.0.0.1:1521:zhiqim</td>
</tr>
<tr >
    <td align="center">3</td>
    <td class="zi-px20 z-bold">mssql</td>
    <td>com.microsoft.jdbc.sqlserver.SQLServerDriver</td>
    <td>jdbc:microsoft:sqlserver://127.0.0.1:1433;DatabaseName=zhiqim</td>
</tr>
<tr>
    <td align="center">4</td>
    <td class="zi-px20 z-bold">postpresql</td>
    <td>org.postgresql.Driver</td>
    <td>jdbc:postgresql://127.0.0.1:5432/zhiqim</td>
</tr>
<tr>
    <td align="center">5</td>
    <td>sqlite</td>
    <td>org.sqlite.JDBC</td>
    <td>jdbc:sqlite:./db/zhiqim.db</td>
</tr>
<tr>
    <td align="center">6</td>
    <td>hsql</td>
    <td>org.hsqldb.jdbc.JDBCDriver</td>
    <td>jdbc:hsqldb:./db/zhiqim</td>
</tr>
</table>

<br>

### 知启蒙数据库映射支持的9种数据格式映射
---------------------------------------
<table style="border-collapse:collapse; border:1px solid #333; height:400px; width:100%">
<tr bgcolor="#f5f5f5">
    <td width="7%" align="center">编号</td>
    <td width="10%">名称</td>
    <td width="*">JAVA类型</td>
    <td width="11%">MySQL</td>
    <td width="13%">Oracle</td>
    <td width="11%">MSSQL</td>
    <td width="12%">PostpreSQL</td>
    <td width="11%">SQLite</td>
    <td width="11%">HSQL</td>
</tr>
<tr>
    <td colspan="9">基本类型5种</td>
</tr>
<tr>
    <td align="center">1</td>
    <td>boolean</td>
    <td>boolean</td>
    <td>tinyint(1)</td>
    <td>NUMBER(1)</td>
    <td>bit</td>
    <td>bool</td>
    <td>integer</td>
    <td>boolean</td>
</tr>
<tr>
    <td align="center">2</td>
    <td class="zi-px16 z-bold">byte</td>
    <td>int</td>
    <td>tinyint(4)</td>
    <td>NUMBER(4)</td>
    <td>tinyint</td>
    <td>int2</td>
    <td>integer</td>
    <td>tinyint</td>
</tr>
<tr>
    <td align="center">3</td>
    <td>short</td>
    <td>int</td>
    <td>smallint(6)</td>
    <td>NUMBER(6)</td>
    <td>smallint</td>
    <td>int2</td>
    <td>integer</td>
    <td>smalli<br>nt</td>
</tr>
<tr>
    <td align="center">4</td>
    <td>int</td>
    <td>int</td>
    <td>int</td>
    <td>NUMBER(11)</td>
    <td>int</td>
    <td>int4</td>
    <td>integer</td>
    <td>integer</td>
</tr>
<tr>
    <td align="center">5</td>
    <td>long</td>
    <td>long</td>
    <td>bigint</td>
    <td>NUMBER(20)</td>
    <td>bigint</td>
    <td>int8</td>
    <td>integer</td>
    <td>bigint</td>
</tr>
<tr>
    <td colspan="9">对象类型2种</td>
</tr>
<tr>
    <td align="center">6</td>
    <td>string</td>
    <td>java.lang.<br>String</td>
    <td>varchar<br>char<br>text<br>mediumtext<br>longtext</td>
    <td>VARCHAR2<br>CHAR<br>CLOB</td>
    <td>varchar<br>char<br>text</td>
    <td>varchar<br>char<br>text</td>
    <td>varchar<br>char<br>text</td>
    <td>varchar<br>char<br>clob</td>
</tr>
<tr >
    <td align="center">7</td>
    <td>datetime</td>
    <td>java.sql.<br>Timestamp</td>
    <td>datetime</td>
    <td>DATE</td>
    <td>datetime</td>
    <td>timestamp</td>
    <td>datetime</td>
    <td>timestamp</td>
</tr>
<tr>
    <td colspan="9">特殊类型2种</td>
</tr>
<tr>
    <td align="center">8</td>
    <td>decimal</td>
    <td>double</td>
    <td>decimal(m,n)</td>
    <td>NUMBER(m,n)</td>
    <td>decimal(m,n)</td>
    <td>decimal(m,n)</td>
    <td>numeric(m,n)</td>
    <td>decimal<br>(m,n)</td>
</tr>
<tr>
    <td align="center">9</td>
    <td>binary</td>
    <td>byte[]</td>
    <td>mediumblob</td>
    <td>BLOB</td>
    <td>image</td>
    <td>bytea</td>
    <td>blob</td>
    <td>blob</td>
</tr>
</table>

<br>

### 知启蒙数据库映射使用举例&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="https://zhiqim.org/download/zhiqim_example/zhiqim_guestbook_V1.5.0_src.zip">下载留言本示例</a>

```
/**
 * 首页
 *
 * @version v1.0.0 @author zouzhigang 2016-9-1 新建与整理
 */
public class IndexAction implements Action
{
    @Override
    public void execute(HttpRequest request) throws Exception
    {
        int page = request.getParameterInt("page", 1);
        int pageSize = request.getContextAttributeInt("page.size", 10);
        
        Selector selector = new Selector();
        selector.addOrderbyDesc("messageTime");
        PageResult<Message> result = Global.get(ZTable.class).page(Message.class, page, pageSize, selector);
         
        request.setAttribute("result", result);
    }
}
```

<br>


### 知启蒙数据库映射指令集

```
    /********************************************************************************************/
    //exist 表是否存在
    /********************************************************************************************/
    
    /**
     * 是否存在[表类]对应的[实际表]
     * 
     * @param clazz         表类
     * @return              =true表示存在,=false表示不存在
     * @throws ORMException 映射异常
     * @throws SQLException 数据库异常
     */
    public boolean exist(Class<?> clazz) throws ORMException, SQLException;

    /**
     * 是否存在[表类]对应的[实际表]月表,支持表名中替换字段指定为$MONTH$,如LOG_TRACE$MONTH$
     * 
     * @param clazz         表类
     * @param month         月份
     * @return              =true表示存在,=false表示不存在
     * @throws ORMException 映射异常
     * @throws SQLException 数据库异常
     */
    public boolean existMonth(Class<?> clazz, String month) throws ORMException, SQLException;
    
    /**
     * 是否存在[表类]对应的[实际表],支持表名中有一个替换字段,如LOG_TRACE$ID$
     * 
     * @param clazz         表类
     * @param replaceKey    替换键
     * @param replaceValue  替换值
     * @return              =true表示存在,=false表示不存在
     * @throws ORMException 映射异常
     * @throws SQLException 数据库异常
     */
    public boolean exist(Class<?> clazz, String replaceKey, String replaceValue) throws ORMException, SQLException;
    
    /**
     * 是否存在[表类]对应的[实际表]可替换表,支持表名中有多个替换字段,如LOG_TRACE_$MONTH$_$ID$
     * 
     * @param clazz         表类
     * @param replaceMap    可替换字段表
     * @return              =true表示存在,=false表示不存在
     * @throws ORMException 映射异常
     * @throws SQLException 数据库异常
     */
    public boolean exist(Class<?> clazz, MapSS replaceMap) throws ORMException, SQLException;

    /********************************************************************************************/
    //create 创建表
    /********************************************************************************************/
    
    /**
     * 创建[表类]对应的[实际表]
     * 
     * @param clazz         表类
     * @throws ORMException 映射异常
     * @throws SQLException 数据库异常
     */
    public void create(Class<?> clazz) throws ORMException, SQLException;
    
    /**
     * 创建[表类]对应的[实际表]月表
     * 
     * @param clazz         表类
     * @param month         月份
     * @throws ORMException 映射异常
     * @throws SQLException 数据库异常
     */
    public void createMonth(Class<?> clazz, String month) throws ORMException, SQLException;
    
    /**
     * 创建[表类]对应的[实际表]可替换表,支持表名中有多个替换字段,如LOG_TRACE_$MONTH$_$ID$
     * 
     * @param clazz         表类
     * @param replaceMap    可替换字段表
     * @throws ORMException 映射异常
     * @throws SQLException 数据库异常
     */
    public void create(Class<?> clazz, MapSS replaceMap) throws ORMException, SQLException;
    
    /********************************************************************************************/
    //truncate 清空表
    /********************************************************************************************/
    
    /**
     * 清空[表类]对应的[实际表]
     * 
     * @param clazz         表类
     * @throws ORMException 映射异常
     * @throws SQLException 数据库异常
     */
    public void truncate(Class<?> clazz) throws ORMException, SQLException;
    
    /**
     * 清空[表类]对应的[实际表],支持表名中替换字段指定为$MONTH$,如LOG_TRACE$MONTH$
     * 
     * @param clazz         表类
     * @param month         分月表时使用
     * @throws ORMException 映射异常
     * @throws SQLException 数据库异常
     */
    public void truncateMonth(Class<?> clazz, String month) throws ORMException, SQLException;
    
    /**
     * 清空[表类]对应的[实际表],支持表名中有一个替换字段,如LOG_TRACE$ID$
     * 
     * @param clazz         表类
     * @param replaceKey    替换键
     * @param replaceValue  替换值
     * @throws ORMException 映射异常
     * @throws SQLException 数据库异常
     */
    public void truncate(Class<?> clazz, String replaceKey, String replaceValue) throws ORMException, SQLException;

    /**
     * 清空[表类]对应的[实际表],支持表名中有多个替换字段,如LOG_TRACE_$MONTH$_$ID$
     * 
     * @param clazz         表类
     * @param replaceMap    替换表
     * @throws ORMException 映射异常
     * @throws SQLException 数据库异常
     */
    public void truncate(Class<?> clazz, MapSS replaceMap) throws ORMException, SQLException;
    
    /********************************************************************************************/
    //insert 插入数据
    /********************************************************************************************/
    
    /**
     * 增加数据,传入标准[表类]对象
     * 
     * @param data          表对象
     * @return int          表示插入的条数
     * @throws ORMException 映射异常
     * @throws SQLException 数据库异常
     */
    public int insert(Object data) throws ORMException, SQLException;

    /**
     * 增加数据,支持表名中替换字段指定为$MONTH$,如LOG_TRACE$MONTH$
     * 
     * @param data          表类
     * @param month         月份
     * @return              int 表示插入的条数
     * @throws ORMException 映射异常
     * @throws SQLException 数据库异常
     */
    public int insertMonth(Object data, String month) throws ORMException, SQLException;
    
    /**
     * 增加数据,支持表或字段中有一个替换字段,如LOG_TRACE$ID$
     * 
     * @param data          表对象
     * @param replaceKey    替换键
     * @param replaceValue  替换值
     * @return              int 表示插入的条数
     * @throws ORMException 映射异常
     * @throws SQLException 数据库异常
     */
    public int insert(Object data, String replaceKey, String replaceValue) throws ORMException, SQLException;
    
    /**
     * 增加数据,支持表或字段中中有多个替换字段,如LOG_TRACE_$MONTH$_$ID$
     * 
     * @param data          表对象
     * @param replaceMap    适配表
     * @return              int 表示插入的条数
     * @throws ORMException 映射异常
     * @throws SQLException 数据库异常
     */
    public int insert(Object data, MapSS replaceMap) throws ORMException, SQLException;
    
    /**
     * 替换数据,传入标准[表类]对象和更新器(取fieldMap和replaceMap)当存在时指定修改的值
     * 
     * @param data          表对象
     * @param updater       更新器
     * @return              int 表示插入的条数
     * @throws ORMException 映射异常
     * @throws SQLException 数据库异常
     */
    public int insertOrUpdate(Object data, Updater updater) throws ORMException, SQLException;
    
    /**
     * 批量增加数据
     * 
     * @param dataList      表对象列表
     * @return              int 表示插入的条数
     * @throws ORMException 映射异常
     * @throws SQLException 数据库异常
     */
    public int[] insertBatch(List<?> dataList) throws ORMException, SQLException;
    
    /**
     * 批量增加数据,支持表或字段中中有多个替换字段,如LOG_TRACE_$MONTH$_$ID$
     * 
     * @param dataList      表对象列表
     * @param replaceMap    适配表
     * @return              int 表示插入的条数
     * @throws ORMException 映射异常
     * @throws SQLException 数据库异常
     */
    public int[] insertBatch(List<?> dataList, MapSS replaceMap) throws ORMException, SQLException;
    
    /********************************************************************************************/
    //replace 替换数据,MYSQL支持,如果有数据先删除后增加
    /********************************************************************************************/
    
    /**
     * 替换数据,传入标准[表类]对象
     * 
     * @param data          表对象
     * @return              int 表示插入的条数
     * @throws ORMException 映射异常
     * @throws SQLException 数据库异常
     */
    public int replace(Object data) throws ORMException, SQLException;

    /**
     * 替换数据,支持表名中替换字段指定为$MONTH$,如LOG_TRACE$MONTH$
     * 
     * @param data          表对象
     * @param month         月份
     * @return int          表示插入的条数
     * @throws ORMException 映射异常
     * @throws SQLException 数据库异常
     */
    public int replaceMonth(Object data, String month) throws ORMException, SQLException;
    
    /**
     * 替换数据,支持表或字段中有一个替换字段,如LOG_TRACE$ID$
     * 
     * @param data          表对象
     * @param replaceKey    替换键
     * @param replaceValue  替换值
     * @return              int 表示插入的条数
     * @throws ORMException 映射异常
     * @throws SQLException 数据库异常
     */
    public int replace(Object data, String replaceKey, String replaceValue) throws ORMException, SQLException;
    
    /**
     * 替换数据,支持表或字段中中有多个替换字段,如LOG_TRACE_$MONTH$_$ID$
     * 
     * @param data          表对象
     * @param replaceMap    适配表
     * @return              int 表示插入的条数
     * @throws ORMException 映射异常
     * @throws SQLException 数据库异常
     */
    public int replace(Object data, MapSS replaceMap) throws ORMException, SQLException;

    /**
     * 批量替换数据
     * 
     * @param dataList      表对象列表
     * @return              int 表示插入的条数
     * @throws ORMException 映射异常
     * @throws SQLException 数据库异常
     */
    public int[] replaceBatch(List<?> dataList) throws ORMException, SQLException;
    
    /**
     * 批量替换数据,支持表或字段中中有多个替换字段,如LOG_TRACE_$MONTH$_$ID$
     * 
     * @param dataList      表对象列表
     * @param replaceMap    适配表
     * @return              int 表示插入的条数
     * @throws ORMException 映射异常
     * @throws SQLException 数据库异常
     */
    public int[] replaceBatch(List<?> dataList, MapSS replaceMap) throws ORMException, SQLException;
    
    /********************************************************************************************/
    //update 更新数据
    /********************************************************************************************/
    
    /**
     * 更新数据,指定更新器需要更新的字段、条件和可替换表
     * 
     * @param clazz         表类
     * @param updater       更新器
     * @return              int 表示更新的条数
     * @throws ORMException 映射异常
     * @throws SQLException 数据库异常
     */
    public int update(Class<?> clazz, Updater updater) throws ORMException, SQLException;
    
    /**
     * 更新数据,指定对象,根据主键进行更新,主键值不更新
     * 
     * @param data          表对象
     * @return              int 表示更新的条数
     * @throws ORMException 映射异常
     * @throws SQLException 数据库异常
     */
    public int update(Object data) throws ORMException, SQLException;
    
    /**
     * 更新数据,指定对象,根据主键进行更新,主键值不更新,支持表名中替换字段指定为$MONTH$,如LOG_TRACE$MONTH$
     * 
     * @param data          表对象
     * @param month         月份
     * @return              int 表示更新的条数
     * @throws ORMException 映射异常
     * @throws SQLException 数据库异常
     */
    public int updateMonth(Object data, String month) throws ORMException, SQLException;
    
    /**
     * 更新数据,指定对象,根据主键进行更新,主键值不更新,支持表或字段中有一个替换字段,如LOG_TRACE$ID$
     * 
     * @param data          表对象
     * @param replaceKey    替换键
     * @param replaceValue  替换值
     * @return              int 表示更新的条数
     * @throws ORMException 映射异常
     * @throws SQLException 数据库异常
     */
    public int update(Object data, String replaceKey, String replaceValue) throws ORMException, SQLException;
    
    /**
     * 更新数据,指定对象,根据主键进行更新,主键值不更新,支持可替换表
     * 
     * @param data          表对象
     * @param replaceMap    适配表
     * @return              int 表示更新的条数
     * @throws ORMException 映射异常
     * @throws SQLException 数据库异常
     */
    public int update(Object data, MapSS replaceMap) throws ORMException, SQLException;
    
    /********************************************************************************************/
    //delete 删除数据
    /********************************************************************************************/
    
    /**
     * 删除数据,多个主键时使用
     * 
     * @param clazz         表类
     * @param ids           关键属性为数组,多个主键
     * @return              返回删除数
     * @throws ORMException 映射异常
     * @throws SQLException 数据库异常
     */
    public int delete(Class<?> clazz, Object... ids) throws ORMException, SQLException;
    
    /**
     * 删除数据, 根据条件
     * 
     * @param clazz         表类
     * @param selector      对象选择器
     * @return              返回删除数
     * @throws ORMException 映射异常
     * @throws SQLException 数据库异常
     */
    public int delete(Class<?> clazz, Selector selector) throws ORMException, SQLException;
    
    /********************************************************************************************/
    //count 查询数目
    /********************************************************************************************/
    
    /**
     * 查询数目,多个主键时使用
     * 
     * @param clazz         表类
     * @param ids           关键属性值,支持多个
     * @return              存在的数目
     * @throws ORMException 映射异常
     * @throws SQLException 数据库异常
     */
    public int count(Class<?> clazz, Object... ids) throws ORMException, SQLException;

    /**
     * 查询数目,整表查询
     * 
     * @param clazz         表类
     * @return              int 数目值
     * @throws ORMException 映射异常
     * @throws SQLException 数据库异常
     */
    public int count(Class<?> clazz) throws ORMException, SQLException;
    
    /**
     * 查询数目,根据条件、可替换表查询
     * 
     * @param clazz         表类
     * @param selector      对象查询器
     * @return              int 数目值
     * @throws ORMException 映射异常
     * @throws SQLException 数据库异常
     */
    public int count(Class<?> clazz, Selector selector)throws ORMException, SQLException;
    
    /********************************************************************************************/
    //sum 计算总和
    /********************************************************************************************/
    
    /**
     * 计算总和
     * 
     * @param clazz         表类
     * @param field         表字段
     * @return              计算总和
     * @throws ORMException 映射异常
     * @throws SQLException 数据库异常
     */
    public long sum(Class<?> clazz, String field) throws ORMException, SQLException;
    
    /**
     * 计算总和
     * 
     * @param clazz         表类
     * @param selector      对象查询器
     * @param field         表字段
     * @return              计算总和
     * @throws ORMException 映射异常
     * @throws SQLException 数据库异常
     */
    public long sum(Class<?> clazz, Selector selector, String field) throws ORMException, SQLException;
    
    /**
     * 计算多个总和
     * 
     * @param clazz         表类
     * @param selector      对象查询器
     * @param fields        多个表字段
     * @return              计算多个总和
     * @throws ORMException 映射异常
     * @throws SQLException 数据库异常
     */
    public long[] sum(Class<?> clazz, Selector selector, String... fields) throws ORMException, SQLException;
    
    /********************************************************************************************/
    //item 查询一条数据
    /********************************************************************************************/
    
    /**
     * 查询一个表对象,支持多个主键
     * 
     * @param clazz         表类
     * @param ids           关键属性值
     * @return              返回表对象
     * @throws ORMException 映射异常
     * @throws SQLException 数据库异常
     */
    public <T> T item(Class<T> clazz, Object... ids) throws ORMException, SQLException;
    
    /**
     * 查询一个表对象,并指定返回属性,查询第一行
     * 
     * @param clazz         表类
     * @return              返回表对象
     * @throws ORMException 映射异常,如果传入的属性不在配置文件中则异常
     * @throws SQLException 数据库异常
     */
    public <T> T item(Class<T> clazz) throws ORMException, SQLException;
    
    /**
     * 查询一个表对象,并指定返回属性,查询条件和排序条件
     * 
     * @param clazz         表类
     * @param selector      对象查询器
     * @return              返回表对象
     * @throws ORMException 映射异常,如果传入的属性不在配置文件中则异常
     * @throws SQLException 数据库异常
     */
    public <T> T item(Class<T> clazz, Selector selector) throws ORMException, SQLException;
    
    /********************************************************************************************/
    //list 查询列表
    /********************************************************************************************/
    
    /**
     * 查询表对象列表,全表查询
     * 
     * @param clazz         表类
     * @return              返回表对象列表
     * @throws ORMException 映射异常
     * @throws SQLException 数据库异常
     */
    public <T> List<T> list(Class<T> clazz) throws ORMException, SQLException;
    
    /**
     * 查询表对象列表,并指定返回属性,查询条件和排序条件
     * 
     * @param clazz         表类
     * @param selector      对象查询器
     * @return              返回表对象列表
     * @throws ORMException 映射异常,如果传入的属性不在配置文件中则异常
     * @throws SQLException 数据库异常
     */
    public <T> List<T> list(Class<T> clazz, Selector selector) throws ORMException, SQLException;
    
    /**
     * 查询表对象列表,查询指定的位置的数据
     * 
     * @param clazz         表类
     * @param pageNo        页码
     * @param pageSize      页数
     * @return              返回表对象列表
     * @throws ORMException 映射异常
     * @throws SQLException 数据库异常
     */
    public <T> List<T> list(Class<T> clazz, int pageNo, int pageSize) throws ORMException, SQLException;
    
    /**
     * 查询表对象列表,并指定位置的,条件和排序条件
     * 
     * @param clazz         表类
     * @param pageNo        页码
     * @param pageSize      页数
     * @param selector      对象查询器
     * @return              返回表对象列表
     * @throws ORMException 映射异常,如果传入的属性不在配置文件中则异常
     * @throws SQLException 数据库异常
     */
    public <T> List<T> list(Class<T> clazz, int pageNo, int pageSize, Selector selector) throws ORMException, SQLException;
    
    /********************************************************************************************/
    //page 分页显示
    /********************************************************************************************/
    
    /**
     * 查询表对象分页信息
     * 
     * @param clazz         表类
     * @param pageNo        页码
     * @param pageSize      页数
     * @return              分页信息,包括总页数,页码,页数和查询的记录
     * @throws ORMException 映射异常
     * @throws SQLException 数据库异常
     */
    public <T> PageResult<T> page(Class<T> clazz, int pageNo, int pageSize) throws ORMException, SQLException;

    /**
     * 查询表对象分页信息
     * 
     * @param clazz         表类
     * @param pageNo        页码
     * @param pageSize      页数
     * @param selector      对象查询器
     * @return              分页信息,包括总页数,页码,页数和查询的记录
     * @throws ORMException 映射异常
     * @throws SQLException 数据库异常
     */
    public <T> PageResult<T> page(Class<T> clazz, int pageNo, int pageSize, Selector selector) throws ORMException, SQLException;
    
```

<br>

### 知启蒙数据库映射ZhiqimSQL示例
```
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE ZHIQIM-SQL PUBLIC "-//ZHIQIM //DTD Zhiqim-Sql Configuration 1.5.0//EN" "http://zhiqim.org/xmldtds/zhiqim_sql_1_5_0.dtd">
<zhiqim-sql>
    <!-- 插入数据 -->
    <sql id="insert_user_info">
    <![CDATA[
        insert into USER_INFO (USER_ID, USER_NAME, USER_PASS, USER_EMAIL, USER_NICK, USER_AVATAR) 
            values (#USER_ID#, #USER_NAME#, #USER_PASS#, #USER_EMAIL#, #USER_NICK#, #USER_AVATAR#)
    ]]>
    </sql>
    
    <!-- 删除数据 -->
    <sql id="delete_user_info">
    <![CDATA[
        delete from USER_INFO where USER_ID=#USER_ID#
    ]]>
    </sql>
    
    <!-- 更新全部数据 -->
    <sql id="update_user_info">
    <![CDATA[
        update USER_INFO set USER_NAME=#USER_NAME#, USER_PASS=#USER_PASS#, USER_EMAIL=#USER_EMAIL#, USER_NICK=#USER_NICK#, USER_AVATAR=#USER_AVATAR# 
            where USER_ID=#USER_ID#
    ]]>
    </sql>
       
    <!-- 查询指定数据 -->
    <sql id="select_user_info">
    <![CDATA[
        select USER_NAME, USER_NICK from USER_INFO 
            where USER_NICK like '%#USER_NICK#%' and USER_EMAIL=#USER_EMAIL#
    ]]>
    </sql>
    
    <!-- 按月存储日志,查指定MONTH的日志列表 -->
    <sql id="query_user_log">
    <![CDATA[
        select * from USER_LOG_$MONTH$ where USER_ID=?
    ]]>
    </sql>
    
</zhiqim-sql>
```

<br>


### 知启蒙技术框架与交流
---------------------------------------

![知启蒙技术框架架构图](https://zhiqim.org/project/images/101431_93f5c39d_2103954.jpeg "知启蒙技术框架架构图.jpg")<br><br>
<br><br>
QQ群:加入QQ交流群,请点击[【458171582】](https://jq.qq.com/?_wv=1027&k=5DWlB3b) <br><br>
教程:欲知更多知启蒙数据库映射,[【请戳这里】](https://zhiqim.org/project/zhiqim_framework/zhiqim_orm/tutorial/index.htm)