259 lines
98 KiB
JavaScript
259 lines
98 KiB
JavaScript
import{_ as p}from"./chunks/ArticleMetadata.Sb1DYAHo.js";import{_ as k,D as e,o as n,c as r,I as g,w as d,k as t,a as A,R as y,b as D,e as C}from"./chunks/framework.FVQzxbLi.js";import"./chunks/md5.RtphNWHi.js";const o="/assets/202012262251170.TSBKPOgK.png",F="/assets/202012262252221.UJz8tRtU.png",f=JSON.parse('{"title":"核心配置文件","description":"","frontmatter":{"title":"核心配置文件","author":"查尔斯","date":"2020/12/26 14:48","categories":["MyBatis快速入门"],"tags":["MyBatis","ORM框架"]},"headers":[],"relativePath":"courses/mybatis/01-MyBatis基础/03-核心配置文件.md","filePath":"courses/mybatis/01-MyBatis基础/03-核心配置文件.md","lastUpdated":1660404656000}'),B={name:"courses/mybatis/01-MyBatis基础/03-核心配置文件.md"},c=t("h1",{id:"核心配置文件",tabindex:"-1"},[A("核心配置文件 "),t("a",{class:"header-anchor",href:"#核心配置文件","aria-label":'Permalink to "核心配置文件"'},"")],-1),u=y('<h2 id="前言" tabindex="-1">前言 <a class="header-anchor" href="#前言" aria-label="Permalink to "前言""></a></h2><p><strong>C:</strong> 在上一篇,笔者带大家对 MyBatis 的核心对象做了介绍。本篇,笔者将继续带你学习 MyBatis,掌握对核心配置文件的使用。</p><p>MyBatis 的核心/全局配置文件 mybatis-config.xml ,顾名思义就是对 MyBatis 系统的核心设置文件。包含有 MyBatis 运行时行为配置、类型别名配置、环境配置等。</p><p>下方是核心配置文件的标签模板,笔者将对其中常用的一些标签的常用使用方式进行介绍。</p><p>configuration 根节点</p><ul><li><p><strong>properties</strong> 属性配置</p></li><li><p>settings 运行时行为配置</p></li><li><p><strong>typeAliases</strong> 类型别名配置</p></li><li><p>typeHandlers 类型处理器</p></li><li><p>objectFactory 对象工厂</p></li><li><p>plugins 插件配置</p></li><li><p><strong>environments</strong> 环境配置</p><ul><li>environment 单个环境配置 <ul><li>transactionManager 事务管理器配置</li><li>dataSource 数据源配置</li></ul></li></ul></li><li><p>databaseIdProvider 数据库厂商标识</p></li><li><p><strong>mappers</strong> 映射器配置</p></li></ul><div class="tip custom-block"><p class="custom-block-title">笔者说</p><p>这些标签在使用时一定要注意标签的顺序和允许使用次数。Eclipse 中可以通过在标签上按 F2 查看该标签下的内容模型,即标签的顺序和允许使用次数。你看下图中画圈处就是各个标签的顺序,后面的 ?号 代表指定标签最多允许使用一次。</p></div><p><img src="'+o+`" alt="202012262251170"></p><h2 id="properties元素" tabindex="-1">properties元素 <a class="header-anchor" href="#properties元素" aria-label="Permalink to "properties元素""></a></h2><p>如果你学过 Maven,那 properties 元素应该不难理解。在 MyBatis 的核心配置文件中,有很多配置是可能经常需要变动或复用的,如果直接将值硬编码在对应位置,将不利于统一维护管理和复用。</p><p>properties 元素的作用就体现出来了,它的使用方式有两种。</p><h3 id="内部编写" tabindex="-1">内部编写 <a class="header-anchor" href="#内部编写" aria-label="Permalink to "内部编写""></a></h3><p><strong>第一种使用方式,是内部编写配置</strong> ,示例如下:</p><div class="language-xml vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">xml</span><pre class="shiki shiki-themes github-light github-dark-dimmed vp-code"><code><span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;"><?</span><span style="--shiki-light:#22863A;--shiki-dark:#8DDB8C;">xml</span><span style="--shiki-light:#6F42C1;--shiki-dark:#6CB6FF;"> version</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">=</span><span style="--shiki-light:#032F62;--shiki-dark:#96D0FF;">"1.0"</span><span style="--shiki-light:#6F42C1;--shiki-dark:#6CB6FF;"> encoding</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">=</span><span style="--shiki-light:#032F62;--shiki-dark:#96D0FF;">"UTF-8"</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">?></span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;"><!</span><span style="--shiki-light:#D73A49;--shiki-dark:#F47067;">DOCTYPE</span><span style="--shiki-light:#005CC5;--shiki-dark:#6CB6FF;"> configuration</span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">PUBLIC "-//mybatis.org//DTD Config 3.0//EN"</span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">"http://mybatis.org/dtd/mybatis-3-config.dtd"></span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;"><</span><span style="--shiki-light:#22863A;--shiki-dark:#8DDB8C;">configuration</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">></span></span>
|
||
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#768390;"> <!-- 要配置哪些属性是根据你项目需求来定的,笔者仅仅做一个示例而已 --></span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;"> <</span><span style="--shiki-light:#22863A;--shiki-dark:#8DDB8C;">properties</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">></span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;"> <</span><span style="--shiki-light:#22863A;--shiki-dark:#8DDB8C;">property</span><span style="--shiki-light:#6F42C1;--shiki-dark:#6CB6FF;"> name</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">=</span><span style="--shiki-light:#032F62;--shiki-dark:#96D0FF;">"mysql.driver"</span><span style="--shiki-light:#6F42C1;--shiki-dark:#6CB6FF;"> value</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">=</span><span style="--shiki-light:#032F62;--shiki-dark:#96D0FF;">"com.mysql.jdbc.Driver"</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">/></span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;"> <</span><span style="--shiki-light:#22863A;--shiki-dark:#8DDB8C;">property</span><span style="--shiki-light:#6F42C1;--shiki-dark:#6CB6FF;"> name</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">=</span><span style="--shiki-light:#032F62;--shiki-dark:#96D0FF;">"mysql.url"</span><span style="--shiki-light:#6F42C1;--shiki-dark:#6CB6FF;"> value</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">=</span><span style="--shiki-light:#032F62;--shiki-dark:#96D0FF;">"jdbc:mysql://localhost:3306/mybatis_demo_db"</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">/></span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;"> <</span><span style="--shiki-light:#22863A;--shiki-dark:#8DDB8C;">property</span><span style="--shiki-light:#6F42C1;--shiki-dark:#6CB6FF;"> name</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">=</span><span style="--shiki-light:#032F62;--shiki-dark:#96D0FF;">"mysql.username"</span><span style="--shiki-light:#6F42C1;--shiki-dark:#6CB6FF;"> value</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">=</span><span style="--shiki-light:#032F62;--shiki-dark:#96D0FF;">"root"</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">/></span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;"> <</span><span style="--shiki-light:#22863A;--shiki-dark:#8DDB8C;">property</span><span style="--shiki-light:#6F42C1;--shiki-dark:#6CB6FF;"> name</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">=</span><span style="--shiki-light:#032F62;--shiki-dark:#96D0FF;">"mysql.password"</span><span style="--shiki-light:#6F42C1;--shiki-dark:#6CB6FF;"> value</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">=</span><span style="--shiki-light:#032F62;--shiki-dark:#96D0FF;">"root"</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">/></span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;"> <</span><span style="--shiki-light:#22863A;--shiki-dark:#8DDB8C;">property</span><span style="--shiki-light:#6F42C1;--shiki-dark:#6CB6FF;"> name</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">=</span><span style="--shiki-light:#032F62;--shiki-dark:#96D0FF;">"txType"</span><span style="--shiki-light:#6F42C1;--shiki-dark:#6CB6FF;"> value</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">=</span><span style="--shiki-light:#032F62;--shiki-dark:#96D0FF;">"JDBC"</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">/></span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;"> </</span><span style="--shiki-light:#22863A;--shiki-dark:#8DDB8C;">properties</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">></span></span>
|
||
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#768390;"> <!-- ...略... --></span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;"> <</span><span style="--shiki-light:#22863A;--shiki-dark:#8DDB8C;">environments</span><span style="--shiki-light:#6F42C1;--shiki-dark:#6CB6FF;"> default</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">=</span><span style="--shiki-light:#032F62;--shiki-dark:#96D0FF;">"develop"</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">></span></span>
|
||
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#768390;"> <!-- 单个环境配置 --></span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;"> <</span><span style="--shiki-light:#22863A;--shiki-dark:#8DDB8C;">environment</span><span style="--shiki-light:#6F42C1;--shiki-dark:#6CB6FF;"> id</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">=</span><span style="--shiki-light:#032F62;--shiki-dark:#96D0FF;">"develop"</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">></span></span>
|
||
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#768390;"> <!-- 事务管理配置 --></span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;"> <</span><span style="--shiki-light:#22863A;--shiki-dark:#8DDB8C;">transactionManager</span><span style="--shiki-light:#6F42C1;--shiki-dark:#6CB6FF;"> type</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">=</span><span style="--shiki-light:#032F62;--shiki-dark:#96D0FF;">"\${txType}"</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">/></span></span>
|
||
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#768390;"> <!-- 数据源配置 --></span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;"> <</span><span style="--shiki-light:#22863A;--shiki-dark:#8DDB8C;">dataSource</span><span style="--shiki-light:#6F42C1;--shiki-dark:#6CB6FF;"> type</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">=</span><span style="--shiki-light:#032F62;--shiki-dark:#96D0FF;">"POOLED"</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">></span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;"> <</span><span style="--shiki-light:#22863A;--shiki-dark:#8DDB8C;">property</span><span style="--shiki-light:#6F42C1;--shiki-dark:#6CB6FF;"> name</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">=</span><span style="--shiki-light:#032F62;--shiki-dark:#96D0FF;">"driver"</span><span style="--shiki-light:#6F42C1;--shiki-dark:#6CB6FF;"> value</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">=</span><span style="--shiki-light:#032F62;--shiki-dark:#96D0FF;">"\${mysql.driver}"</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">/></span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;"> <</span><span style="--shiki-light:#22863A;--shiki-dark:#8DDB8C;">property</span><span style="--shiki-light:#6F42C1;--shiki-dark:#6CB6FF;"> name</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">=</span><span style="--shiki-light:#032F62;--shiki-dark:#96D0FF;">"url"</span><span style="--shiki-light:#6F42C1;--shiki-dark:#6CB6FF;"> value</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">=</span><span style="--shiki-light:#032F62;--shiki-dark:#96D0FF;">"\${mysql.url}"</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">/></span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;"> <</span><span style="--shiki-light:#22863A;--shiki-dark:#8DDB8C;">property</span><span style="--shiki-light:#6F42C1;--shiki-dark:#6CB6FF;"> name</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">=</span><span style="--shiki-light:#032F62;--shiki-dark:#96D0FF;">"username"</span><span style="--shiki-light:#6F42C1;--shiki-dark:#6CB6FF;"> value</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">=</span><span style="--shiki-light:#032F62;--shiki-dark:#96D0FF;">"\${mysql.username}"</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">/></span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;"> <</span><span style="--shiki-light:#22863A;--shiki-dark:#8DDB8C;">property</span><span style="--shiki-light:#6F42C1;--shiki-dark:#6CB6FF;"> name</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">=</span><span style="--shiki-light:#032F62;--shiki-dark:#96D0FF;">"password"</span><span style="--shiki-light:#6F42C1;--shiki-dark:#6CB6FF;"> value</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">=</span><span style="--shiki-light:#032F62;--shiki-dark:#96D0FF;">"\${mysql.password}"</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">/></span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;"> </</span><span style="--shiki-light:#22863A;--shiki-dark:#8DDB8C;">dataSource</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">></span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;"> </</span><span style="--shiki-light:#22863A;--shiki-dark:#8DDB8C;">environment</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">></span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;"> </</span><span style="--shiki-light:#22863A;--shiki-dark:#8DDB8C;">environments</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">></span></span>
|
||
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#768390;"> <!-- ...略... --></span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;"></</span><span style="--shiki-light:#22863A;--shiki-dark:#8DDB8C;">configuration</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">></span></span></code></pre></div><h3 id="外部引入" tabindex="-1">外部引入 <a class="header-anchor" href="#外部引入" aria-label="Permalink to "外部引入""></a></h3><p><strong>第二种使用方式,是在外部配置文件编写配置,然后通过 properties 引入外部配置</strong> ,示例如下:</p><p>在 classpath 下 添加 一个 properties 配置文件,记录各种配置信息。(此处笔者记录的是数据源信息)</p><div class="language- vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang"></span><pre class="shiki shiki-themes github-light github-dark-dimmed vp-code"><code><span class="line"><span># MySQL </span></span>
|
||
<span class="line"><span>mysql.driver=com.mysql.jdbc.Driver</span></span>
|
||
<span class="line"><span>mysql.url=jdbc:mysql://localhost:3306/mybatis_demo_db</span></span>
|
||
<span class="line"><span>mysql.username=root</span></span>
|
||
<span class="line"><span>mysql.password=root</span></span></code></pre></div><div class="language-xml vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">xml</span><pre class="shiki shiki-themes github-light github-dark-dimmed vp-code"><code><span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;"><?</span><span style="--shiki-light:#22863A;--shiki-dark:#8DDB8C;">xml</span><span style="--shiki-light:#6F42C1;--shiki-dark:#6CB6FF;"> version</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">=</span><span style="--shiki-light:#032F62;--shiki-dark:#96D0FF;">"1.0"</span><span style="--shiki-light:#6F42C1;--shiki-dark:#6CB6FF;"> encoding</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">=</span><span style="--shiki-light:#032F62;--shiki-dark:#96D0FF;">"UTF-8"</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">?></span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;"><!</span><span style="--shiki-light:#D73A49;--shiki-dark:#F47067;">DOCTYPE</span><span style="--shiki-light:#005CC5;--shiki-dark:#6CB6FF;"> configuration</span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">PUBLIC "-//mybatis.org//DTD Config 3.0//EN"</span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">"http://mybatis.org/dtd/mybatis-3-config.dtd"></span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;"><</span><span style="--shiki-light:#22863A;--shiki-dark:#8DDB8C;">configuration</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">></span></span>
|
||
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#768390;"> <!-- 加载外部的配置文件 --></span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;"> <</span><span style="--shiki-light:#22863A;--shiki-dark:#8DDB8C;">properties</span><span style="--shiki-light:#6F42C1;--shiki-dark:#6CB6FF;"> resource</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">=</span><span style="--shiki-light:#032F62;--shiki-dark:#96D0FF;">"db.properties"</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">/></span></span>
|
||
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#768390;"> <!-- ...略... --></span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;"> <</span><span style="--shiki-light:#22863A;--shiki-dark:#8DDB8C;">environments</span><span style="--shiki-light:#6F42C1;--shiki-dark:#6CB6FF;"> default</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">=</span><span style="--shiki-light:#032F62;--shiki-dark:#96D0FF;">"develop"</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">></span></span>
|
||
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#768390;"> <!-- 单个环境配置 --></span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;"> <</span><span style="--shiki-light:#22863A;--shiki-dark:#8DDB8C;">environment</span><span style="--shiki-light:#6F42C1;--shiki-dark:#6CB6FF;"> id</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">=</span><span style="--shiki-light:#032F62;--shiki-dark:#96D0FF;">"develop"</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">></span></span>
|
||
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#768390;"> <!-- 事务管理配置 --></span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;"> <</span><span style="--shiki-light:#22863A;--shiki-dark:#8DDB8C;">transactionManager</span><span style="--shiki-light:#6F42C1;--shiki-dark:#6CB6FF;"> type</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">=</span><span style="--shiki-light:#032F62;--shiki-dark:#96D0FF;">"JDBC"</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">/></span></span>
|
||
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#768390;"> <!-- 数据源配置 --></span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;"> <</span><span style="--shiki-light:#22863A;--shiki-dark:#8DDB8C;">dataSource</span><span style="--shiki-light:#6F42C1;--shiki-dark:#6CB6FF;"> type</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">=</span><span style="--shiki-light:#032F62;--shiki-dark:#96D0FF;">"POOLED"</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">></span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;"> <</span><span style="--shiki-light:#22863A;--shiki-dark:#8DDB8C;">property</span><span style="--shiki-light:#6F42C1;--shiki-dark:#6CB6FF;"> name</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">=</span><span style="--shiki-light:#032F62;--shiki-dark:#96D0FF;">"driver"</span><span style="--shiki-light:#6F42C1;--shiki-dark:#6CB6FF;"> value</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">=</span><span style="--shiki-light:#032F62;--shiki-dark:#96D0FF;">"\${mysql.driver}"</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">/></span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;"> <</span><span style="--shiki-light:#22863A;--shiki-dark:#8DDB8C;">property</span><span style="--shiki-light:#6F42C1;--shiki-dark:#6CB6FF;"> name</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">=</span><span style="--shiki-light:#032F62;--shiki-dark:#96D0FF;">"url"</span><span style="--shiki-light:#6F42C1;--shiki-dark:#6CB6FF;"> value</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">=</span><span style="--shiki-light:#032F62;--shiki-dark:#96D0FF;">"\${mysql.url}"</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">/></span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;"> <</span><span style="--shiki-light:#22863A;--shiki-dark:#8DDB8C;">property</span><span style="--shiki-light:#6F42C1;--shiki-dark:#6CB6FF;"> name</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">=</span><span style="--shiki-light:#032F62;--shiki-dark:#96D0FF;">"username"</span><span style="--shiki-light:#6F42C1;--shiki-dark:#6CB6FF;"> value</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">=</span><span style="--shiki-light:#032F62;--shiki-dark:#96D0FF;">"\${mysql.username}"</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">/></span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;"> <</span><span style="--shiki-light:#22863A;--shiki-dark:#8DDB8C;">property</span><span style="--shiki-light:#6F42C1;--shiki-dark:#6CB6FF;"> name</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">=</span><span style="--shiki-light:#032F62;--shiki-dark:#96D0FF;">"password"</span><span style="--shiki-light:#6F42C1;--shiki-dark:#6CB6FF;"> value</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">=</span><span style="--shiki-light:#032F62;--shiki-dark:#96D0FF;">"\${mysql.password}"</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">/></span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;"> </</span><span style="--shiki-light:#22863A;--shiki-dark:#8DDB8C;">dataSource</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">></span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;"> </</span><span style="--shiki-light:#22863A;--shiki-dark:#8DDB8C;">environment</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">></span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;"> </</span><span style="--shiki-light:#22863A;--shiki-dark:#8DDB8C;">environments</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">></span></span>
|
||
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#768390;"> <!-- ...略... --></span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;"></</span><span style="--shiki-light:#22863A;--shiki-dark:#8DDB8C;">configuration</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">></span></span></code></pre></div><div class="tip custom-block"><p class="custom-block-title">笔者说</p><p>大家猜一下,如果这两种方式在同时使用时遇到了相同配置,那么哪种方式的配置会生效呢?</p><p>测试思路: 可以先故意改错内部配置方式的 mysql.password 值,如果测试运行正常,说明外部配置生效了,反之则内部配置生效了。 也可以再故意调错外部的值试试。</p></div><div class="language-xml vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">xml</span><pre class="shiki shiki-themes github-light github-dark-dimmed vp-code"><code><span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;"><</span><span style="--shiki-light:#22863A;--shiki-dark:#8DDB8C;">properties</span><span style="--shiki-light:#6F42C1;--shiki-dark:#6CB6FF;"> resource</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">=</span><span style="--shiki-light:#032F62;--shiki-dark:#96D0FF;">"db.properties"</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">></span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;"> <</span><span style="--shiki-light:#22863A;--shiki-dark:#8DDB8C;">property</span><span style="--shiki-light:#6F42C1;--shiki-dark:#6CB6FF;"> name</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">=</span><span style="--shiki-light:#032F62;--shiki-dark:#96D0FF;">"mysql.password"</span><span style="--shiki-light:#6F42C1;--shiki-dark:#6CB6FF;"> value</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">=</span><span style="--shiki-light:#032F62;--shiki-dark:#96D0FF;">"root"</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">/></span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;"> <</span><span style="--shiki-light:#22863A;--shiki-dark:#8DDB8C;">property</span><span style="--shiki-light:#6F42C1;--shiki-dark:#6CB6FF;"> name</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">=</span><span style="--shiki-light:#032F62;--shiki-dark:#96D0FF;">"txType"</span><span style="--shiki-light:#6F42C1;--shiki-dark:#6CB6FF;"> value</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">=</span><span style="--shiki-light:#032F62;--shiki-dark:#96D0FF;">"JDBC"</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">/></span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;"></</span><span style="--shiki-light:#22863A;--shiki-dark:#8DDB8C;">properties</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">></span></span></code></pre></div><h2 id="settings元素-下篇讲解" tabindex="-1">settings元素(下篇讲解) <a class="header-anchor" href="#settings元素-下篇讲解" aria-label="Permalink to "settings元素(下篇讲解)""></a></h2><p>settings 元素是用来设置和改变 MyBatis 在运行时的一些行为的。</p><table><thead><tr><th><strong>设置项</strong></th><th style="text-align:center;"><strong>描述</strong></th><th style="text-align:center;"><strong>允许值</strong></th><th style="text-align:center;"><strong>默认值</strong></th></tr></thead><tbody><tr><td>cacheEnabled</td><td style="text-align:center;">对在此配置文件下的所有cache进行全局性开/关设置</td><td style="text-align:center;">true | false</td><td style="text-align:center;">true</td></tr><tr><td>lazyLoadingEnabled</td><td style="text-align:center;">全局性设置懒加载。如果设为false,则所有相关联的都会被初始化加载</td><td style="text-align:center;">true | false</td><td style="text-align:center;">true</td></tr><tr><td>autoMappingBehavior</td><td style="text-align:center;">MyBatis对于resultMap自动映射匹配级别</td><td style="text-align:center;">NONE|PARTIAL |FULL</td><td style="text-align:center;">PARTIAL</td></tr><tr><td><strong>……(9个)</strong></td><td style="text-align:center;"><strong>......</strong></td><td style="text-align:center;"><strong>......</strong></td><td style="text-align:center;"><strong>......</strong></td></tr></tbody></table><h2 id="typealias元素" tabindex="-1">typeAlias元素 <a class="header-anchor" href="#typealias元素" aria-label="Permalink to "typeAlias元素""></a></h2><p>在 SQL 映射文件中,我们在使用到某些类型时,需要编写好对应的全类名,大量的使用时,繁琐不说还容易错,如下 resultType 属性示例。</p><div class="language-xml vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">xml</span><pre class="shiki shiki-themes github-light github-dark-dimmed vp-code"><code><span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;"><</span><span style="--shiki-light:#22863A;--shiki-dark:#8DDB8C;">select</span><span style="--shiki-light:#6F42C1;--shiki-dark:#6CB6FF;"> id</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">=</span><span style="--shiki-light:#032F62;--shiki-dark:#96D0FF;">"selectList"</span><span style="--shiki-light:#6F42C1;--shiki-dark:#6CB6FF;"> resultType</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">=</span><span style="--shiki-light:#032F62;--shiki-dark:#96D0FF;">"com.example.pojo.User"</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">></span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;"> SELECT * FROM \`user\`</span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;"></</span><span style="--shiki-light:#22863A;--shiki-dark:#8DDB8C;">select</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">></span></span></code></pre></div><p>而typeAlias 元素就可以解决此问题,通过它的配置,可以为指定类型配置好别名,这样在 SQL 映射文件中就可以不用写全限定类名,而是直接使用配置的类型别名了。它的使用方式也有两种。</p><h3 id="单个配置" tabindex="-1">单个配置 <a class="header-anchor" href="#单个配置" aria-label="Permalink to "单个配置""></a></h3><p><strong>第一种使用方式:挨个对不同类型进行别名配置。</strong></p><div class="language-xml vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">xml</span><pre class="shiki shiki-themes github-light github-dark-dimmed vp-code"><code><span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;"><</span><span style="--shiki-light:#22863A;--shiki-dark:#8DDB8C;">typeAliases</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">></span></span>
|
||
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#768390;"> <!-- </span></span>
|
||
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#768390;"> 单个类型的别名配置(如果类型多,需要配置大量的该标签)</span></span>
|
||
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#768390;"> type:指定类型的全类名</span></span>
|
||
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#768390;"> alias:该类型的别名</span></span>
|
||
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#768390;"> --></span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;"> <</span><span style="--shiki-light:#22863A;--shiki-dark:#8DDB8C;">typeAlias</span><span style="--shiki-light:#6F42C1;--shiki-dark:#6CB6FF;"> type</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">=</span><span style="--shiki-light:#032F62;--shiki-dark:#96D0FF;">"com.example.pojo.User"</span><span style="--shiki-light:#6F42C1;--shiki-dark:#6CB6FF;"> alias</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">=</span><span style="--shiki-light:#032F62;--shiki-dark:#96D0FF;">"User"</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">/></span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;"></</span><span style="--shiki-light:#22863A;--shiki-dark:#8DDB8C;">typeAliases</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">></span></span></code></pre></div><h3 id="包扫描" tabindex="-1">包扫描 <a class="header-anchor" href="#包扫描" aria-label="Permalink to "包扫描""></a></h3><p><strong>第二种使用方式:当要配置别名的类型都在指定的 package 下时,可以直接开启包扫描,批量实现别名自动配置。</strong></p><div class="language-xml vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">xml</span><pre class="shiki shiki-themes github-light github-dark-dimmed vp-code"><code><span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#768390;"><!-- 类型别名配置 --></span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;"><</span><span style="--shiki-light:#22863A;--shiki-dark:#8DDB8C;">typeAliases</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">></span></span>
|
||
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#768390;"> <!-- </span></span>
|
||
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#768390;"> 会自动对指定包(包含其子包)下的类进行别名注册</span></span>
|
||
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#768390;"> 注册的别名是:该类型的类名小写</span></span>
|
||
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#768390;"> 例如:User类自动注册的别名是user</span></span>
|
||
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#768390;"> --></span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;"> <</span><span style="--shiki-light:#22863A;--shiki-dark:#8DDB8C;">package</span><span style="--shiki-light:#6F42C1;--shiki-dark:#6CB6FF;"> name</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">=</span><span style="--shiki-light:#032F62;--shiki-dark:#96D0FF;">"com.example.pojo"</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">/></span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;"></</span><span style="--shiki-light:#22863A;--shiki-dark:#8DDB8C;">typeAliases</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">></span></span></code></pre></div><h3 id="使用效果" tabindex="-1">使用效果 <a class="header-anchor" href="#使用效果" aria-label="Permalink to "使用效果""></a></h3><p>下方是有了类型别名配置之后,SQL 映射文件内使用类型的效果。</p><div class="language-xml vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">xml</span><pre class="shiki shiki-themes github-light github-dark-dimmed vp-code"><code><span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#768390;"><!-- 有了别名配置,使用指定类型时,直接用它的别名即可,而且不区分大小写(原因见下方) --></span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;"><</span><span style="--shiki-light:#22863A;--shiki-dark:#8DDB8C;">select</span><span style="--shiki-light:#6F42C1;--shiki-dark:#6CB6FF;"> id</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">=</span><span style="--shiki-light:#032F62;--shiki-dark:#96D0FF;">"selectList"</span><span style="--shiki-light:#6F42C1;--shiki-dark:#6CB6FF;"> resultType</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">=</span><span style="--shiki-light:#032F62;--shiki-dark:#96D0FF;">"User"</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">></span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;"> SELECT * FROM \`user\`</span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;"></</span><span style="--shiki-light:#22863A;--shiki-dark:#8DDB8C;">select</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">></span></span></code></pre></div><div class="tip custom-block"><p class="custom-block-title">笔者说</p><p>在 MyBatis 中有一个类 TypeAliasRegistry ,它的作用就是进行类型别名注册和解析,Java 中常见的类型都已经被它注册好了别名。</p></div><div class="language-java vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">java</span><pre class="shiki shiki-themes github-light github-dark-dimmed vp-code"><code><span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F47067;">package</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;"> org.apache.ibatis.type;</span></span>
|
||
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#768390;">// ...略...</span></span>
|
||
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F47067;">public</span><span style="--shiki-light:#D73A49;--shiki-dark:#F47067;"> class</span><span style="--shiki-light:#6F42C1;--shiki-dark:#F69D50;"> TypeAliasRegistry</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;"> {</span></span>
|
||
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#768390;"> /** Map<类型别名, 对应类型的Class对象> */</span></span>
|
||
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F47067;"> private</span><span style="--shiki-light:#D73A49;--shiki-dark:#F47067;"> final</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;"> Map</span><span style="--shiki-light:#24292E;--shiki-dark:#F69D50;"><</span><span style="--shiki-light:#D73A49;--shiki-dark:#F47067;">String</span><span style="--shiki-light:#24292E;--shiki-dark:#F69D50;">, </span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">Class</span><span style="--shiki-light:#24292E;--shiki-dark:#F69D50;"><</span><span style="--shiki-light:#D73A49;--shiki-dark:#F47067;">?</span><span style="--shiki-light:#24292E;--shiki-dark:#F69D50;">>> </span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">typeAliases</span><span style="--shiki-light:#D73A49;--shiki-dark:#F47067;"> =</span><span style="--shiki-light:#D73A49;--shiki-dark:#F47067;"> new</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;"> HashMap<>();</span></span>
|
||
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#768390;"> /** 在创建对象时进行常用 Java 类型的别名注册 */</span></span>
|
||
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F47067;"> public</span><span style="--shiki-light:#6F42C1;--shiki-dark:#DCBDFB;"> TypeAliasRegistry</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">() {</span></span>
|
||
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#768390;"> // String 类型注册的别名为 string </span></span>
|
||
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#DCBDFB;"> registerAlias</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">(</span><span style="--shiki-light:#032F62;--shiki-dark:#96D0FF;">"string"</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">, String.class);</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#DCBDFB;"> registerAlias</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">(</span><span style="--shiki-light:#032F62;--shiki-dark:#96D0FF;">"byte"</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">, Byte.class);</span></span>
|
||
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#DCBDFB;"> registerAlias</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">(</span><span style="--shiki-light:#032F62;--shiki-dark:#96D0FF;">"long"</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">, Long.class);</span></span>
|
||
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#DCBDFB;"> registerAlias</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">(</span><span style="--shiki-light:#032F62;--shiki-dark:#96D0FF;">"short"</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">, Short.class);</span></span>
|
||
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#DCBDFB;"> registerAlias</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">(</span><span style="--shiki-light:#032F62;--shiki-dark:#96D0FF;">"int"</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">, Integer.class);</span></span>
|
||
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#DCBDFB;"> registerAlias</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">(</span><span style="--shiki-light:#032F62;--shiki-dark:#96D0FF;">"integer"</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">, Integer.class);</span></span>
|
||
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#DCBDFB;"> registerAlias</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">(</span><span style="--shiki-light:#032F62;--shiki-dark:#96D0FF;">"double"</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">, Double.class);</span></span>
|
||
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#DCBDFB;"> registerAlias</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">(</span><span style="--shiki-light:#032F62;--shiki-dark:#96D0FF;">"float"</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">, Float.class);</span></span>
|
||
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#DCBDFB;"> registerAlias</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">(</span><span style="--shiki-light:#032F62;--shiki-dark:#96D0FF;">"boolean"</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">, Boolean.class);</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#DCBDFB;"> registerAlias</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">(</span><span style="--shiki-light:#032F62;--shiki-dark:#96D0FF;">"byte[]"</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">, </span><span style="--shiki-light:#D73A49;--shiki-dark:#F47067;">Byte</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">[].class);</span></span>
|
||
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#DCBDFB;"> registerAlias</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">(</span><span style="--shiki-light:#032F62;--shiki-dark:#96D0FF;">"long[]"</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">, </span><span style="--shiki-light:#D73A49;--shiki-dark:#F47067;">Long</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">[].class);</span></span>
|
||
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#DCBDFB;"> registerAlias</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">(</span><span style="--shiki-light:#032F62;--shiki-dark:#96D0FF;">"short[]"</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">, </span><span style="--shiki-light:#D73A49;--shiki-dark:#F47067;">Short</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">[].class);</span></span>
|
||
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#DCBDFB;"> registerAlias</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">(</span><span style="--shiki-light:#032F62;--shiki-dark:#96D0FF;">"int[]"</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">, </span><span style="--shiki-light:#D73A49;--shiki-dark:#F47067;">Integer</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">[].class);</span></span>
|
||
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#DCBDFB;"> registerAlias</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">(</span><span style="--shiki-light:#032F62;--shiki-dark:#96D0FF;">"integer[]"</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">, </span><span style="--shiki-light:#D73A49;--shiki-dark:#F47067;">Integer</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">[].class);</span></span>
|
||
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#DCBDFB;"> registerAlias</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">(</span><span style="--shiki-light:#032F62;--shiki-dark:#96D0FF;">"double[]"</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">, </span><span style="--shiki-light:#D73A49;--shiki-dark:#F47067;">Double</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">[].class);</span></span>
|
||
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#DCBDFB;"> registerAlias</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">(</span><span style="--shiki-light:#032F62;--shiki-dark:#96D0FF;">"float[]"</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">, </span><span style="--shiki-light:#D73A49;--shiki-dark:#F47067;">Float</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">[].class);</span></span>
|
||
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#DCBDFB;"> registerAlias</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">(</span><span style="--shiki-light:#032F62;--shiki-dark:#96D0FF;">"boolean[]"</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">, </span><span style="--shiki-light:#D73A49;--shiki-dark:#F47067;">Boolean</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">[].class);</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#DCBDFB;"> registerAlias</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">(</span><span style="--shiki-light:#032F62;--shiki-dark:#96D0FF;">"_byte"</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">, byte.class);</span></span>
|
||
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#DCBDFB;"> registerAlias</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">(</span><span style="--shiki-light:#032F62;--shiki-dark:#96D0FF;">"_long"</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">, long.class);</span></span>
|
||
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#DCBDFB;"> registerAlias</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">(</span><span style="--shiki-light:#032F62;--shiki-dark:#96D0FF;">"_short"</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">, short.class);</span></span>
|
||
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#DCBDFB;"> registerAlias</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">(</span><span style="--shiki-light:#032F62;--shiki-dark:#96D0FF;">"_int"</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">, int.class);</span></span>
|
||
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#DCBDFB;"> registerAlias</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">(</span><span style="--shiki-light:#032F62;--shiki-dark:#96D0FF;">"_integer"</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">, int.class);</span></span>
|
||
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#DCBDFB;"> registerAlias</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">(</span><span style="--shiki-light:#032F62;--shiki-dark:#96D0FF;">"_double"</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">, double.class);</span></span>
|
||
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#DCBDFB;"> registerAlias</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">(</span><span style="--shiki-light:#032F62;--shiki-dark:#96D0FF;">"_float"</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">, float.class);</span></span>
|
||
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#DCBDFB;"> registerAlias</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">(</span><span style="--shiki-light:#032F62;--shiki-dark:#96D0FF;">"_boolean"</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">, boolean.class);</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#DCBDFB;"> registerAlias</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">(</span><span style="--shiki-light:#032F62;--shiki-dark:#96D0FF;">"_byte[]"</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">, </span><span style="--shiki-light:#D73A49;--shiki-dark:#F47067;">byte</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">[].class);</span></span>
|
||
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#DCBDFB;"> registerAlias</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">(</span><span style="--shiki-light:#032F62;--shiki-dark:#96D0FF;">"_long[]"</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">, </span><span style="--shiki-light:#D73A49;--shiki-dark:#F47067;">long</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">[].class);</span></span>
|
||
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#DCBDFB;"> registerAlias</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">(</span><span style="--shiki-light:#032F62;--shiki-dark:#96D0FF;">"_short[]"</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">, </span><span style="--shiki-light:#D73A49;--shiki-dark:#F47067;">short</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">[].class);</span></span>
|
||
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#DCBDFB;"> registerAlias</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">(</span><span style="--shiki-light:#032F62;--shiki-dark:#96D0FF;">"_int[]"</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">, </span><span style="--shiki-light:#D73A49;--shiki-dark:#F47067;">int</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">[].class);</span></span>
|
||
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#DCBDFB;"> registerAlias</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">(</span><span style="--shiki-light:#032F62;--shiki-dark:#96D0FF;">"_integer[]"</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">, </span><span style="--shiki-light:#D73A49;--shiki-dark:#F47067;">int</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">[].class);</span></span>
|
||
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#DCBDFB;"> registerAlias</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">(</span><span style="--shiki-light:#032F62;--shiki-dark:#96D0FF;">"_double[]"</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">, </span><span style="--shiki-light:#D73A49;--shiki-dark:#F47067;">double</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">[].class);</span></span>
|
||
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#DCBDFB;"> registerAlias</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">(</span><span style="--shiki-light:#032F62;--shiki-dark:#96D0FF;">"_float[]"</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">, </span><span style="--shiki-light:#D73A49;--shiki-dark:#F47067;">float</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">[].class);</span></span>
|
||
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#DCBDFB;"> registerAlias</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">(</span><span style="--shiki-light:#032F62;--shiki-dark:#96D0FF;">"_boolean[]"</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">, </span><span style="--shiki-light:#D73A49;--shiki-dark:#F47067;">boolean</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">[].class);</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#DCBDFB;"> registerAlias</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">(</span><span style="--shiki-light:#032F62;--shiki-dark:#96D0FF;">"date"</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">, Date.class);</span></span>
|
||
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#DCBDFB;"> registerAlias</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">(</span><span style="--shiki-light:#032F62;--shiki-dark:#96D0FF;">"decimal"</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">, BigDecimal.class);</span></span>
|
||
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#DCBDFB;"> registerAlias</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">(</span><span style="--shiki-light:#032F62;--shiki-dark:#96D0FF;">"bigdecimal"</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">, BigDecimal.class);</span></span>
|
||
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#DCBDFB;"> registerAlias</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">(</span><span style="--shiki-light:#032F62;--shiki-dark:#96D0FF;">"biginteger"</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">, BigInteger.class);</span></span>
|
||
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#DCBDFB;"> registerAlias</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">(</span><span style="--shiki-light:#032F62;--shiki-dark:#96D0FF;">"object"</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">, Object.class);</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#DCBDFB;"> registerAlias</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">(</span><span style="--shiki-light:#032F62;--shiki-dark:#96D0FF;">"date[]"</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">, </span><span style="--shiki-light:#D73A49;--shiki-dark:#F47067;">Date</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">[].class);</span></span>
|
||
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#DCBDFB;"> registerAlias</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">(</span><span style="--shiki-light:#032F62;--shiki-dark:#96D0FF;">"decimal[]"</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">, </span><span style="--shiki-light:#D73A49;--shiki-dark:#F47067;">BigDecimal</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">[].class);</span></span>
|
||
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#DCBDFB;"> registerAlias</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">(</span><span style="--shiki-light:#032F62;--shiki-dark:#96D0FF;">"bigdecimal[]"</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">, </span><span style="--shiki-light:#D73A49;--shiki-dark:#F47067;">BigDecimal</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">[].class);</span></span>
|
||
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#DCBDFB;"> registerAlias</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">(</span><span style="--shiki-light:#032F62;--shiki-dark:#96D0FF;">"biginteger[]"</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">, </span><span style="--shiki-light:#D73A49;--shiki-dark:#F47067;">BigInteger</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">[].class);</span></span>
|
||
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#DCBDFB;"> registerAlias</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">(</span><span style="--shiki-light:#032F62;--shiki-dark:#96D0FF;">"object[]"</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">, </span><span style="--shiki-light:#D73A49;--shiki-dark:#F47067;">Object</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">[].class);</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#DCBDFB;"> registerAlias</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">(</span><span style="--shiki-light:#032F62;--shiki-dark:#96D0FF;">"map"</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">, Map.class);</span></span>
|
||
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#DCBDFB;"> registerAlias</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">(</span><span style="--shiki-light:#032F62;--shiki-dark:#96D0FF;">"hashmap"</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">, HashMap.class);</span></span>
|
||
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#DCBDFB;"> registerAlias</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">(</span><span style="--shiki-light:#032F62;--shiki-dark:#96D0FF;">"list"</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">, List.class);</span></span>
|
||
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#DCBDFB;"> registerAlias</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">(</span><span style="--shiki-light:#032F62;--shiki-dark:#96D0FF;">"arraylist"</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">, ArrayList.class);</span></span>
|
||
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#DCBDFB;"> registerAlias</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">(</span><span style="--shiki-light:#032F62;--shiki-dark:#96D0FF;">"collection"</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">, Collection.class);</span></span>
|
||
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#DCBDFB;"> registerAlias</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">(</span><span style="--shiki-light:#032F62;--shiki-dark:#96D0FF;">"iterator"</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">, Iterator.class);</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#DCBDFB;"> registerAlias</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">(</span><span style="--shiki-light:#032F62;--shiki-dark:#96D0FF;">"ResultSet"</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">, ResultSet.class);</span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;"> }</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#768390;"> /**</span></span>
|
||
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#768390;"> * 解析别名</span></span>
|
||
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#768390;"> * </span><span style="--shiki-light:#D73A49;--shiki-dark:#F47067;">@param</span><span style="--shiki-light:#E36209;--shiki-dark:#F69D50;"> string</span><span style="--shiki-light:#6A737D;--shiki-dark:#768390;"> 要解析的别名</span></span>
|
||
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#768390;"> * </span><span style="--shiki-light:#D73A49;--shiki-dark:#F47067;">@return</span><span style="--shiki-light:#6A737D;--shiki-dark:#768390;"> 该别名对应的类型的Class对象</span></span>
|
||
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#768390;"> */</span></span>
|
||
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F47067;"> public</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;"> <</span><span style="--shiki-light:#D73A49;--shiki-dark:#F47067;">T</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">> Class<</span><span style="--shiki-light:#D73A49;--shiki-dark:#F47067;">T</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">> </span><span style="--shiki-light:#6F42C1;--shiki-dark:#DCBDFB;">resolveAlias</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">(String </span><span style="--shiki-light:#E36209;--shiki-dark:#F69D50;">string</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">) {</span></span>
|
||
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F47067;"> try</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;"> {</span></span>
|
||
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F47067;"> if</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;"> (string </span><span style="--shiki-light:#D73A49;--shiki-dark:#F47067;">==</span><span style="--shiki-light:#005CC5;--shiki-dark:#6CB6FF;"> null</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">) {</span></span>
|
||
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F47067;"> return</span><span style="--shiki-light:#005CC5;--shiki-dark:#6CB6FF;"> null</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">;</span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;"> }</span></span>
|
||
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#768390;"> // MyBatis 在【别名自动配置】和【解析映射文件中别名】时,对别名进行了小写转换。</span></span>
|
||
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#768390;"> // 所以在使用别名的时候才不区分大小写。</span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;"> String</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;"> key</span><span style="--shiki-light:#D73A49;--shiki-dark:#F47067;"> =</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;"> string.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#DCBDFB;">toLowerCase</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">(Locale.ENGLISH);</span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;"> Class</span><span style="--shiki-light:#24292E;--shiki-dark:#F69D50;"><</span><span style="--shiki-light:#D73A49;--shiki-dark:#F47067;">T</span><span style="--shiki-light:#24292E;--shiki-dark:#F69D50;">> </span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">value;</span></span>
|
||
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F47067;"> if</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;"> (typeAliases.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#DCBDFB;">containsKey</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">(key)) {</span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;"> value </span><span style="--shiki-light:#D73A49;--shiki-dark:#F47067;">=</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;"> (Class</span><span style="--shiki-light:#D73A49;--shiki-dark:#F47067;"><</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">T</span><span style="--shiki-light:#D73A49;--shiki-dark:#F47067;">></span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">) typeAliases.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#DCBDFB;">get</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">(key);</span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;"> } </span><span style="--shiki-light:#D73A49;--shiki-dark:#F47067;">else</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;"> {</span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;"> value </span><span style="--shiki-light:#D73A49;--shiki-dark:#F47067;">=</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;"> (Class</span><span style="--shiki-light:#D73A49;--shiki-dark:#F47067;"><</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">T</span><span style="--shiki-light:#D73A49;--shiki-dark:#F47067;">></span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">) Resources.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#DCBDFB;">classForName</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">(string);</span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;"> }</span></span>
|
||
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F47067;"> return</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;"> value;</span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;"> } </span><span style="--shiki-light:#D73A49;--shiki-dark:#F47067;">catch</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;"> (ClassNotFoundException </span><span style="--shiki-light:#E36209;--shiki-dark:#F69D50;">e</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">) {</span></span>
|
||
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F47067;"> throw</span><span style="--shiki-light:#D73A49;--shiki-dark:#F47067;"> new</span><span style="--shiki-light:#6F42C1;--shiki-dark:#DCBDFB;"> TypeException</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">(</span><span style="--shiki-light:#032F62;--shiki-dark:#96D0FF;">"Could not resolve type alias '"</span><span style="--shiki-light:#D73A49;--shiki-dark:#F47067;"> +</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;"> string </span><span style="--shiki-light:#D73A49;--shiki-dark:#F47067;">+</span><span style="--shiki-light:#032F62;--shiki-dark:#96D0FF;"> "'. Cause: "</span><span style="--shiki-light:#D73A49;--shiki-dark:#F47067;"> +</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;"> e, e);</span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;"> }</span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;"> }</span></span>
|
||
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#768390;"> // ...略...</span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">}</span></span></code></pre></div><h2 id="environments元素" tabindex="-1">environments元素 <a class="header-anchor" href="#environments元素" aria-label="Permalink to "environments元素""></a></h2><p>MyBatis 可以配置成适应多种环境,这种机制有助于将 SQL 映射应用于多种数据库之中,现实情况下有多种理由需要这么做。例如,开发、测试和生产环境需要有不同的配置;或者想在具有相同 Schema的多个生产数据库中使用相同的 SQL 映射。还有许多类似的使用场景。</p><p><strong>不过要记住:尽管可以配置多个环境,但每个 SqlSessionFactory 实例只能选择一种环境。</strong></p><p>所以,如果你想连接两个数据库,就需要创建两个 SqlSessionFactory 实例,每个数据库对应一个。而如果是三个数据库,就需要三个实例,依此类推,记起来很简单:</p><ul><li><strong>每个数据库对应一个 SqlSessionFactory 实例</strong> [1]</li></ul><div class="language-xml vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">xml</span><pre class="shiki shiki-themes github-light github-dark-dimmed vp-code"><code><span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#768390;"><!-- 环境配置:</span></span>
|
||
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#768390;"> 可以配置多个,但生效的只能有一个</span></span>
|
||
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#768390;"> default属性:指定生效的环境的id</span></span>
|
||
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#768390;">--></span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;"><</span><span style="--shiki-light:#22863A;--shiki-dark:#8DDB8C;">environments</span><span style="--shiki-light:#6F42C1;--shiki-dark:#6CB6FF;"> default</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">=</span><span style="--shiki-light:#032F62;--shiki-dark:#96D0FF;">"develop"</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">></span></span>
|
||
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#768390;"> <!-- 单个环境配置 id 值须保证唯一 --></span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;"> <</span><span style="--shiki-light:#22863A;--shiki-dark:#8DDB8C;">environment</span><span style="--shiki-light:#6F42C1;--shiki-dark:#6CB6FF;"> id</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">=</span><span style="--shiki-light:#032F62;--shiki-dark:#96D0FF;">"develop"</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">></span></span>
|
||
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#768390;"> <!-- 事务管理配置</span></span>
|
||
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#768390;"> type属性:事务管理器的类型</span></span>
|
||
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#768390;"> 可选值有 JDBC 和 MANAGED</span></span>
|
||
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#768390;"> JDBC:这个配置直接使用了 JDBC 的提交和回滚设施,它依赖从数据源获得的连接来管理事务作用域。</span></span>
|
||
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#768390;"> MANAGED:让容器来管理事务的整个生命周期 </span></span>
|
||
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#768390;"> --></span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;"> <</span><span style="--shiki-light:#22863A;--shiki-dark:#8DDB8C;">transactionManager</span><span style="--shiki-light:#6F42C1;--shiki-dark:#6CB6FF;"> type</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">=</span><span style="--shiki-light:#032F62;--shiki-dark:#96D0FF;">"JDBC"</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">/></span></span>
|
||
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#768390;"> <!-- 数据源配置</span></span>
|
||
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#768390;"> type属性:数据源的类型</span></span>
|
||
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#768390;"> 可选值有 POOLED 、UNPOOLED、JNDI</span></span>
|
||
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#768390;"> POOLED:使用连接池来管理连接对象,降低连接的开销</span></span>
|
||
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#768390;"> UNPOOLED:不采用连接池,每次都会进行连接打开和关闭</span></span>
|
||
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#768390;"> JNDI:了解,采用 JNDI 来获取数据源,这种方式不用配置下方的 property。</span></span>
|
||
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#768390;"> 它当初出现的目的就是为了能在同一个应用服务器内的不同应用间共享数据源</span></span>
|
||
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#768390;"> --></span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;"> <</span><span style="--shiki-light:#22863A;--shiki-dark:#8DDB8C;">dataSource</span><span style="--shiki-light:#6F42C1;--shiki-dark:#6CB6FF;"> type</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">=</span><span style="--shiki-light:#032F62;--shiki-dark:#96D0FF;">"POOLED"</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">></span></span>
|
||
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#768390;"> <!-- 下方只是最重要的四项配置,不同类型数据源有不同额外配置 --></span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;"> <</span><span style="--shiki-light:#22863A;--shiki-dark:#8DDB8C;">property</span><span style="--shiki-light:#6F42C1;--shiki-dark:#6CB6FF;"> name</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">=</span><span style="--shiki-light:#032F62;--shiki-dark:#96D0FF;">"driver"</span><span style="--shiki-light:#6F42C1;--shiki-dark:#6CB6FF;"> value</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">=</span><span style="--shiki-light:#032F62;--shiki-dark:#96D0FF;">"\${mysql.driver}"</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">/></span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;"> <</span><span style="--shiki-light:#22863A;--shiki-dark:#8DDB8C;">property</span><span style="--shiki-light:#6F42C1;--shiki-dark:#6CB6FF;"> name</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">=</span><span style="--shiki-light:#032F62;--shiki-dark:#96D0FF;">"url"</span><span style="--shiki-light:#6F42C1;--shiki-dark:#6CB6FF;"> value</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">=</span><span style="--shiki-light:#032F62;--shiki-dark:#96D0FF;">"\${mysql.url}"</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">/></span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;"> <</span><span style="--shiki-light:#22863A;--shiki-dark:#8DDB8C;">property</span><span style="--shiki-light:#6F42C1;--shiki-dark:#6CB6FF;"> name</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">=</span><span style="--shiki-light:#032F62;--shiki-dark:#96D0FF;">"username"</span><span style="--shiki-light:#6F42C1;--shiki-dark:#6CB6FF;"> value</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">=</span><span style="--shiki-light:#032F62;--shiki-dark:#96D0FF;">"\${mysql.username}"</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">/></span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;"> <</span><span style="--shiki-light:#22863A;--shiki-dark:#8DDB8C;">property</span><span style="--shiki-light:#6F42C1;--shiki-dark:#6CB6FF;"> name</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">=</span><span style="--shiki-light:#032F62;--shiki-dark:#96D0FF;">"password"</span><span style="--shiki-light:#6F42C1;--shiki-dark:#6CB6FF;"> value</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">=</span><span style="--shiki-light:#032F62;--shiki-dark:#96D0FF;">"\${mysql.password}"</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">/></span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;"> </</span><span style="--shiki-light:#22863A;--shiki-dark:#8DDB8C;">dataSource</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">></span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;"> </</span><span style="--shiki-light:#22863A;--shiki-dark:#8DDB8C;">environment</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">></span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;"></</span><span style="--shiki-light:#22863A;--shiki-dark:#8DDB8C;">environments</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">></span></span></code></pre></div><h2 id="mappers元素" tabindex="-1">mappers元素 <a class="header-anchor" href="#mappers元素" aria-label="Permalink to "mappers元素""></a></h2><p>mappers 元素的作用就是用来告诉 MyBatis 去哪找我们编写的 SQL 语句,它的使用方式有两大类。</p><h3 id="指定映射文件" tabindex="-1">指定映射文件 <a class="header-anchor" href="#指定映射文件" aria-label="Permalink to "指定映射文件""></a></h3><p>这类方式主要是告诉 MyBatis 我们所编写的 SQL 映射文件的地址,我们之前在 <a href="./01-快速入门">《快速入门》</a> 中使用的就是属于这类方式。它有两种实现:</p><div class="language-xml vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">xml</span><pre class="shiki shiki-themes github-light github-dark-dimmed vp-code"><code><span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#768390;"><!-- 使用相对于类路径的资源引用,有多少 SQL 映射文件就写多少个 mapper 配置 --></span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;"><</span><span style="--shiki-light:#22863A;--shiki-dark:#8DDB8C;">mappers</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">></span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;"> <</span><span style="--shiki-light:#22863A;--shiki-dark:#8DDB8C;">mapper</span><span style="--shiki-light:#6F42C1;--shiki-dark:#6CB6FF;"> resource</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">=</span><span style="--shiki-light:#032F62;--shiki-dark:#96D0FF;">"com/example/mapper/UserMapper.xml"</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">/></span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;"></</span><span style="--shiki-light:#22863A;--shiki-dark:#8DDB8C;">mappers</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">></span></span></code></pre></div><div class="language-xml vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">xml</span><pre class="shiki shiki-themes github-light github-dark-dimmed vp-code"><code><span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#768390;"><!-- 使用完全限定资源定位符(URL) (很少使用) --></span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;"><</span><span style="--shiki-light:#22863A;--shiki-dark:#8DDB8C;">mappers</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">></span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;"> <</span><span style="--shiki-light:#22863A;--shiki-dark:#8DDB8C;">mapper</span><span style="--shiki-light:#6F42C1;--shiki-dark:#6CB6FF;"> url</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">=</span><span style="--shiki-light:#032F62;--shiki-dark:#96D0FF;">"file:///E:/eclipse-workspace/mybatis-1/src/com/example/mapper/UserMapper.xml"</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">/></span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;"></</span><span style="--shiki-light:#22863A;--shiki-dark:#8DDB8C;">mappers</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">></span></span></code></pre></div><h3 id="指定mapper接口-重要" tabindex="-1">指定Mapper接口[重要] <a class="header-anchor" href="#指定mapper接口-重要" aria-label="Permalink to "指定Mapper接口[重要]""></a></h3><p>这类方式还要涉及到 SqlSession 对象的另一个使用形式:<strong>Mapper接口开发</strong></p><p>我们之前使用 SqlSession 是让它来直接执行指定的 SQL 语句。这种方式需要指明 SQL 映射文件 namespace的名字以及 SQL 语句的 id。因为是硬编码在代码中,维护时有诸多不便,例如:容易写错不说,还不利于我们在持久层采用面向接口编程思想。</p><div class="language-java vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">java</span><pre class="shiki shiki-themes github-light github-dark-dimmed vp-code"><code><span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#768390;">// 执行 SQL 语句</span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">List</span><span style="--shiki-light:#24292E;--shiki-dark:#F69D50;"><</span><span style="--shiki-light:#D73A49;--shiki-dark:#F47067;">User</span><span style="--shiki-light:#24292E;--shiki-dark:#F69D50;">> </span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">userList</span><span style="--shiki-light:#D73A49;--shiki-dark:#F47067;"> =</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;"> sqlSession.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#DCBDFB;">selectList</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">(</span><span style="--shiki-light:#032F62;--shiki-dark:#96D0FF;">"userMapper.selectList"</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">);</span></span></code></pre></div><p>而 Mapper 接口开发就可以有效解决此问题,实现方式如下:</p><p><strong>第一步:先创建一个 Mapper 接口。</strong> 前期就养成一个开发习惯,保持 Mapper 接口和对应 SQL 映射文件同名同包(虽然目前不同名也没事,但是先听话,养成习惯)。</p><div class="language-java vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">java</span><pre class="shiki shiki-themes github-light github-dark-dimmed vp-code"><code><span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F47067;">public</span><span style="--shiki-light:#D73A49;--shiki-dark:#F47067;"> interface</span><span style="--shiki-light:#6F42C1;--shiki-dark:#F69D50;"> UserMapper</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;"> {</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#768390;"> /**</span></span>
|
||
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#768390;"> * 查询用户列表</span></span>
|
||
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#768390;"> * </span><span style="--shiki-light:#D73A49;--shiki-dark:#F47067;">@return</span></span>
|
||
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#768390;"> */</span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;"> List<</span><span style="--shiki-light:#D73A49;--shiki-dark:#F47067;">User</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">> </span><span style="--shiki-light:#6F42C1;--shiki-dark:#DCBDFB;">selectList</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">();</span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;"> </span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">}</span></span></code></pre></div><p><img src="`+F+`" alt="202012262252221"></p><p><strong>第二步:将 SQL 映射文件的 namespace 值改为对应 Mapper 接口的全限定类名。</strong></p><div class="language-xml vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">xml</span><pre class="shiki shiki-themes github-light github-dark-dimmed vp-code"><code><span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;"><?</span><span style="--shiki-light:#22863A;--shiki-dark:#8DDB8C;">xml</span><span style="--shiki-light:#6F42C1;--shiki-dark:#6CB6FF;"> version</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">=</span><span style="--shiki-light:#032F62;--shiki-dark:#96D0FF;">"1.0"</span><span style="--shiki-light:#6F42C1;--shiki-dark:#6CB6FF;"> encoding</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">=</span><span style="--shiki-light:#032F62;--shiki-dark:#96D0FF;">"UTF-8"</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">?></span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;"><!</span><span style="--shiki-light:#D73A49;--shiki-dark:#F47067;">DOCTYPE</span><span style="--shiki-light:#005CC5;--shiki-dark:#6CB6FF;"> mapper</span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"</span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">"http://mybatis.org/dtd/mybatis-3-mapper.dtd"></span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;"><</span><span style="--shiki-light:#22863A;--shiki-dark:#8DDB8C;">mapper</span><span style="--shiki-light:#6F42C1;--shiki-dark:#6CB6FF;"> namespace</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">=</span><span style="--shiki-light:#032F62;--shiki-dark:#96D0FF;">"com.example.mapper.UserMapper"</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">></span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;"></</span><span style="--shiki-light:#22863A;--shiki-dark:#8DDB8C;">mapper</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">></span></span></code></pre></div><p><strong>第三步:将 SQL 映射文件中的 SQL 语句和 Mapper 接口中的方法进行绑定。</strong></p><div class="language-xml vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">xml</span><pre class="shiki shiki-themes github-light github-dark-dimmed vp-code"><code><span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;"><?</span><span style="--shiki-light:#22863A;--shiki-dark:#8DDB8C;">xml</span><span style="--shiki-light:#6F42C1;--shiki-dark:#6CB6FF;"> version</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">=</span><span style="--shiki-light:#032F62;--shiki-dark:#96D0FF;">"1.0"</span><span style="--shiki-light:#6F42C1;--shiki-dark:#6CB6FF;"> encoding</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">=</span><span style="--shiki-light:#032F62;--shiki-dark:#96D0FF;">"UTF-8"</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">?></span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;"><!</span><span style="--shiki-light:#D73A49;--shiki-dark:#F47067;">DOCTYPE</span><span style="--shiki-light:#005CC5;--shiki-dark:#6CB6FF;"> mapper</span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"</span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">"http://mybatis.org/dtd/mybatis-3-mapper.dtd"></span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;"><</span><span style="--shiki-light:#22863A;--shiki-dark:#8DDB8C;">mapper</span><span style="--shiki-light:#6F42C1;--shiki-dark:#6CB6FF;"> namespace</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">=</span><span style="--shiki-light:#032F62;--shiki-dark:#96D0FF;">"com.example.mapper.UserMapper"</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">></span></span>
|
||
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#768390;"> <!-- 与 Mapper 接口的方法绑定</span></span>
|
||
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#768390;"> id 就是 Mapper 接口中的对应方法名</span></span>
|
||
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#768390;"> resultType 就是 Mapper 接口中的返回值类型,如果返回值类型时集合,则写它的泛型</span></span>
|
||
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#768390;"> --></span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;"> <</span><span style="--shiki-light:#22863A;--shiki-dark:#8DDB8C;">select</span><span style="--shiki-light:#6F42C1;--shiki-dark:#6CB6FF;"> id</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">=</span><span style="--shiki-light:#032F62;--shiki-dark:#96D0FF;">"selectList"</span><span style="--shiki-light:#6F42C1;--shiki-dark:#6CB6FF;"> resultType</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">=</span><span style="--shiki-light:#032F62;--shiki-dark:#96D0FF;">"User"</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">></span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;"> SELECT * FROM \`user\`</span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;"> </</span><span style="--shiki-light:#22863A;--shiki-dark:#8DDB8C;">select</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">></span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;"></</span><span style="--shiki-light:#22863A;--shiki-dark:#8DDB8C;">mapper</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">></span></span></code></pre></div><p><strong>最后,我们在核心配置文件中,再配置好 Mapper 接口的全限定类名即可。</strong></p><div class="language-xml vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">xml</span><pre class="shiki shiki-themes github-light github-dark-dimmed vp-code"><code><span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#768390;"><!-- 使用 Mapper 接口的完全限定类名 --></span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;"><</span><span style="--shiki-light:#22863A;--shiki-dark:#8DDB8C;">mappers</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">></span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;"> <</span><span style="--shiki-light:#22863A;--shiki-dark:#8DDB8C;">mapper</span><span style="--shiki-light:#6F42C1;--shiki-dark:#6CB6FF;"> class</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">=</span><span style="--shiki-light:#032F62;--shiki-dark:#96D0FF;">"com.example.mapper.UserMapper"</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">/></span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;"></</span><span style="--shiki-light:#22863A;--shiki-dark:#8DDB8C;">mappers</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">></span></span></code></pre></div><p><strong>测试一下。</strong></p><div class="language-java vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">java</span><pre class="shiki shiki-themes github-light github-dark-dimmed vp-code"><code><span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">@</span><span style="--shiki-light:#D73A49;--shiki-dark:#F47067;">Test</span></span>
|
||
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F47067;">void</span><span style="--shiki-light:#6F42C1;--shiki-dark:#DCBDFB;"> testSelectList</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">() throws IOException {</span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;"> </span></span>
|
||
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#768390;"> // 获取SqlSession对象</span></span>
|
||
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F47067;"> try</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;"> (SqlSession</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;"> sqlSession</span><span style="--shiki-light:#D73A49;--shiki-dark:#F47067;"> =</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;"> MyBatisUtils.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#DCBDFB;">openSession</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">()){</span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;"> </span></span>
|
||
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#768390;"> // 获取 Mapper 接口,而不再直接执行 SQL 语句</span></span>
|
||
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#768390;"> // 和以前 DAO 模式就非常相像了,只不过是 DAO 实现类变为了 SQL 映射文件</span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;"> UserMapper</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;"> userMapper</span><span style="--shiki-light:#D73A49;--shiki-dark:#F47067;"> =</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;"> sqlSession.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#DCBDFB;">getMapper</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">(UserMapper.class);</span></span>
|
||
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#768390;"> // 执行方法</span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;"> List</span><span style="--shiki-light:#24292E;--shiki-dark:#F69D50;"><</span><span style="--shiki-light:#D73A49;--shiki-dark:#F47067;">User</span><span style="--shiki-light:#24292E;--shiki-dark:#F69D50;">> </span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">userList</span><span style="--shiki-light:#D73A49;--shiki-dark:#F47067;"> =</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;"> userMapper.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#DCBDFB;">selectList</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">();</span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;"> </span></span>
|
||
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#768390;"> // 遍历数据</span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;"> userList.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#DCBDFB;">forEach</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">(System.out</span><span style="--shiki-light:#D73A49;--shiki-dark:#F47067;">::</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">println);</span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;"> } </span><span style="--shiki-light:#D73A49;--shiki-dark:#F47067;">catch</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;"> (Exception </span><span style="--shiki-light:#E36209;--shiki-dark:#F69D50;">e</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">) {</span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;"> e.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#DCBDFB;">printStackTrace</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">();</span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;"> }</span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">}</span></span></code></pre></div><p>另外,在核心配置文件中,大量的配置 Mapper 接口全限定类名,还是有些麻烦,所以 MyBatis 在这也支持包扫描配置。</p><div class="language-xml vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">xml</span><pre class="shiki shiki-themes github-light github-dark-dimmed vp-code"><code><span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#768390;"><!-- 包扫描,将指定包(及其子包)下的 Mapper 接口全部注册为映射器 --></span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;"><</span><span style="--shiki-light:#22863A;--shiki-dark:#8DDB8C;">mappers</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">></span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;"> <</span><span style="--shiki-light:#22863A;--shiki-dark:#8DDB8C;">package</span><span style="--shiki-light:#6F42C1;--shiki-dark:#6CB6FF;"> name</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">=</span><span style="--shiki-light:#032F62;--shiki-dark:#96D0FF;">"com.example.mapper"</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">/></span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;"></</span><span style="--shiki-light:#22863A;--shiki-dark:#8DDB8C;">mappers</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">></span></span></code></pre></div><div class="warning custom-block"><p class="custom-block-title">笔者说</p><p>Mapper 接口开发是我们以后主要使用的方式,必须掌握!</p></div><h2 id="参考文献" tabindex="-1">参考文献 <a class="header-anchor" href="#参考文献" aria-label="Permalink to "参考文献""></a></h2><p>[1]MyBatis 官网. MyBatis 配置[EB/OL]. <a href="https://mybatis.org/mybatis-3/zh/configuration.html" target="_blank" rel="noreferrer">https://mybatis.org/mybatis-3/zh/configuration.html</a>. 2020-12-26</p><h2 id="后记" tabindex="-1">后记 <a class="header-anchor" href="#后记" aria-label="Permalink to "后记""></a></h2><div class="info custom-block"><p class="custom-block-title">笔者说</p><p>对于技术的学习,笔者一贯遵循的步骤是:先用最最简单的 demo 让它跑起来,然后学学它的最最常用 API 和 配置让自己能用起来,最后熟练使用的基础上,在空闲时尝试阅读它的源码让自己能够洞彻它的运行机制,部分问题出现的原因,同时借鉴这些技术实现来提升自己的代码高度。</p><p>所以在笔者的文章中,前期基本都是小白文,仅仅穿插很少量的源码研究。当然等小白文更新多了,你们还依然喜欢,后期会不定时专门对部分技术的源码进行解析。</p></div>`,74);function E(s,q,m,b,v,x){const l=p,h=e("ClientOnly");return n(),r("div",null,[c,g(h,null,{default:d(()=>{var i,a;return[(((i=s.$frontmatter)==null?void 0:i.aside)??!0)&&(((a=s.$frontmatter)==null?void 0:a.showArticleMetadata)??!0)?(n(),D(l,{key:0,article:s.$frontmatter},null,8,["article"])):C("",!0)]}),_:1}),u])}const L=k(B,[["render",E]]);export{f as __pageData,L as default};
|