Skip to content

Commit

Permalink
chore: deploy docs of project Nop Entropy via GitHub Actions
Browse files Browse the repository at this point in the history
  • Loading branch information
nop-cao committed Aug 28, 2024
1 parent e949bcd commit 9ca50ed
Show file tree
Hide file tree
Showing 5 changed files with 1,488 additions and 1,385 deletions.
2 changes: 1 addition & 1 deletion projects/nop-entropy/docs/dev-guide/orm/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -1259,7 +1259,7 @@ <h1 class="Article-title">[数据库方言](dialect.md)</h1>
</header>
<div class="Article-content col-md-9"><h2 id="DAO封装"><a href="#DAO封装" class="headerlink" title="DAO封装"></a><a href="./dao/">DAO封装</a></h2><p>针对单个实体对象的增删改查封装,支持复杂查询条件,支持分页。一般编写业务代码时我们只需要使用IEntityDao接口,而无需使用IOrmTemplate接口</p>
<h2 id="ORM引擎"><a href="#ORM引擎" class="headerlink" title="ORM引擎"></a><a href="./orm/">ORM引擎</a></h2><p>类似JPA的完整的ORM引擎的实现,它支持EQL对象查询语言,支持租户过滤、级联删除、逻辑删除、字段自动加解密等功能。</p>
<h2 id="事务管理"><a href="#事务管理" class="headerlink" title="事务管理"></a><a href="./transaction/">事务管理</a></h2><h2 id="多数据源"><a href="#多数据源" class="headerlink" title="多数据源"></a><a href="./multi-db/">多数据源</a></h2><h2 id="数据修改历史"><a href="#数据修改历史" class="headerlink" title="数据修改历史"></a><a href="./data-change-log/">数据修改历史</a></h2><h2 id="多对多配置"><a href="#多对多配置" class="headerlink" title="多对多配置"></a><a href="./many-to-many/">多对多配置</a></h2><h2 id="SQL管理"><a href="#SQL管理" class="headerlink" title="SQL管理"></a><a href="./sql-lib/">SQL管理</a></h2><p>类似于MyBatis的动态SQL管理框架。</p>
<h2 id="事务管理"><a href="#事务管理" class="headerlink" title="事务管理"></a><a href="./transaction/">事务管理</a></h2><h2 id="多数据源"><a href="#多数据源" class="headerlink" title="多数据源"></a><a href="./multi-datasource/">多数据源</a></h2><h2 id="数据修改历史"><a href="#数据修改历史" class="headerlink" title="数据修改历史"></a><a href="./data-change-log/">数据修改历史</a></h2><h2 id="多对多配置"><a href="#多对多配置" class="headerlink" title="多对多配置"></a><a href="./many-to-many/">多对多配置</a></h2><h2 id="SQL管理"><a href="#SQL管理" class="headerlink" title="SQL管理"></a><a href="./sql-lib/">SQL管理</a></h2><p>类似于MyBatis的动态SQL管理框架。</p>
<h2 id="增加扩展字段"><a href="#增加扩展字段" class="headerlink" title="增加扩展字段"></a><a href="./ext-field/">增加扩展字段</a></h2><p>在不修改数据库的情况下,通过纵表来保存扩展字段名和扩展字段值,支持对扩展字段的查询和排序。在XPL模板语言中使用的时候,扩展字段和普通字段的使用方式完全一致,<br>都是entity.fld属性访问语法。</p>
<h2 id="DQL查询语言"><a href="#DQL查询语言" class="headerlink" title="DQL查询语言"></a><a href="./dql/">DQL查询语言</a></h2><p>类似于润乾DQL查询语言的查询机制,可以简化BI系统的数据获取。在Java中的使用,参见<a href="./mdx-query/">mdx-query.md</a></p>
<h2 id="字段掩码"><a href="#字段掩码" class="headerlink" title="字段掩码"></a><a href="./field-masking/">字段掩码</a></h2><p>信用卡号等敏感数据显示到界面上或者打印到日志中时需要进行掩码处理</p>
Expand Down
30 changes: 17 additions & 13 deletions projects/nop-entropy/docs/dev-guide/orm/multi-datasource/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -1258,25 +1258,29 @@ <h1 class="Article-title">多数据源配置</h1>

