Roller数据库分析

    好久没写博客了,今天晚上看了下apache的roller 项目代码,做了些分析,这里先看看数据库操作部分。

在roller工程中搜索*orm.xml 可以发现有很多orm映射文件。如:WeblogEntry.orm.xml

其中配置orm用到jpa的persistence.xml,orm文件配置方式为:

<?xml version="1.0" encoding="UTF-8"?>
<entity-mappings version="2.0" xmlns="http://java.sun.com/xml/ns/persistence/orm"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/persistence/orm http://java.sun.com/xml/ns/persistence/orm_2_0.xsd">
    <description>Persistence Metadata for Roller</description>
    <persistence-unit-metadata>
        <persistence-unit-defaults>
            <access>PROPERTY</access>
        </persistence-unit-defaults>
    </persistence-unit-metadata>
    <package>org.apache.roller.weblogger.pojos</package>
    <entity metadata-complete="true" name="WeblogEntry"
            class="org.apache.roller.weblogger.pojos.WeblogEntry">
        <table name="weblogentry"/>
        <named-query name="WeblogEntry.getByStatus&amp;Category">
            <query>SELECT w FROM WeblogEntry w WHERE w.status = ?1 AND w.category = ?2</query>
        </named-query>
        <named-query name="WeblogEntry.getByCategory">
            <query>SELECT w FROM WeblogEntry w WHERE w.category = ?1</query>
        </named-query>
其中“ WeblogEntry.getByStatus&amp;Category ” 这个就有点像ibatis框架中的sql查询,搜索看看,在 JPAWeblogEntryManagerImpl.java 文件中发现。 
    public List getWeblogEntries(WeblogCategory cat, boolean subcats)
    throws WebloggerException {
        List results = null;
        
        if (!subcats) {
            Query q =  strategy.getNamedQuery(
                    "WeblogEntry.getByStatus&Category");
            q.setParameter(1, WeblogEntry.PUBLISHED);
            q.setParameter(2, cat);
            results = q.getResultList();
        } else {
            Query q = strategy.getNamedQuery(
                    "WeblogEntry.getByStatus&Category.pathLike&Website");
            q.setParameter(1, WeblogEntry.PUBLISHED);
            q.setParameter(2, cat.getPath() + '%');
            q.setParameter(3, cat.getWebsite());
            results = q.getResultList();
        }
        
        return results;
    }
strategy 这个变量有点像ibatis中的 sqlmapclient,我们来看初始化。

    @com.google.inject.Inject
    protected JPAWeblogEntryManagerImpl(Weblogger roller, JPAPersistenceStrategy strategy) {
        log.debug("Instantiating JPA Weblog Manager");
        this.roller = roller;
        this.strategy = strategy;
    }
用到了 google 的guice 框架代替 spring来实现依赖注入。 这在下一篇文件中写。

你可能感兴趣的:(apache,roller)