MyBatis研習(xí)錄(01)——MyBatis概述與入門

ORM模型

簡單地說,ORM模型就是數(shù)據(jù)庫的表與簡單Java對象(Plain Ordinary Java Object,簡稱 POJO)的對象關(guān)系映射模型(Object Relational Mapping 簡稱ORM),它主要解決數(shù)據(jù)庫數(shù)據(jù)和POJO對象的相互映射。在本系列教程中,我們將詳細(xì)介紹輕量級的ORM框架MyBatis。

MyBatis概述

MyBatis 是一款優(yōu)秀的持久層框架,它支持定制化 SQL、存儲過程以及高級映射。MyBatis原本是apache的一個開源項目iBatis, 2010年該項目由apache software foundation 遷移到了google code并改名為MyBatis 。2013年11月MyBatis又遷移到Github。

The MyBatis SQL mapper framework makes it easier to use a relational database with object-oriented applications. MyBatis couples objects with stored procedures or SQL statements using a XML descriptor or annotations. Simplicity is the biggest advantage of the MyBatis data mapper over object relational mapping tools.

MyBatis對JDBC操作數(shù)據(jù)庫的過程進(jìn)行了封裝,使開發(fā)者只需要關(guān)注SQL本身,而不需要開發(fā)人員花費大量的精力去處理例如注冊驅(qū)動、創(chuàng)建connection、創(chuàng)建statement、手動設(shè)置參數(shù)等JDBC操作。之前,當(dāng)我們使用JDBC持久化的時候,sql語句被硬編碼到j(luò)ava代碼中,耦合度太高代碼不易于維護(hù);一旦我們修改了Java代碼就需要對項目進(jìn)行重新的編譯、打包、發(fā)布。MyBatis將sql語句和java代碼分開,功能邊界清晰;前者專注于數(shù)據(jù),后者側(cè)重于業(yè)務(wù)。

MyBatis入門示例

在此,我們以示例的形式介紹MyBatis的入門示例,詳細(xì)步驟如下:

第一步:數(shù)據(jù)準(zhǔn)備

創(chuàng)建數(shù)據(jù)庫mybatisDatabase和表user

DROP DATABASE IF EXISTS mybatisDatabase;

CREATE DATABASE mybatisDatabase;

use mybatisDatabase;

CREATE TABLE user(

? id INT primary key auto_increment,

? username VARCHAR(50),

? password VARCHAR(50),

? gender VARCHAR(10)

);

INSERT INTO user(username,password,gender) VALUES("lucy","123456","female");

INSERT INTO user(username,password,gender) VALUES("momo","234567","female");

INSERT INTO user(username,password,gender) VALUES("xixi","345678","female");

INSERT INTO user(username,password,gender) VALUES("pepe","456123","female");

SELECT * FROM user;


第二步:創(chuàng)建Java項目

創(chuàng)建普通Java項目并在該項目下新建config和lib文件夾

創(chuàng)建文件完畢后請對config執(zhí)行Build Path,圖示如下:

第三步:User

請在cn.com.pojo創(chuàng)建User類

package cn.com.pojo;

public class User {

private int id;

private String username;

private String password;

private String gender;

public User() {

}

public User(int id, String username, String password, String gender) {

this.id = id;

this.username = username;

this.password = password;

this.gender = gender;

}

public int getId() {

return id;

}

public void setId(int id) {

this.id = id;

}

public String getUsername() {

return username;

}

public void setUsername(String username) {

this.username = username;

}

public String getPassword() {

return password;

}

public void setPassword(String password) {

this.password = password;

}

public String getGender() {

return gender;

}

public void setGender(String gender) {

this.gender = gender;

}

@Override

public String toString() {

return "User [id=" + id + ", username=" + username + ", password=" + password + ", gender=" + gender + "]";

}

}


該User類中各屬性值與user表盡量保持一致。

第四步:添加jar包

請?zhí)砑右韵耲ar包并Build Path

log4j-1.2.17.jar

mybatis-3.4.1.jar

mysql-connector-java-5.1.7-bin.jar

第五步:log4j.properties

請在config文件夾中創(chuàng)建log4j.properties并編寫其配置,內(nèi)容如下:

# Global logging configuration

log4j.rootLogger=DEBUG, stdout

# Console output...

log4j.appender.stdout=org.apache.log4j.ConsoleAppender

log4j.appender.stdout.layout=org.apache.log4j.PatternLayout

log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n


第六步:mybatis-config.xml

在config文件夾中創(chuàng)建mybatis的核心配置文件mybatis-config.xml,其內(nèi)容如下:

<?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>

? <!-- 配置數(shù)據(jù)源 -->

? <environments default="development">

? ? <environment id="development">

? ? ? <transactionManager type="JDBC"/>

? ? ? <dataSource type="POOLED">

? ? ? ? <property name="driver" value="com.mysql.jdbc.Driver"/>

? ? ? ? <property name="url" value="jdbc:mysql://localhost:3306/mybatisDatabase"/>

? ? ? ? <property name="username" value="root"/>

? ? ? ? <property name="password" value="root"/>

? ? ? </dataSource>

? ? </environment>

? </environments>


</configuration>