</header>
<div class="Article-content col-md-9"><p>多数据源配置介绍视频: <a target="_blank" rel="noopener" href="https://www.bilibili.com/video/BV1aX4y1Y7Xx/">如何在ORM引擎中同时访问多个数据库</a></p>
<h2 id="数据源管理"><a href="#数据源管理" class="headerlink" title="数据源管理"></a>数据源管理</h2><p>dao-defaults.beans.xml中配置了nopTransactionManager,它自动收集所有前缀为<code>nopDataSource_</code>的数据源定义</p>
<h2 id="数据源管理"><a href="#数据源管理" class="headerlink" title="数据源管理"></a>数据源管理</h2><p>NopOrm引擎中每个querySpace对应于一个独立的DataSource。</p>
<p>可以配置多个DataSource,命名格式为 <code>nopDataSource_&#123;querySpace&#125;</code>。后缀名对应于querySpace</p>
<figure class="highlight xml"><table><tr><td class="code"><pre><code class="hljs xml"><span class="hljs-tag">&lt;<span class="hljs-name">bean</span> <span class="hljs-attr">id</span>=<span class="hljs-string">&quot;nopDataSource_test&quot;</span></span><br><span class="hljs-tag"> <span class="hljs-attr">class</span>=<span class="hljs-string">&quot;com.zaxxer.hikari.HikariDataSource&quot;</span>&gt;</span><br> <span class="hljs-tag">&lt;<span class="hljs-name">constructor-arg</span> <span class="hljs-attr">index</span>=<span class="hljs-string">&quot;0&quot;</span>&gt;</span><br> <span class="hljs-tag">&lt;<span class="hljs-name">bean</span> <span class="hljs-attr">class</span>=<span class="hljs-string">&quot;com.zaxxer.hikari.HikariConfig&quot;</span>&gt;</span><br> <span class="hljs-tag">&lt;<span class="hljs-name">property</span> <span class="hljs-attr">name</span>=<span class="hljs-string">&quot;driverClassName&quot;</span> <span class="hljs-attr">value</span>=<span class="hljs-string">&quot;org.h2.Driver&quot;</span>/&gt;</span><br> <span class="hljs-tag">&lt;<span class="hljs-name">property</span> <span class="hljs-attr">name</span>=<span class="hljs-string">&quot;jdbcUrl&quot;</span> <span class="hljs-attr">value</span>=<span class="hljs-string">&quot;jdbc:h2:mem:test&quot;</span>/&gt;</span><br> <span class="hljs-tag">&lt;<span class="hljs-name">property</span> <span class="hljs-attr">name</span>=<span class="hljs-string">&quot;username&quot;</span> <span class="hljs-attr">value</span>=<span class="hljs-string">&quot;sa&quot;</span>/&gt;</span><br> <span class="hljs-tag">&lt;<span class="hljs-name">property</span> <span class="hljs-attr">name</span>=<span class="hljs-string">&quot;password&quot;</span> <span class="hljs-attr">value</span>=<span class="hljs-string">&quot;&quot;</span>/&gt;</span><br> <span class="hljs-tag">&lt;<span class="hljs-name">property</span> <span class="hljs-attr">name</span>=<span class="hljs-string">&quot;maximumPoolSize&quot;</span> <span class="hljs-attr">value</span>=<span class="hljs-string">&quot;8&quot;</span>/&gt;</span><br> <span class="hljs-tag">&lt;/<span class="hljs-name">bean</span>&gt;</span><br> <span class="hljs-tag">&lt;/<span class="hljs-name">constructor-arg</span>&gt;</span><br><span class="hljs-tag">&lt;/<span class="hljs-name">bean</span>&gt;</span><br></code></pre></td></tr></table></figure>

