13:01:16
MyBatis是Apache軟體基金會下的一個開源專案,前身是iBatis框架,
MyBatis 是一款優秀的持久層框架,它支持定制化 SQL、存盤程序以及高級映射
MyBatis 采用的是 ORM(Object Relational Mapping) 物件關系映射
MyBatis 的兩種映射方式:
-
通過XML映射
-
通過注解
MyBatis 的簡單實作(xml 實作)
- 創建一個maven 模塊
- 添加 pom 檔案
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.example</groupId>
<artifactId>mybatis01</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
<!--junit-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13</version>
<scope>test</scope>
</dependency>
<!--mybatis依賴-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.6</version>
</dependency>
<!--mysql資料庫驅動-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.47</version>
</dependency>
<!--日志輸出 log4j-->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
</dependencies>
<build>
<!--重新指定資源檔案-->
<resources>
<!--指定src/main/java下的xml檔案和properties檔案作為資源檔案-->
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
<include>**/*.properties</include>
</includes>
</resource>
<!--指定src/main/resources下的xml檔案和properties檔案作為資源檔案-->
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.xml</include>
<include>**/*.properties</include>
</includes>
</resource>
</resources>
</build>
</project>
3. 配置mybatis-config.xml

配置 dataSource.properties(自己關聯的資料庫)
driver=com.mysql.jdbc.Driver url=jdbc:mysql://localhost:3306/study_mybatis_01_01?useUnicode=true&characterEncoding=utf-8&useSSL=false username=root password=root
配置 log4j.properties(網上百度,看看需要啥)
log4j.rootLogger=DEBUG, stdout 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
<?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>
<!--定義屬性檔案
resource:從類路徑下面讀取外部檔案
url:從一個資源定位地址來讀取組態檔,很少使用,了解即可
-->
<properties resource="dataSource.properties"/>
<!-- 指定使用log4j輸出日志-->
<settings>
<setting name="logImpl" value="https://www.cnblogs.com/gary-ttx/p/LOG4J"/>
<!-- 貌似這里還可以插入一個駝峰命名-->
</settings>
<!-- 別名配置 -->
<typeAliases>
<package name="cn.ttx.pojo"/>
</typeAliases>
<!--mybatis環境的配置-->
<environments default="default">
<environment id="default">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="https://www.cnblogs.com/gary-ttx/p/${driver}"/>
<property name="url" value="https://www.cnblogs.com/gary-ttx/p/${url}"/>
<property name="username" value="https://www.cnblogs.com/gary-ttx/p/${username}"/>
<property name="password" value="https://www.cnblogs.com/gary-ttx/p/${password}"/>
</dataSource>
</environment>
</environments>
<!--加載映射檔案-->
<mappers>
<package name="cn.ttx.dao" />
</mappers>
</configuration>
完整配置

物體類撰寫(個人比較懶,所以用了Lombok)
package cn.ttx.pojo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.Date;
@Data
@NoArgsConstructor
@AllArgsConstructor
public class User {
private Integer id;
private String username;
private Date birthday;
private String sex;
private String address;
}
測驗
-
通過框架提供的Resources類,加載mybatis-config.xml,得到檔案輸入流InputStream物件
-
實體化會話工廠建造類SqlSessionFactoryBuilder
-
通過上面的SqlSessionFactoryBuilder物件,讀取核心組態檔的輸入流,得到會話工廠SqlSessionFactory
-
使用SqlSessionFactory物件,創建SqlSession物件
-
它相當于JDBC中的Connection物件,提供了操作資料庫的CRUD方法
-
它提供了一個getMapper()方法,獲取介面的實作物件,
-
-
獲取介面的物件UserMapper,得到介面的代理物件
-
執行資料庫的查詢操作,輸出用戶資訊
-
關倍訓話,釋放資源
package cn.ttx.dao;
import cn.ttx.pojo.User;
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.After;
import org.junit.Before;
import org.junit.Test;
import java.io.InputStream;
import java.util.List;
public class UserMapperTest {
private SqlSession sqlSession;
private UserMapper userMapper;
@Before
public void setUp() throws Exception {
//1. 獲取核心組態檔,得到輸入流物件
InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
//2. 構造會話工廠建造類
SqlSessionFactoryBuilder factoryBuilder = new SqlSessionFactoryBuilder();
//3. 通過建造類得到會話工廠
SqlSessionFactory sessionFactory = factoryBuilder.build(is);
//4. 通過會話工廠得到會話物件
sqlSession = sessionFactory.openSession();
//5. 通過會話物件得到UserMapper介面的代理物件
userMapper = sqlSession.getMapper(UserMapper.class);
}
@After
public void tearDown() throws Exception {
//7. 關倍訓話
sqlSession.commit();
sqlSession.close();
}
@Test
public void findAll() {
//6. 執行查詢操作
List<User> userList = userMapper.findAll();
System.out.println(userList);
}
}
Mybatis執行流程
在Mybatis中一個會話(SqlSession)相當于一次訪問資料庫的程序,一個會話物件類似于一個Connection連接物件,
-
Resources:Mybatis提供的一個加載資源的工具類,我們也可以使用其他方式獲取組態檔的InputStream,
-
SqlSessionFactoryBuilder:會話工廠建造類,用于創建會話工廠,
-
SqlSessionFactory:會話工廠,全域共享一個會話工廠,用于創建會話物件,
-
SqlSession: 會話,每次訪問資料庫都需要創建一個會話物件,這個會話物件不能共享,訪問完成以后會話需要關閉,

IDEA 上面有很多 mybatis 的插件 free-mybatis (可以百度了解)
首次寫這個東西,有什么錯的地方,希望大家指出,謝謝各位大佬
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/255458.html
標籤:Java
