文章目錄
- 一、Mybatis是什么?
- 二、使用步驟
- 1.匯入jar包
- 2.建立資料庫和表
- 3.新建包和類
- 4.新建與資料庫表對應的類
- 5.全域組態檔
- 6.新建SqlSessionFactory
- 7.獲取SqlSession實體
- 8.書寫Sql映射檔案
- 9.獲取SqlSession的回傳值,輸出并關閉sqlSession
- 10.面向介面式編程
- 三、進一步強化
- 1.全域組態檔
- 2. 映射檔案(Mybatis真正的魅力)
- 總結
一、Mybatis是什么?
用于java程式和資料庫連接的 半自動、輕量級 的框架,下載地址:(整片文章基于Mybatis3.4.1)
https://Github.com/mybatis/mybatis-3/
Mybatis官方介紹檔案(中文版)
https://mybatis.org/mybatis-3/zh/index.html
二、使用步驟
1.匯入jar包
將jar包復制到src的lib(一般來說是沒有這個檔案夾的,需要自己新建)檔案夾下,然后匯入jar包
一個是Mybatis的jar包,一個是Mysql驅動
2.建立資料庫和表
2.1 創建一個資料庫名字為mybatis(可以不同但最好相同)

2.2 建立tbl_employee表,并在表中填入一條資料


3.新建包和類

如上建包即可
4.新建與資料庫表對應的類
因為是員工表所以我的類名字為Employee
public class Employee {
private Integer id;
private String lastName;//這里的屬性名和表中的列名不一樣
private String email;
private String gender;
public Employee() {
}
public Employee(String lastName, String email, String gender) {
this.lastName = lastName;
this.email = email;
this.gender = gender;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
@Override
public String toString() {
return "Employee{" +
"id=" + id +
", lastName='" + lastName + '\'' +
", email='" + email + '\'' +
", gender='" + gender + '\'' +
'}';
}
}
5.全域組態檔
根據官方檔案的介紹全域配置檔案的代碼如下(在src下新建一個mybatis.xml檔案) 下面的中文請改成自己的配置
全域組態檔的作用:獲取資料庫連接,<mapper>里面的地址先忽略,不需要進行更改
<?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>
<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:資料庫埠號/資料庫名"/>
<property name="username" value="資料庫的用戶名"/>
<property name="password" value="資料庫的密碼"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="org/mybatis/example/BlogMapper.xml"/>
</mappers>
</configuration>
6.新建SqlSessionFactory
按照檔案所描述的,
每個基于 MyBatis 的應用都是以一個 SqlSessionFactory 的實體為核心的,
所以我們先建立一個,
String resource = "全域組態檔的路徑";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
那么在我們知道如何建立SqlSessionFactory后,我們出現了1個問題
這段代碼該寫在哪里
在我們剛剛建的test包下新建一個test類
將代碼寫在里面,這里面的 .getResourceAsStream方法會有例外,選擇throws或者try/catch都可以

7.獲取SqlSession實體
該獲取SqlSession實體了
SqlSession sqlSession = sqlSessionFactory.openSession();

我們發現SqlSession物件可以使用的方法有很多,幾乎都是和資料庫增刪改查有關,下面我們選擇.selectOne(),這個方法需要兩個引數,第一個為執行sql陳述句的唯一識別符號;第二個為執行sql要用的引數,
8.書寫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">
<mapper namespace="com.xxxxx.mybatis.bean.EmployeeMapper">
<!-- namesapce:名稱空間(可以隨便起)
id:唯一標識
resultType:回傳值型別
#{id}:從傳遞過來的引數中取出id值
-->
<select id="selectEmp" resultType="com.xxxx.mybatis.bean.Employee">
select id,last_name lastName,email,gender from tbl_employee where id = #{id}
</select>
<!--
這里的sql陳述句我們給last_name起了一個別名為lastName和java類中的名字一樣
-->
</mapper>
9.獲取SqlSession的回傳值,輸出并關閉sqlSession
try {
Employee employee = sqlSession.selectOne("com.xxx.mybatis.bean.EmployeeMapper.selectEmp", 1);
System.out.println(employee);
} finally {
sqlSession.close();
}
10.面向介面式編程
我們在配置完后可以發現,我們可以隨意往資料庫中傳遞引數,這肯定是不可以的,所以我們將對我們所寫的代碼進行改進,
10.1 新建一個介面
public interface EmployeeMapper {
public Employee getEmpById(Integer id);
}
10.2 更改sql映射檔案的內容
1) 將namespace改為介面的全類名
2) 將id改為介面中對應方法的名字
<mapper namespace="com.xxx.mybatis.dao.EmployeeMapper">
<!-- namesapce:名稱空間; 指定為介面的全類名
id:唯一標識; 將對應的方法的方法名和id對應,保證一樣
resultType:回傳值型別
#{id}:從傳遞過來的引數中取出id值
public Employee getEmpById(Integer id);
-->
<select id="getEmpById" resultType="com.huyichuan.mybatis.bean.Employee">
select id,last_name lastName,email,gender from tbl_employee where id = #{id}
</select>
</mapper>
10.3 在test類中新建方法,代碼如下
@Test
public void test01(){
SqlSession sqlSession = null;
try {
//1.獲取sqlsessionfactory物件
InputStream resourceAsStream = Resources.getResourceAsStream("mybatis.xml");
SqlSessionFactory sqlsessionfactoty = new SqlSessionFactoryBuilder().build(resourceAsStream);
//2.獲取sqlSession物件
sqlSession = sqlsessionfactoty.openSession();
//3.獲取介面的實作類物件
//介面和xml系結,mybatis會為介面自動創建一個代理物件,代理物件去執行增刪改查方法
EmployeeMapper mapper = sqlSession.getMapper(EmployeeMapper.class);
Employee empById = mapper.getEmpById(1);
System.out.println(empById);
} catch (IOException e) {
e.printStackTrace();
}finally {
sqlSession.close();
}
}
三、進一步強化
1.全域組態檔
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
在我們寫xml組態檔的時候,我們一定會先寫著一段代碼
其中 http://mybatis.org/dtd/mybatis-3-config.dtd為xml檔案的dtd約束檔案,下載之后xml檔案就會有提示
1.1 properties
mybatis可以使用properties來引入外部properties組態檔的內容
resource:引入類路徑下的資源
url:引入網路路徑或者磁盤路徑下的資源
1.2 settings
settings包含了很多重要的設定項
setting:用來設定每一個設定項
name:設定項名
value:設定項取值
mapUnderscoreToCamelCase 默認為false,可設定為true
例:資料庫中的列名為last_Name 對應 lastName ,則會自動匹配
1.3 typeAliases
typeAliases:別名處理器,可以為我們的java型別起別名
別名不區分大小寫,還是寫全類名比較好
<typeAlias type="com.huyichuan.mybatis.bean.Employee" alias="emp"/>
typeAlias:為某個java型別起別名
type:指定要起別名的型別全類名;
什么都不寫的情況下默認別名就是類名小寫:employee
alias:指定新的別名
<package name="com.huyichuan.mybatis.bean"/>
package:可以為某個包下的所有類批量起別名
name:指定包名(當前包以及下面所有后代包的每一個類都起一個默認別名(類名小寫))
批量起別名的情況下,也可以使用@Alias注解為某個型別指定新的別名
tips:直接寫在類里,例子見如下圖片