<p>dao-defaults.beans.xml中配置了nopTransactionManager,它自动收集所有前缀为<code>nopDataSource_</code>的数据源定义</p>
<figure class="highlight xml"><table><tr><td class="code"><pre><code class="hljs xml"><br><span class="hljs-tag">&lt;<span class="hljs-name">bean</span> <span class="hljs-attr">id</span>=<span class="hljs-string">&quot;nopTransactionManager&quot;</span> <span class="hljs-attr">ioc:default</span>=<span class="hljs-string">&quot;true&quot;</span></span><br><span class="hljs-tag"> <span class="hljs-attr">class</span>=<span class="hljs-string">&quot;io.nop.dao.txn.impl.DefaultTransactionManager&quot;</span>&gt;</span><br> <span class="hljs-tag">&lt;<span class="hljs-name">property</span> <span class="hljs-attr">name</span>=<span class="hljs-string">&quot;defaultFactory&quot;</span> <span class="hljs-attr">ref</span>=<span class="hljs-string">&quot;nopTransactionFactory&quot;</span>/&gt;</span><br><br> <span class="hljs-tag">&lt;<span class="hljs-name">property</span> <span class="hljs-attr">name</span>=<span class="hljs-string">&quot;dataSourceMap&quot;</span>&gt;</span><br> <span class="hljs-tag">&lt;<span class="hljs-name">ioc:collect-beans</span> <span class="hljs-attr">only-concrete-classes</span>=<span class="hljs-string">&quot;true&quot;</span> <span class="hljs-attr">as-map</span>=<span class="hljs-string">&quot;true&quot;</span> <span class="hljs-attr">name-prefix</span>=<span class="hljs-string">&quot;nopDataSource_&quot;</span>/&gt;</span><br> <span class="hljs-tag">&lt;/<span class="hljs-name">property</span>&gt;</span><br><br> <span class="hljs-tag">&lt;<span class="hljs-name">property</span> <span class="hljs-attr">name</span>=<span class="hljs-string">&quot;txnGroupMapConfig&quot;</span> <span class="hljs-attr">value</span>=<span class="hljs-string">&quot;@cfg:nop.dao.config.txn-group-map|&quot;</span>/&gt;</span><br> <span class="hljs-tag">&lt;<span class="hljs-name">property</span> <span class="hljs-attr">name</span>=<span class="hljs-string">&quot;transactionMetrics&quot;</span> <span class="hljs-attr">ref</span>=<span class="hljs-string">&quot;nopDaoMetrics&quot;</span>/&gt;</span><br><span class="hljs-tag">&lt;/<span class="hljs-name">bean</span>&gt;</span><br></code></pre></td></tr></table></figure>

<p>在运行时可以调用DefaultTransactionManager对象上的addQuerySpace&#x2F;removeQuerySpace来动态增减数据源。</p>
<h2 id="使用多数据源"><a href="#使用多数据源" class="headerlink" title="使用多数据源"></a>使用多数据源</h2><ol>
<li>在orm.xml的实体定义上可以配置querySpace</li>
</ol>
<figure class="highlight xml"><table><tr><td class="code"><pre><code class="hljs xml"><br><span class="hljs-tag">&lt;<span class="hljs-name">entity</span> <span class="hljs-attr">name</span>=<span class="hljs-string">&quot;xxx.NopAuthUser&quot;</span> <span class="hljs-attr">querySpace</span>=<span class="hljs-string">&quot;test&quot;</span>&gt;</span>...<span class="hljs-tag">&lt;/<span class="hljs-name">entity</span>&gt;</span><br></code></pre></td></tr></table></figure>
<h2 id="使用多数据源"><a href="#使用多数据源" class="headerlink" title="使用多数据源"></a>使用多数据源</h2><h3 id="1-在orm-xml的实体定义上可以配置querySpace"><a href="#1-在orm-xml的实体定义上可以配置querySpace" class="headerlink" title="1. 在orm.xml的实体定义上可以配置querySpace"></a>1. 在orm.xml的实体定义上可以配置querySpace</h3><figure class="highlight xml"><table><tr><td class="code"><pre><code class="hljs xml"><br><span class="hljs-tag">&lt;<span class="hljs-name">entity</span> <span class="hljs-attr">name</span>=<span class="hljs-string">&quot;xxx.NopAuthUser&quot;</span> <span class="hljs-attr">querySpace</span>=<span class="hljs-string">&quot;test&quot;</span>&gt;</span>...<span class="hljs-tag">&lt;/<span class="hljs-name">entity</span>&gt;</span><br></code></pre></td></tr></table></figure>

