Mybatis入門
簡介:
MyBatis 是一款優秀的持久層框架,它支持自定義 SQL、存盤程序以及高級映射,MyBatis 免除了幾乎所有的 JDBC 代碼以及設定引數和獲取結果集的作業,MyBatis 可以通過簡單的 XML 或注解來配置和映射原始型別、介面和 Java POJO(Plain Old Java Objects,普通老式 Java 物件)為資料庫中的記錄,
搭建環境
1.匯入所需依賴
? 創建一個maven工程,匯入專案所需依賴
<!--匯入依賴-->
<dependencies>
<!--mysql驅動-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.47</version>
</dependency>
<!--mybatis-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.2</version>
</dependency>
<!--junit-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
</dependencies>
? mybatis框架是對dao層進行開發簡化操作,查詢資料庫需要用到jdbc,測驗代碼用到junit,
撰寫代碼
1.創建資料庫
? 新建一個mybatis資料庫,創建表格user,插入資料方便之后測驗
CREATE DATABASE mybatis;
USE mybatis;
CREATE TABLE `user`(
id INT(20) PRIMARY KEY NOT NULL,
`name` VARCHAR(30) DEFAULT NULL,
`pwd` VARCHAR(30) DEFAULT NULL
)ENGINE=INNODB DEFAULT CHARSET=utf8;
INSERT INTO `user` VALUES
(1,'用戶1','4564545646'),
(2,'用戶2','4564545646'),
(3,'用戶3','4564545646'),
(4,'用戶4','4564545646'),
(5,'用戶5','4564545646');
2.配置mybatis-config.xml
? 使用mybatis框架開發, 在resource目錄下新建一個mybatis核心組態檔, 包括獲取資料庫連接實體的資料源(DataSource)以及決定事務作用域和控制方式的事務管理器(TransactionManager),之后探討 XML 組態檔的詳細內容 ,
<!--核心組態檔 -->
<configuration>
<!--環境 , default為默認環境-->
<environments default="development">
<environment id="development">
<!--事務管理JDBC-->
<transactionManager type="JDBC"/>
<!--配置資料源-->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/mybatis"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</dataSource>
</environment>
</environments>
<!-- 每一個mapper.xml都需要在mybatis核心組態檔中注冊-->
<mappers>
<mapper resource="com/frw/dao/UserMapper.xml"/>
</mappers>
</configuration>
3.從XMl中構建SqlSessionFactory
? 我們要使用mybatis,先要創建一個SqlSessionFactory物件,SqlSessionFactory 的實體可以通過 SqlSessionFactoryBuilder 獲得,而 SqlSessionFactoryBuilder 則可以從 XML 組態檔或一個預先配置的 Configuration 實體來構建出 SqlSessionFactory 實體, 通過sqlSession工廠物件獲取sqlSession來對資料庫進行操作,
因為上述操作是固定的,所有我們可以定義一個MybatisUtils工具類,每次通過工具類來獲取SqlSessionfactory,
private static SqlSessionFactory sqlSessionFactory;
static {
try {
// 獲取SqlSessionFactory物件
String resource = "mybatis-config.xml";
// 讀取xml
InputStream inputStream = Resources.getResourceAsStream(resource);
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
} catch (IOException e) {
e.printStackTrace();
}
}
// 有了sqlSessionFactory我們就可以獲得sqlSession的實體了
// sqlSession 完全的包含了面向資料庫執行sql命令的所需的所有方法
public static SqlSession getSqlSession() {
return sqlSessionFactory.openSession();
}
將獲取sqlSessionFactory的操作放在靜態代碼塊里,每次呼叫都可以初始化得到sqlSessionFactory ,再通過get getSqlSession()回傳 sqlSession,
4.定義物體類user
private int id;
private String name;
private String pwd;
public User(){};
public User(int id, String name, String pwd) {
this.id = id;
this.name = name;
this.pwd = pwd;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", name='" + name + '\'' +
", pwd='" + pwd + '\'' +
'}';
}
public String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
? 要使物體類欄位和資料庫資料自動映射,所有在創建物體類是欄位一一對應,
5.撰寫UserDao介面
public interface UserDao {
List<User> getUserList();
}
6.撰寫UserDao的映射檔案UserMapper.xml
<!--namespace 系結一個Mapper/Dao介面 -->
<mapper namespace="com.frw.dao.UserDao">
<select id="getUserList" resultType="com.frw.domain.User" >
select * from user
</select>
</mapper>
mybatis是幫我們實作dao層開發的,之前定義Dao的實作類,在實作類中操作jdbc,現在只需定義一個Mapper.xml檔案,與對應的介面系結映射,Mybatis 框架根據介面定義創建介面的動態代理物件,代理物件的方法體同上邊Dao介面實作類方法,
大白話講就是,就是我們不用手寫介面的實體,通過xml配置介面的實作,再通過sqlseesion根據介面的class動態生成介面實作的實體化,再通過實體化的物件去呼叫在xml配置好的增刪改查的方法,在xml配置的方法就是通過一系列標簽屬性去定義方法,將sql陳述句寫在標簽中,執行方法就呼叫介面定義好的對應方法,但呼叫的是介面實作類實體化的方法
系結映射需要在mybatis核心組態檔中插入注冊
<!-- 每一個mapper.xml都需要在mybatis核心組態檔中注冊-->
<mappers>
<!-- resource是對應mapper的資源路徑 -->
<mapper resource="com/frw/dao/UserMapper.xml"/>
</mappers>
撰寫測驗類
創建一個UserDaoTest類,定義一個測驗方法
@Test
public void Test() {
SqlSession sqlSession = null;
try {
// 獲得sqlSession物件
sqlSession = MybatisUtils.getSqlSession();
// 動態代理得到UserDao的實作類
方式一:getMapper(推薦)
UserDao mapper = sqlSession.getMapper(UserDao.class);
List<User> userList = mapper.getUserList();
// 方式二:原版,不推薦,了解即可
// List<User> userList =sqlSession.selectList("com.frw.dao.UserDao.getUserList");
for (User user : userList) {
System.out.println(user);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
sqlSession.close();
}
}
獲取的sqlSession可以根據mybatis反射動態代理的得到一個mapper動態代理物件,這個動態代理物件實質上是UserDao的實作類的實體化物件(以下簡稱D),根據java的多型性,呼叫的是D的方法,即在UserMapper.xml中定義的方法,
總結:mybatis幫我們把介面實作了,我們只需要指定介面的實作規則(即通過組態檔的方式),然后使用sqlsession,它將可以在編譯期間幫我們動態生成介面實作的實體,減少了代碼耦合性,方便維護和提高開發效率
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/262192.html
標籤:java
下一篇:IO流常用小知識
