`
wander312
  • 浏览: 215915 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

ibatis的cacheModel配置不满足"(flushInterval?,flushOnExecute*,property*)+"约束

 
阅读更多
给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键, 大功告成.....
分享到:
评论

相关推荐

    Spring+ibatis 保留ibatis事务的配置

    这种配置方式使得ibatis能够在不依赖Spring事务管理的情况下独立工作,从而实现了对ibatis事务的保留。 #### 四、实现自定义控制回滚 当保留ibatis事务后,开发者可以在业务逻辑中更自由地控制事务的提交和回滚。...

    ibatis大全

    通过将SQL语句直接写入XML配置文件,iBATIS允许开发者在不接触JDBC API的情况下进行数据操作。 【描述】"ibatis2入门"指出这是一套针对iBATIS 2.x版本的学习资料,涵盖了从基础到进阶的内容。"struts2+spring2+...

    ibatis用xml配置文件配置使用

    本篇文章将深入探讨如何使用XML配置文件来配置iBATIS,以解决你在实际开发中可能遇到的各种问题。 首先,我们了解iBATIS的核心概念——映射器(Mapper)。映射器是定义SQL语句的地方,而XML配置文件是映射器的主要...

    spring+ibatis事务的配置

    很好的spring+ibatis事务的配置文档.

    ibatis学习资料

    - **缓存配置**:通过在`SqlMapConfig.xml`文件中配置`&lt;cacheModel&gt;`标签来启用缓存。 - **缓存的类型**:可以是LRU(最近最少使用)、FIFO(先进先出)等。 - **flushOnExecute**:控制是否在执行每次查询时刷新...

    IBatis.net 配置各种数据库

    《IBatis.net 配置各种数据库详解》 在软件开发中,数据库的连接与操作是不可或缺的一环。IBatis.net,作为一个轻量级的持久层框架,为开发者提供了灵活的数据映射功能,使得数据库操作变得更为简单。本文将详细...

    ibatis配置文件信息

    ### ibatis配置文件信息 #### 一、简介 在Java开发领域中,ibatis(现称为MyBatis)是一款优秀的持久层框架,它通过XML或注解的方式将接口方法与SQL语句绑定起来,实现对象关系映射(ORM)功能。ibatis的主要优势...

    iBATIS缓存介绍

    ### iBATIS缓存介绍 #### 一、缓存介绍 **1.1 缓存对象** 理论上,Web分层设计的各个层都可以有缓存,Web中的任何对象都可以成为缓存的对象。例如: - **HTTP请求结果的缓存**:如页面数据或API响应。 - **...

    FLEX4_flex4教程

    - **iBATIS**: 数据访问层框架,简化数据库操作。 - **Cairngorm和pureMVC**: MVC架构模式实现,帮助组织和管理Flex应用的业务逻辑。 通过本教程的学习,初学者将能深入了解Flex与不同后端技术结合的方式,以及如何...

    jpetstore4.0 (spring+struts+ibatis)

    2. **数据访问抽象**:通过配置文件,iBatis将数据库操作与Java代码解耦,使得更换数据库变得更加容易。 3. **事务管理**:结合Spring,iBatis可以提供事务控制,确保数据的一致性。 **MySQL数据库** MySQL是一个...

    ibatis相关配置

    Ibatis,全称为MyBatis,是一款开源的Java持久层框架,它允许开发者将SQL语句直接集成到Java代码中,避免了传统的JDBC代码编写,提高了开发效率和可维护性。Ibatis的核心功能包括映射器(Mapper)和SqlSession,通过...

    Struts2+Spring+Ibatis环境配置

    ### Struts2+Spring+Ibatis环境配置详解 在Java Web开发领域,Struts2、Spring与Ibatis(现称为MyBatis)是三个非常重要的框架。它们各自有着不同的功能定位,通过合理地结合使用,可以极大地提升项目的开发效率与...

    ibatis 实例 配置 源码

    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

    Java框架面试题总结

    - **配置方式**:Struts2支持XML和注解两种配置方式,而Struts1仅支持XML配置。 - **性能优化**:Struts2在性能方面进行了优化,尤其是在高并发场景下的表现优于Struts1。 **12. Struts的常用标签库及用法** - **...

    ibatis 缓存配置策略

    iBatis 缓存配置策略是提高数据库查询性能的关键手段之一。iBatis 提供了本地缓存机制,用于存储查询结果集,减少不必要的数据库访问。以下是对iBatis缓存配置策略的深入解析: 首先,iBatis 的 Cache 键(key)是...

    struts+spring+ibatis的Demo

    1. **配置文件**:如struts.xml、spring配置文件(可能包含applicationContext.xml和struts-spring.xml)、ibatis的配置文件(sqlMapConfig.xml)。 2. **实体类(Entity)**:表示数据库中的表结构。 3. **Mapper...

    ibatis 配置文件详解

    ### ibatis配置文件详解 #### 一、ibatis概述 ibatis,又称MyBatis,是一种优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射。ibatis避免了几乎所有的JDBC代码和手动设置参数以及获取结果集。ibatis可以...

Global site tag (gtag.js) - Google Analytics