<h3 id="2-在sql-lib中可以配置querySpace"><a href="#2-在sql-lib中可以配置querySpace" class="headerlink" title="2. 在sql-lib中可以配置querySpace"></a>2. 在sql-lib中可以配置querySpace</h3><figure class="highlight xml"><table><tr><td class="code"><pre><code class="hljs xml"><br><span class="hljs-tag">&lt;<span class="hljs-name">sql-lib</span> <span class="hljs-attr">x:schema</span>=<span class="hljs-string">&quot;/nop/schema/orm/sql-lib.xdef&quot;</span> <span class="hljs-attr">xmlns:x</span>=<span class="hljs-string">&quot;/nop/schema/xdsl.xdef&quot;</span>&gt;</span><br><br> <span class="hljs-tag">&lt;<span class="hljs-name">sqls</span>&gt;</span><br> <span class="hljs-tag">&lt;<span class="hljs-name">sql</span> <span class="hljs-attr">name</span>=<span class="hljs-string">&quot;getAllLocations&quot;</span> <span class="hljs-attr">querySpace</span>=<span class="hljs-string">&quot;test&quot;</span> <span class="hljs-attr">sqlMethod</span>=<span class="hljs-string">&quot;findAll&quot;</span>&gt;</span><br> <span class="hljs-tag">&lt;<span class="hljs-name">source</span>&gt;</span><br> select location from test_geo<br> <span class="hljs-tag">&lt;/<span class="hljs-name">source</span>&gt;</span><br> <span class="hljs-tag">&lt;/<span class="hljs-name">sql</span>&gt;</span><br> <span class="hljs-tag">&lt;/<span class="hljs-name">sqls</span>&gt;</span><br><span class="hljs-tag">&lt;/<span class="hljs-name">sql-lib</span>&gt;</span><br></code></pre></td></tr></table></figure>

<h3 id="3-手工创建SQL对象并执行时可以指定querySpace"><a href="#3-手工创建SQL对象并执行时可以指定querySpace" class="headerlink" title="3. 手工创建SQL对象并执行时可以指定querySpace"></a>3. 手工创建SQL对象并执行时可以指定querySpace</h3><figure class="highlight javascript"><table><tr><td class="code"><pre><code class="hljs javascript"><span class="hljs-variable constant_">SQL</span> sql=<span class="hljs-variable constant_">SQL</span>.<span class="hljs-title function_">begin</span>().<span class="hljs-title function_">sql</span>(<span class="hljs-string">&quot;select * from xxx where id=?&quot;</span>,<span class="hljs-number">3</span>).<span class="hljs-title function_">querySpace</span>(<span class="hljs-string">&quot;test&quot;</span>).<span class="hljs-title function_">end</span>();<br> jdbcTemplate.<span class="hljs-title function_">findFirst</span>(sql);<br></code></pre></td></tr></table></figure>

