给ibatis加cache时, 碰到一直报"The content of element type "cacheModel" must match "(flushInterval?,flushOnExecute*,property*)+". " 这个异常. 查了头天, 自己的格式完全符合, 最后把这些文件找出来单独验证. 我的XML:
card.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sqlMap PUBLIC "-//iBATIS.com//DTD SQL Map 2.0//EN" "\bin\validateXML\sql-map.dtd">
<sqlMap namespace="card">
<cacheModel id="product-cache" type="LRU">
<flushInterval hours="24"/>
<flushOnExecute statement="insertProduct"/>
<flushOnExecute statement="updateProduct"/>
<flushOnExecute statement="deleteProduct"/>
<property name="size" value="1000" />
</cacheModel>
</sqlMap>
sql-map.dtd的cacheModel部分:
<!ELEMENT cacheModel (flushInterval?, flushOnExecute*, property*)+>
<!ATTLIST cacheModel
id CDATA #REQUIRED
type CDATA #REQUIRED
readOnly (true | false) #IMPLIED
serialize (true | false) #IMPLIED
>
使用验证程序:
import java.io.FileNotFoundException;
import java.io.IOException;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import org.xml.sax.SAXException;
public class ValidateXMLDTD {
public static void main(String[] args) {
testXML();
}
public static void testXML() {
try {
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
dbf.setValidating(true);
DocumentBuilder db = dbf.newDocumentBuilder();
db.parse(ValidateXMLDTD.class.getResourceAsStream("card.xml"));
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (ParserConfigurationException e) {
e.printStackTrace();
} catch (SAXException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
其中sql-map.dtd给的example:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sqlMap PUBLIC "-//iBATIS.com//DTD SQL Map 2.0//EN" "\bin\validateXML\sql-map.dtd">
<sqlMap namespace="card">
<cacheModel id="product-cache" type="LRU">
<flushInterval hours="24"/>
<flushOnExecute statement="insertProduct"/>
<flushOnExecute statement="updateProduct"/>
<flushOnExecute statement="deleteProduct"/>
<property name="size" value="1000" />
</cacheModel>
</sqlMap>
在内容上无论怎么比较都一样, 最后一句一句的替换, 看到底错在哪句上面, 还是会报错, 最终只感觉内容完全一样, 只是不美观, 格式化一下, 再测试, 发现没有错, 原来是自的XML的flushOnExecute前多了一个空格, dtd给出"(flushInterval?, flushOnExecute*, property*)+" 这种约束时元素中间不能出现空格, 但可以使用制表符, 当dtd给出"(#PCDATA | include | dynamic | iterate)"约束时, 元素中间既可以是空格, 也可以是制表符.
删除空格, 使用tab键, 大功告成.....
分享到:
相关推荐
这种配置方式使得ibatis能够在不依赖Spring事务管理的情况下独立工作,从而实现了对ibatis事务的保留。 #### 四、实现自定义控制回滚 当保留ibatis事务后,开发者可以在业务逻辑中更自由地控制事务的提交和回滚。...
通过将SQL语句直接写入XML配置文件,iBATIS允许开发者在不接触JDBC API的情况下进行数据操作。 【描述】"ibatis2入门"指出这是一套针对iBATIS 2.x版本的学习资料,涵盖了从基础到进阶的内容。"struts2+spring2+...
本篇文章将深入探讨如何使用XML配置文件来配置iBATIS,以解决你在实际开发中可能遇到的各种问题。 首先,我们了解iBATIS的核心概念——映射器(Mapper)。映射器是定义SQL语句的地方,而XML配置文件是映射器的主要...
很好的spring+ibatis事务的配置文档.
- **缓存配置**:通过在`SqlMapConfig.xml`文件中配置`<cacheModel>`标签来启用缓存。 - **缓存的类型**:可以是LRU(最近最少使用)、FIFO(先进先出)等。 - **flushOnExecute**:控制是否在执行每次查询时刷新...
《IBatis.net 配置各种数据库详解》 在软件开发中,数据库的连接与操作是不可或缺的一环。IBatis.net,作为一个轻量级的持久层框架,为开发者提供了灵活的数据映射功能,使得数据库操作变得更为简单。本文将详细...
### ibatis配置文件信息 #### 一、简介 在Java开发领域中,ibatis(现称为MyBatis)是一款优秀的持久层框架,它通过XML或注解的方式将接口方法与SQL语句绑定起来,实现对象关系映射(ORM)功能。ibatis的主要优势...
### iBATIS缓存介绍 #### 一、缓存介绍 **1.1 缓存对象** 理论上,Web分层设计的各个层都可以有缓存,Web中的任何对象都可以成为缓存的对象。例如: - **HTTP请求结果的缓存**:如页面数据或API响应。 - **...
- **iBATIS**: 数据访问层框架,简化数据库操作。 - **Cairngorm和pureMVC**: MVC架构模式实现,帮助组织和管理Flex应用的业务逻辑。 通过本教程的学习,初学者将能深入了解Flex与不同后端技术结合的方式,以及如何...
2. **数据访问抽象**:通过配置文件,iBatis将数据库操作与Java代码解耦,使得更换数据库变得更加容易。 3. **事务管理**:结合Spring,iBatis可以提供事务控制,确保数据的一致性。 **MySQL数据库** MySQL是一个...
Ibatis,全称为MyBatis,是一款开源的Java持久层框架,它允许开发者将SQL语句直接集成到Java代码中,避免了传统的JDBC代码编写,提高了开发效率和可维护性。Ibatis的核心功能包括映射器(Mapper)和SqlSession,通过...
### Struts2+Spring+Ibatis环境配置详解 在Java Web开发领域,Struts2、Spring与Ibatis(现称为MyBatis)是三个非常重要的框架。它们各自有着不同的功能定位,通过合理地结合使用,可以极大地提升项目的开发效率与...
ibatis 实例 配置 源码 依赖包 ibatis-2.3.4.726.jar commons-logging-api.jar commons-logging-1.1.jar commons-dbcp-1.2.2.jar commons-pool.jar
- **配置方式**:Struts2支持XML和注解两种配置方式,而Struts1仅支持XML配置。 - **性能优化**:Struts2在性能方面进行了优化,尤其是在高并发场景下的表现优于Struts1。 **12. Struts的常用标签库及用法** - **...
iBatis 缓存配置策略是提高数据库查询性能的关键手段之一。iBatis 提供了本地缓存机制,用于存储查询结果集,减少不必要的数据库访问。以下是对iBatis缓存配置策略的深入解析: 首先,iBatis 的 Cache 键(key)是...
1. **配置文件**:如struts.xml、spring配置文件(可能包含applicationContext.xml和struts-spring.xml)、ibatis的配置文件(sqlMapConfig.xml)。 2. **实体类(Entity)**:表示数据库中的表结构。 3. **Mapper...
### ibatis配置文件详解 #### 一、ibatis概述 ibatis,又称MyBatis,是一种优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射。ibatis避免了几乎所有的JDBC代码和手动设置参数以及获取结果集。ibatis可以...