1.4 environments
environments:環境們,mybatis可以配置多種環境
default 指定使用某種環境,可以達到快速切換環境
environment:配置一個具體的環境資訊;
必須有兩個標簽;id代表當前環境的唯一標識
1)transactionManager:事務管理器
2)type:事務管理器的型別JDBC(JdbcTransactionFactory)| MANAGED(ManagedTransactionFactory)
最終方案:Spring
自定義事務控制管理器,實作TransactionFactory介面,type指定為全類名dataSource:資料源;
type:資料源型別;
UNPOOLED(UnpooledDataSourceFactory)、
POOLED(PooledDataSourceFactory)、
JNDI(JndiDataSourceFactory)
自定義資料源:實作DataSourceFactory介面即可,type是資料源的全類名
最終方案:Spring
1.5 databaseIdProvider
databaseIdProvider:支持多資料廠商;
type="DB_WENDOR":VendorDatabaseIdProvider
作用就是得到資料庫廠商的標識(驅動自帶):mybatis就能根據資料庫廠商標識來執行不同的sql
MySQL、Oracle、SQL Server,xxx
<databaseIdProvider type="DB_WENDOR">
<!--為不同的資料庫廠商起別名-->
<property name="MySQL" value="mysql"/>
<property name="Oracle" value="oracle"/>
<property name="SQL Server" value="sqlserver"/>
<!--在sql映射檔案中 資料庫陳述句中標簽中有一個屬性為databaseId="xxxx"
xxxx為資料庫廠商的別名,意味著在xxx資料庫環境下,使用xxx陳述句-->
</databaseIdProvider>
sql映射檔案:
<select id="getEmpById" resultType="emp" databaseId="mysql">
select * from tbl_employee where id = #{id}
</select>
1.6 mappers
將sql映射注冊到全域配置中
mapper:注冊一個sql映射
注冊組態檔
resource:應用類路徑下的sql映射檔案
url:應用網路路徑或者磁盤路徑下的sql映射檔案
注冊介面
class:參考(注冊)介面:
1、有sql映射檔案,映射檔案名必須和介面同名,并且放在與介面統一目錄下;
2、沒有sql映射檔案,所有的sql都是利用注解寫在介面上;
推薦:比較重要的、復雜的Dao介面我們來寫sql映射檔案
不重要的、簡單的Dao介面為了開發快速可以使用注解
<mapper resource="com/xxx/mybatis/dao/mapper.xml"/>
<mapper class="com.xxx.mybatis.dao.EmployeeMapperAnnotation"/>
<!-- 批量注冊,name里面寫包名;
映射檔案和介面放在同一個包下、同包名
-->
<package name="com.xxx.mybatis.dao"/>
在Dao介面使用注解直接寫sql陳述句,如下圖所示

2. 映射檔案(Mybatis真正的魅力)
總結
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/180996.html
標籤:其他