<ol start="2">
<li>在sql-lib中可以配置querySpace</li>
</ol>
<figure class="highlight xml"><table><tr><td class="code"><pre><code class="hljs xml"><br><span class="hljs-tag">&lt;<span class="hljs-name">sql-lib</span> <span class="hljs-attr">x:schema</span>=<span class="hljs-string">&quot;/nop/schema/orm/sql-lib.xdef&quot;</span> <span class="hljs-attr">xmlns:x</span>=<span class="hljs-string">&quot;/nop/schema/xdsl.xdef&quot;</span>&gt;</span><br><br> <span class="hljs-tag">&lt;<span class="hljs-name">sqls</span>&gt;</span><br> <span class="hljs-tag">&lt;<span class="hljs-name">sql</span> <span class="hljs-attr">name</span>=<span class="hljs-string">&quot;getAllLocations&quot;</span> <span class="hljs-attr">querySpace</span>=<span class="hljs-string">&quot;test&quot;</span> <span class="hljs-attr">sqlMethod</span>=<span class="hljs-string">&quot;findAll&quot;</span>&gt;</span><br> <span class="hljs-tag">&lt;<span class="hljs-name">source</span>&gt;</span><br> select location from test_geo<br> <span class="hljs-tag">&lt;/<span class="hljs-name">source</span>&gt;</span><br> <span class="hljs-tag">&lt;/<span class="hljs-name">sql</span>&gt;</span><br> <span class="hljs-tag">&lt;/<span class="hljs-name">sqls</span>&gt;</span><br><span class="hljs-tag">&lt;/<span class="hljs-name">sql-lib</span>&gt;</span><br></code></pre></td></tr></table></figure>
<h3 id="4-直接为数据源指定dialect"><a href="#4-直接为数据源指定dialect" class="headerlink" title="4. 直接为数据源指定dialect"></a>4. 直接为数据源指定dialect</h3><p>一般情况下会根据DataSource获取到Connection,然后猜测得到对应的数据库方言。如果需要,也可以直接指定</p>
<figure class="highlight yaml"><table><tr><td class="code"><pre><code class="hljs yaml"><span class="hljs-attr">nop:</span><br> <span class="hljs-attr">dao:</span><br> <span class="hljs-attr">config:</span><br> <span class="hljs-attr">query-space-to-dialect:</span> <span class="hljs-string">test=h2gis</span><br></code></pre></td></tr></table></figure>

<ol start="3">
<li>手工创建SQL对象并执行时可以指定querySpace</li>
</ol>
<figure class="highlight java"><table><tr><td class="code"><pre><code class="hljs java">SQL sql=SQL.begin().sql(<span class="hljs-string">&quot;select * from xxx where id=?&quot;</span>,<span class="hljs-number">3</span>).querySpace(<span class="hljs-string">&quot;test&quot;</span>).end();<br> jdbcTemplate.findFirst(sql);<br></code></pre></td></tr></table></figure>
<p>上面示例指定querySpace&#x3D;test对应的数据源使用h2gis这个方言</p>
<h2 id="数据库事务"><a href="#数据库事务" class="headerlink" title="数据库事务"></a>数据库事务</h2><p>在NopOrm引擎中,只有ormTemplate.flush()调用的时候才会执行数据库操作,只有在flush函数中才会真正打开JDBC事务。因此业务处理异常时一般还没有执行数据库更新动作,不涉及到数据库回滚的问题。</p>
<p>对于多数据源配置,我们可以配置多个querySpace对应于一个事务组,则提交的时候会先执行所有数据库访问操作,等所有数据库操作都执行成功之后再逐个commit。</p>
<figure class="highlight plaintext"><table><tr><td class="code"><pre><code class="hljs plaintext">nop.dao.config.txn-group-map= test=default<br></code></pre></td></tr></table></figure>

<p>以上配置表示querySpace&#x3D;test的数据库操作归属于default这个事务组</p>
<h2 id="Excel模型配置"><a href="#Excel模型配置" class="headerlink" title="Excel模型配置"></a>Excel模型配置</h2><p>在表配置中,增加一个【查询空间】配置,通过它可以指定querySpace</p>
<h2 id="动态切换数据源"><a href="#动态切换数据源" class="headerlink" title="动态切换数据源"></a>动态切换数据源</h2><p>通过QuerySpaceEnv可以动态切换default情况下实际使用的数据源</p>
<figure class="highlight javascript"><table><tr><td class="code"><pre><code class="hljs javascript"><span class="hljs-keyword">return</span> <span class="hljs-title class_">QuerySpaceEnv</span>.<span class="hljs-title function_">runInQuerySpace</span>(<span class="hljs-string">&quot;test&quot;</span>, () -&gt; &#123;<br> <span class="hljs-keyword">return</span> <span class="hljs-title function_">doMyWork</span>();<br>&#125;);<br></code></pre></td></tr></table></figure>
Expand Down
Loading

0 comments on commit 9ca50ed

Please sign in to comment.