Mybatis之初理解

1. 認識Mybatis

1.1. 原生Jdbc問題總結

1、數據庫連接頻繁開啓和關閉,會嚴重影響數據庫的性能。

2、代碼中存在硬編碼,分別是數據庫部分的硬編碼和SQL執行部分的硬編碼。

3、原生Jdbc代碼示例:

public static void main(String[] args) {
			Connection connection = null;
			PreparedStatement preparedStatement = null;
			ResultSet resultSet = null;
			
			try {
				//1、加載數據庫驅動
				Class.forName("com.mysql.jdbc.Driver");
				//2、通過驅動管理類獲取數據庫鏈接
				connection =  DriverManager.getConnection("jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf-8", "root", "root");
				//3、定義sql語句 ?表示佔位符
			String sql = "select * from user where username = ?";
				//4、獲取預處理statement
				preparedStatement = connection.prepareStatement(sql);
				//5、設置參數,第一個參數爲sql語句中參數的序號(從1開始),第二個參數爲設置的參數值
				preparedStatement.setString(1, "王五");
				//6、向數據庫發出sql執行查詢,查詢出結果集
				resultSet =  preparedStatement.executeQuery();
				//7、遍歷查詢結果集
				while(resultSet.next()){
					System.out.println(resultSet.getString("id")+"  "+resultSet.getString("username"));
				}
			} catch (Exception e) {
				e.printStackTrace();
			}finally{
				//8、釋放資源
				if(resultSet!=null){
					try {
						resultSet.close();
					} catch (SQLException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}
				}
				if(preparedStatement!=null){
					try {
						preparedStatement.close();
					} catch (SQLException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}
				}
				if(connection!=null){
					try {
						connection.close();
					} catch (SQLException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}
				}

			}

		}

1.1. Mybatis框架介紹

1.1.1. 概念

 Mybatis本是一個apache的一個開源項目iBatis2010年這個項目由apache software foundation 遷移到了google code,並且改名爲MyBatis,實質上MyBatisiBatis進行改進。MyBatis是一個優秀的持久層框架,它對jdbc的操作數據庫的過程進行封裝,使開發者只需關注SQL本身,而不需要花費精力去處理例如註冊驅動、創建connection、創建statement、手動設置參數、結果集檢索等jdbc繁雜的過程代碼。MyBatis是通過XML或註解的方式將要執行的各種statementstatementpreparedStatemntCallableStatement)配置起來,並通過java對象和statement中的sql進行映射最終生成執行的sql語句,最後由mybatis框架執行sql並將結果映射成java對象並返回。

1.1.1. 框架圖


1.1. Mybatis環境配置

1.1.1. 下載mybatis

mybatis的代碼由github.com管理下載地址:https://github.com/mybatis/mybatis-3/releases

Lib:mybatis的依賴包

Mybatis-3.2.7.jar:mybatis的核心包

Mybatis-3.2.7.pdf:mybatis的使用指南

1.1.2. 工程搭建

1.1.2.1. 第一步:創建java工程

eclipse創建一個java工程,jdk使用1.7以上即可。

1.1.2.2. 第二步:加入jar包,其中junitjar包,是非必需的。

l Mybatis核心包


l Mybatis依賴包


l Mysql驅動包



l Junit單元測試包(單元測試需要的包)


1.1.1.1. 第三步:添加log4j.properties文件

Mybatis使用的日誌包是log4j的,所以需要添加log4j.properties

classpath下創建log4j.properties如下:

文件內容可以從mybatis-3.2.7.pdf中拷貝

# 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

日誌級別在開發階段設置成DEBUG在生產階段設置成INFO或者ERROR


1.1.1. 編程步驟

1、創建PO類,根據需求創建;

2、創建全局配置文件SqlMapConfig.xml

3、編寫映射文件;

4、靠在映射文件,在SqlMapConfig.xml中進行加載;

5、編寫測試程序,連接數據庫。

思路

a) 讀取配置文件

b) 通過SqlSessionFactoryBuilder創建SqlSessionFactory會話工廠

c) 通過SqlSessionFactory創建SqlSession

d) 調用SqlSession的操作數據庫方法

e) 關閉SqlSession

1.1.2. 代碼開發實例

1.1.2.1. 第一步:數據庫腳本初始化


1、 執行sql_table.sql腳本創建數據庫表

2、 執行sql_data.sql初始化測試數據


1.1.1.1. 第二步:創建PO

創建的po類的屬性要和數據庫中表的列名一致(如果表中的列名是帶有下劃線,那麼po類中對應的的屬性名要採用駝峯式命名)

User.java類如下


Public class User {
	private int id;
	private String username;// 用戶姓名
	private String sex;// 性別
	private Date birthday;// 生日
	private String address;// 地址
get/set……

1.1.1.1. 第三步:創建SqlMapConfig.xml配置文件

classpath創建SqlMapConfig.xml文件

SqlMapConfig.xml(文件頭可以從mybatis-3.2.7.pdf文檔的2.1.2小節中拷貝):

<?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>
<!-- 配置mybatis的環境信息 -->
<environments default="development">
	<environment id="development">
		<!-- 配置JDBC事務控制,由mybatis進行管理 -->
		<transactionManager type="JDBC"></transactionManager>
		<!-- 配置數據源,採用dbcp連接池 -->
		<dataSource type="POOLED">
			<property name="driver" value="com.mysql.jdbc.Driver"/>
			<property name="url" value="jdbc:mysql://localhost:3306/mybatis?useUnicode=true&characterEncoding=utf8"/>
			<property name="username" value="root"/>
			<property name="password" value="root"/>
	</dataSource>
	</environment>
</environments>
</configuration>

1.1.1.1. 第四步:需求開發根據用戶ID來查詢用戶信息

classpath創建sqlmap文件夾sqlmap目錄下創建User.xml映射文件

Mybatis的映射文件頭可以從mybatis-3.2.7.pdf文件中拷貝):

<?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">
1.1.1.1.1. 創建全局配置文件

config目錄下,創建SqlMapConfig.xml文件,該名稱不是固定不變的。

1.1.1.1.1. 編寫映射文件

config目錄下創建User.xml(這種命名規範是由ibatis遺留下來)

1.1.1.1.1. 在全局配置文件中加載映射文件

1.1.1.1.1. 測試代碼

1.1. 小結:

1.1.1. parameterTyperesultType

parameterType指定輸入參數的java類型,可以填寫別名或Java類的全限定名。

resultType指定輸出結果的java類型,可以填寫別名或Java類的全限定名。

1.1.2. #{}${}

#{}:相當於預處理中的佔位符?。

#{}裏面的參數表示接收java輸入參數的名稱。

#{}可以接受HashMap、簡單類型、POJO類型的參數。

當接受簡單類型的參數時,#{}裏面可以是value,也可以是其他。

#{}可以防止SQL注入。

${}:相當於拼接SQL串,對傳入的值不做任何解釋的原樣輸出。

${}會引起SQL注入所以要謹慎使用

${}可以接受HashMap、簡單類型、POJO類型的參數。

當接受簡單類型的參數時,${}裏面只能是value

 






發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章