MyBatis是一種優(yōu)秀的ORM框架,它的主要作用是把Java對(duì)象和數(shù)據(jù)庫(kù)中的表進(jìn)行映射,并且通過(guò)自動(dòng)化地處理SQL,簡(jiǎn)化了操作JDBC的步驟,提高了程序員的開(kāi)發(fā)效率。
下面就以O(shè)racle數(shù)據(jù)庫(kù)為例,簡(jiǎn)單介紹一下如何使用Mybatis來(lái)訪問(wèn)Oracle。
第一步:配置數(shù)據(jù)庫(kù)連接
在Mybatis中,我們需要先在配置文件中配置數(shù)據(jù)庫(kù)連接。下面是一個(gè)配置文件的示例:
<?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> <environments default="development"> <environment id="development"> <transactionManager type="JDBC"/> <dataSource type="POOLED"> <property name="driver" value="oracle.jdbc.driver.OracleDriver"/> <property name="url" value="jdbc:oracle:thin:@localhost:1521:XE"/> <property name="username" value="your_username"/> <property name="password" value="your_password"/> </dataSource> </environment> </environments> <mappers> <mapper resource="mapper.xml"/> </mappers> </configuration>
其中,我們需要修改的地方有:
- driver:指定使用的數(shù)據(jù)庫(kù)驅(qū)動(dòng),這里是Oracle的驅(qū)動(dòng)類。
- url:指定連接Oracle的JDBC URL。
- username和password:登錄Oracle數(shù)據(jù)庫(kù)的用戶名和密碼。
- mapper:指定映射文件(后面再提)。
第二步:創(chuàng)建數(shù)據(jù)源
Mybatis支持多種類型的數(shù)據(jù)源,我們這里使用的是PooledDataSource。在Java中創(chuàng)建數(shù)據(jù)源,我們需要按照如下步驟:
// 1. 加載配置文件 InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml"); SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder(); // 2. 創(chuàng)建SqlSessionFactory對(duì)象 SqlSessionFactory sqlSessionFactory = builder.build(inputStream); // 3. 獲取SqlSession對(duì)象 SqlSession sqlSession = sqlSessionFactory.openSession();其中,上面提到的配置文件是我們剛剛編寫的mybatis-config.xml。SqlSessionFactory是Mybatis的核心類,用于創(chuàng)建SqlSession對(duì)象。
第三步:映射Java對(duì)象和數(shù)據(jù)庫(kù)表
Mybatis的核心功能是將Java對(duì)象和數(shù)據(jù)庫(kù)表進(jìn)行映射,現(xiàn)在我們來(lái)看一個(gè)具體的例子。
我們假設(shè)有一個(gè)User對(duì)象,對(duì)應(yīng)的數(shù)據(jù)庫(kù)表是users:
public class User { private int id; private String name; private String email; // setter和getter方法省略 }
對(duì)于這個(gè)User類,我們需要在映射文件中定義該如何映射:
<mapper namespace="com.example.dao.UserMapper"> <resultMap id="userMap" type="User"> <id column="id" property="id" /> <result column="name" property="name" /> <result column="email" property="email" /> </resultMap> <select id="getUserById" resultMap="userMap"> SELECT id, name, email FROM users WHERE id = #{userId} </select> </mapper>
在上面的映射文件中,我們定義了一個(gè)resultMap,用來(lái)描述User對(duì)象和數(shù)據(jù)庫(kù)表中的字段的映射關(guān)系。同時(shí),我們還定義了一個(gè)select節(jié)點(diǎn),用來(lái)查詢指定id的User對(duì)象。
現(xiàn)在我們把這個(gè)類和映射文件放在一起,可以通過(guò)SqlSession來(lái)訪問(wèn)數(shù)據(jù)庫(kù),并查詢指定的User對(duì)象:
// 獲取UserMapper UserMapper userMapper = sqlSession.getMapper(UserMapper.class); // 查詢id為1的用戶 User user = userMapper.getUserById(1);
通過(guò)以上步驟,我們已經(jīng)可以使用Mybatis來(lái)訪問(wèn)Oracle數(shù)據(jù)庫(kù)了。另外,還有一些其他的高級(jí)功能,例如動(dòng)態(tài)SQL、緩存等,感興趣的讀者可以自行搜索相關(guān)文檔進(jìn)行學(xué)習(xí)。