該配置文件environments標(biāo)簽主要用于配置數(shù)據(jù)庫相關(guān)信息。至于,mybatis-config.xml文件中的其它常用配置,我們在后續(xù)的教程中會提到。

第七步:UserMapper.xml

在User的同級目錄中創(chuàng)建映射文件UserMapper.xml,其內(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="cn.com.pojo.User">

? <select id="selectUserById" parameterType="int" resultType="cn.com.pojo.User">

? ? select id,username,password,gender from user where id = #{id}

? </select>

</mapper>


該mapper的核心功能為:從數(shù)據(jù)庫中查詢數(shù)據(jù)并將查詢結(jié)果封裝成JavaBean對象。

在該配置文件中:

namespace表示該mapper的命名空間,其取值為JavaBean的全類名或Mapper接口的全類名

select標(biāo)簽表示select語句。其中,id屬性用于為sql語句配置唯一標(biāo)識;parameterType屬性用于表示輸入?yún)?shù)的類型,一般來說可以省略該屬性,但是,如果參數(shù)是pojo建議不省略;resultType屬性用于指定執(zhí)行select查詢語句之后每行記錄對應(yīng)的JavaBean對象的全類名。

在mapper.xml中使用#{ }表示占位符,類似于JDBC中的占位符?

在完成UserMapper.xml的編寫后,再在mybatis-config.xml對其進(jìn)行配置,內(nèi)容如下:

<?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>

? <!-- 配置數(shù)據(jù)源 -->

? <environments default="development">

? ? <environment id="development">

? ? ? <transactionManager type="JDBC"/>

? ? ? <dataSource type="POOLED">

? ? ? ? <property name="driver" value="com.mysql.jdbc.Driver"/>

? ? ? ? <property name="url" value="jdbc:mysql://localhost:3306/mybatisDatabase"/>

? ? ? ? <property name="username" value="root"/>

? ? ? ? <property name="password" value="root"/>

? ? ? </dataSource>

? ? </environment>

? </environments>


? <!-- 配置mapper -->

? <mappers>

? ? <mapper resource="cn/com/pojo/UserMapper.xml"/>

? </mappers>


</configuration>


通過mappers標(biāo)簽配置各mapper。在mapper標(biāo)簽中使用resource屬性指定mapper的路徑,其形式為斜杠形式的全路徑。

第八步:測試

代碼如下:

package cn.com.test;

import java.io.InputStream;

import org.apache.ibatis.io.Resources;

import org.apache.ibatis.session.SqlSession;

import org.apache.ibatis.session.SqlSessionFactory;

import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import org.junit.Test;

import cn.com.pojo.User;

/**


*/

public class MybatisTest {

@Test

public void testMybatis() {

SqlSession sqlSession = null;

try {

// 讀取mybatis的核心配置文件mybatis-config.xml

InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");

// 創(chuàng)建SqlSessionFactoryBuilder對象

SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();

// 通過SqlSessionFactoryBuilder解析配置文件獲取sqlSessionFactory對象

SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(inputStream);

// 通過SqlSessionFactory對象創(chuàng)建SqlSession對象

sqlSession = sqlSessionFactory.openSession();

// 利用selectOne()執(zhí)行查詢

User user = sqlSession.selectOne("cn.com.pojo.User.selectUserById", 1);

System.out.println(user);

} catch (Exception e) {

} finally {

// 關(guān)閉SqlSession

if (sqlSession != null) {

sqlSession.close();

}

}

}

}


要點概述:

1、通過org.apache.ibatis.io.Resources讀取mybatis的核心配置文件mybatis-config.xml

2、通過SqlSessionFactoryBuilder對象生成sqlSessionFactory對象

3、通過SqlSessionFactory對象創(chuàng)建SqlSession對象。該對象的作用類似于JDBC中的Connection對象,所以在執(zhí)行完數(shù)據(jù)庫操作后需對其進(jìn)行關(guān)閉操作。

4、通過SqlSession的selectOne( )方法執(zhí)行返回結(jié)果只有一條記錄的sql查詢語句。該方法第一個參數(shù)將要執(zhí)行的sql語句,其格式為:命名空間.sql語句的id值;該方法第二參數(shù)為替換sql語句中占位符的參數(shù)值。

5、執(zhí)行完查詢操作后關(guān)閉SqlSession。

結(jié)果如下:

MyBatis入門示例總結(jié)

1、mybatis-config.xml是mybatis的核心配置文件

2、mapper.xml用于定義與數(shù)據(jù)庫相關(guān)的sql語句

3、SqlSession用于執(zhí)行數(shù)據(jù)庫操作

Eclipse中關(guān)聯(lián)MyBatis源碼

為在開發(fā)過程中便捷查看MyBatis源碼,我們需要在Eclipse對其進(jìn)行關(guān)聯(lián)。

第一步

下載源碼并存放至本地,圖示如下:

第二步

在Eclipse的項目中找到mybatis-3.4.1.jar,圖示如下:

第三步

選中mybatis-3.4.1.jar右鍵選擇Properties后再添加剛才下載好的源碼文件mybatis-3.4.1-src.zip,圖示如下:

最后,單擊 Apply and Close即可。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容