1. 程式人生 > >【Mybatis學習筆記】01—Mybatis入門

【Mybatis學習筆記】01—Mybatis入門

什麼是Mybatis:

Mybatis是一款持久層框架。用於程式與資料庫的之間的互動。

Mybatis和大名鼎鼎的全自動持久層框架Hibernate最大不同的地方在於,Mybatis是半自動的,由開發人員來定製sql語句。

並且相比較Hibernate而言Mybatis更簡單,易學。

依賴的jar包: 

mybatis-3.4.6.jar                                              (Mybatis核心jar包)

mysql-connector-java-5.1.40-bin.jar              (Mysql資料庫連線驅動)

建立使用者表:

DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) DEFAULT NULL,
  `gender` varchar(255) DEFAULT NULL,
  `age` int(11) DEFAULT NULL,
  `hobby` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=21 DEFAULT CHARSET=utf8;

建立對應實體類:

package com.zzzj.helloworld.entity;

import lombok.Data;

@Data
public class User {
	private Integer id;
	private Integer age;
	private String 	name;
	private String	hobby;
	private String 	gender;
}

搭建配置檔案:mybatis-config.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>
<settings>
	<!-- 開啟在控制檯列印sql語句  -->
	<setting name="logImpl" value="STDOUT_LOGGING" />
</settings>
	<!-- 資料庫環境搭建  當前使用的是Mysql環境 -->
	<environments default="mysql">
		<environment id="mysql">
			<transactionManager type="JDBC" />
				<dataSource type="POOLED">
					<property name="driver" value="com.mysql.jdbc.Driver" />
					<property name="url" value="jdbc:mysql://localhost:3306/mybatis01" />
					<property name="username" value="root" />
					<property name="password" value="1234" />
				</dataSource>
		</environment>
	</environments>
	<!-- 引入sql對映檔案  -->
	<mappers>
		<mapper resource="com/zzzj/helloworld/entity/UserMapper.xml"/>
	</mappers>
	
</configuration>

 搭建sql對映檔案:UserMapper.xml

<?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">
<!-- namespace:當前對映檔案唯一標識-->
<mapper namespace="helloworld01">
	  <!-- 
	  	select 子元素 	: 用於進行資料庫查詢相關操作
	  	id屬性		: 唯一標識
	  	resultType	: 查詢後返回的結果封裝的物件型別
	   -->
	  <select id="getById" resultType="com.zzzj.helloworld.entity.User">
	    select * from USER where id = #{id}
        <!-- #{}表示式:暫時理解為從引數中獲取id值 -->
	  </select>
</mapper>

現在所有的環境都已經搭建完成了,可以開始使用Mabatis與我們的資料庫開始互動了

①:通過Mybatis中IO包的Resources類靜態方法從當前class路徑獲取核心配置檔案的輸入流

InputStream input = Resources.getResourceAsStream("com/zzzj/helloworld/mybatis-context.xml")

②:每個基於 MyBatis 的應用都是以 SqlSessionFactory 的例項為中心的

SqlSessionFactory的例項可以通過 SqlSessionFactoryBuilder 物件的builder(InputStream inputstream)獲取

SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(input )

③:通過sqlSessionFactory工廠類獲取Mybatis核心物件Sqlsession

SqlSession session = factory.openSession()

SqlSession和JDBC中的Connection,Hibernate的Session一樣,代表與資料庫的一次會話,並且他們都是非執行緒安全的

④:使用sqlsession物件進行查詢並獲得單個物件:

public  <T> T  selectOne(String statement , Object parameter)

statement :  select標籤的唯一標識 最好為 namespace +'.'+  id

parameter : 該sql所需要的引數

⑤:從user表中查詢一條記錄並封裝為User物件

User user = session.selectOne("helloworld01.getById",1)

sql語句 : select * from USER where id = ? 

引數     : 1 (Integer)

這樣雖然讓sql語句沒有寫死在程式中,但是呼叫也未免太麻煩了

這是以前Mybatis中所使用的辦法,而現在Mybatis提供了一種更簡便,更安全的辦法

基於介面:

MyBatis的sql對映檔案不但能讀取指定sql,還可以與介面進行繫結

sql對映檔案的namespace屬性值為介面的全類名

select標籤id屬性值為介面中的方法名

定義介面

package com.zzzj.helloworld.dao;

import com.zzzj.helloworld.entity.User;

public interface UserDao {
	User getById(Integer id);
}

配置sql對映檔案

<?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">
<!-- namespace:當前對映檔案唯一標識-->
<mapper namespace="com.zzzj.helloworld.dao.UserDao">
	  <!-- 
	  	namespace : 介面的全類名
	  	id	: 介面中對應的方法名
	   -->
	  <select id="getById" resultType="com.zzzj.helloworld.entity.User">
	    select * from USER where id = #{id}
	  </select>
</mapper>
UserDao dao = session.getMapper(UserDao.class);
User u = dao.getById(1);

當呼叫sqlsession物件的getMapper(UserDao.class)時

mybatis會通過JDK動態代理建立該類的實現類 

當呼叫介面中的方法時就會匹配sql對映檔案中標籤的id標識,獲取sql,完成查詢操作

通過這種使用介面與sql對映檔案繫結的形式

既簡化了操作,又能保證正確性。