使用MyBatis進行數(shù)據(jù)庫映射的方式
在Java中,MyBatis是1個支持自定義SQL的持久層框架,它可以存儲過程和高級的映射。
在正式介紹之前,我們首先通過mvn進行安裝,我們將下面的內(nèi)容添加到 pom.xml 配置文件中:
<dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.4.5</version> </dependency>
上述操作完成后,我們首先新建1個MyBatis的配置文件,使用XML的格式進行編寫:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<properties resource="db.properties"></properties>
<environments default="my-config">
<environment id="my-config">
<transactionManager type="JDBC" />
<dataSource type="POOLED">
<property name="driver" value="${driver}"></property>
<property name="url" value="${url}"></property>
<property name="username" value="${user}"></property>
<property name="password" value="${pwd}"></property>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="mapping.xml" />
</mappers>
</configuration>
我們將上述的內(nèi)容寫入到 config.xml 文件中。其中environments是配置的環(huán)境,其中的environment用于對應(yīng)的環(huán)境的配置。這里,我們默認(rèn)使用的環(huán)境是 my-config ,其使用JDBC的方式進行連接,數(shù)據(jù)源的方式為連接池。其中,數(shù)據(jù)源可以使用:
- UNPOOLED,每次請求時打開和關(guān)閉連接
- POOLED,連接池
- JNDI,主要用于EJB或應(yīng)用服務(wù)器中使用
而環(huán)境通過對 db.properties 中的內(nèi)容進行配置,其內(nèi)容如下:
url=jdbc:oracle:thin:@xxx.xxx.xxx.xx:1521/orcl user=xxx pwd=xxx driver=oracle.jdbc.driver.OracleDriver
更多關(guān)于MyBatis的配置,可以 參考 。其中包括別名、類型處理器typeHandler的說明,這里就不一一敘述了。
最后,我們還設(shè)置了1個匹配的資源,其支持4種方式:
resource,使用相對于類路徑的資源引用
url,使用完全限定資源定位符
class,使用映射器接口實現(xiàn)類的完全限定類名
name,將包內(nèi)的映射器接口實現(xiàn)全部注冊為映射器
在這里我們使用resource的方式指定匹配的文件的名稱。其內(nèi)容如下:
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" > <mapper namespace="user"> <select id="es_temp" fetchSize="10" resultType="java.util.LinkedHashMap"> select ENTNAME,UNISCID,INDUSTRY,REGION,OPSTATE,ESTYEAR,SCALE from xxx where rownum <![CDATA[<=]]> 20 </select> </mapper>
由于在XML中,括號具有單獨的意義,因此如果我們使用尖括號會出現(xiàn)解析錯誤,此時我們可以使用HTML實體轉(zhuǎn)義編碼,如 < 來進行處理,或者直接使用 <![CDATA[xxxx]]> 進行實際符號的處理。
我們通過mapper標(biāo)簽中的namespace定義了映射的命名空間,其中的id用于對應(yīng)語句的匹配,方便進行命名解析。
接著是對應(yīng)的Java代碼的編寫:
import java.io.Reader;
import java.util.*;
import com.alibaba.fastjson.*;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.*;
public class Demo {
public static SqlSessionFactory sessionFactory;
public static void main(String[] args) {
try {
Reader reader = Resources.getResourceAsReader("config.xml");
sessionFactory = new SqlSessionFactoryBuilder().build(reader);
SqlSession session = sessionFactory.openSession();
List<LinkedHashMap<?,?>> result = session.selectList("user.es_temp");
String json_str = JSON.toJSONString(result);
System.out.println(json_str);
session.close();
} catch (Exception e){
e.printStackTrace();
}
}
}
在這里,我們通過Resources類對配置文件進行讀取,然后構(gòu)建1個SqlSessionFactory,之后通過其openSession得到1個Session對象,這樣我們就可以進行對應(yīng)的SQL操作了。
我們使用selectList函數(shù)進行對應(yīng)SQL的執(zhí)行,其使用的是 命名空間.id 的方式來進行對應(yīng)的操作。另外,還有1個selectOne函數(shù)用于單個記錄的查詢,對于多個結(jié)果會直接返回異常。
其結(jié)果為:
[
{
"ENTNAME":"深圳市藍海匯裝飾設(shè)計工程有限公司",
"UNISCID":"91440300359236108Q",
"INDUSTRY":"批發(fā)和零售業(yè)",
"REGION":"深圳",
"OPSTATE":"存續(xù)(在營、開業(yè)、在冊)",
"ESTYEAR":"3年以下",
"SCALE":"小微企業(yè)"
},
{
"ENTNAME":"暴風(fēng)雨(深圳)電子商務(wù)有限公司",
"UNISCID":"91440300MA5DF887XE",
"INDUSTRY":"批發(fā)和零售業(yè)",
"REGION":"深圳",
"OPSTATE":"存續(xù)(在營、開業(yè)、在冊)",
"ESTYEAR":"3年以下",
"SCALE":"小微企業(yè)"
},
...
]
可以看到,通過上述的方式,我們可以很容易的實現(xiàn)代碼與SQL語句的分離。但是,對應(yīng)的SQL語句依賴于數(shù)據(jù)庫,可移植性差。另外,對于字段多、關(guān)聯(lián)表多時,編寫SQL語句的工作量很大。
總結(jié)
以上所述是小編給大家介紹的使用MyBatis進行數(shù)據(jù)庫映射,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!
相關(guān)文章
Java實現(xiàn)學(xué)生管理系統(tǒng)詳解
這篇文章主要為大家詳細介紹了Java實現(xiàn)學(xué)生管理系統(tǒng),具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助2021-10-10
Spring Boot 中PageHelper 插件使用配置思路詳解
這篇文章主要介紹了Spring Boot 中PageHelper 插件使用配置及實現(xiàn)思路,通過引入myabtis和pagehelper依賴,在yml中配置mybatis掃描和實體類,具體實現(xiàn)方法跟隨小編一起看看吧2021-08-08
Springboot?多級緩存設(shè)計與實現(xiàn)方案
多級緩存是提升高并發(fā)系統(tǒng)性能的關(guān)鍵策略之一,它不僅能夠減少系統(tǒng)的響應(yīng)時間,提高用戶體驗,還能有效降低后端系統(tǒng)的負(fù)載,防止系統(tǒng)過載,這篇文章主要介紹了Springboot?多級緩存設(shè)計與實現(xiàn),需要的朋友可以參考下2024-02-02

