Mybatis是什麼? Mybatis的相關內容介紹
這篇文章帶給大家的內容是關於Mybatis是什麼? Mybatis的相關內容介紹,有一定的參考價值,有需要的朋友可以參考一下,希望對你有幫助。
MyBatis簡介
MyBatis 本是apache的一個開源專案iBatis, 2010年這個專案由apache software foundation 遷移到了google code,並且改名為MyBatis 。 2013年11月遷移到Github。
MyBatis 是支援客製化 SQL、預存程序以及進階映射的優秀的持久層框架。 MyBatis 避免了幾乎所有的 JDBC 程式碼和手動設定參數以及取得結果集。 MyBatis 可以對配置和原生Map使用簡單的 XML 或註解,將介面和 Java 的 POJOs(Plain Old Java Objects,普通的 Java物件)映射成資料庫中的記錄。
MyBatis參考資料官網
http://www.mybatis.org/mybatis-3/zh/index.html
MyBatis下載位址
# https://github.com/mybatis/mybatis-3
MyBatis的優勢
- ##開源的優秀的持久層框架
- SQL語句與程式碼分離
- 以設定為導向的程式設計 ## 良好支援複雜資料對應
- 動態SQL
1.新增所需的jar套件
1)mybatis-3.3.0 核心套件(如果需要日誌操作,可以匯入依賴套件)
2)資料庫驅動(mysql-connector-java-5.1.22-bin)
2.建立資料庫,新增測試資料create table `tal_employee` (
`id` int (11),
`last_name` varchar (360),
`email` varchar (300),
`gender` char (9)
);
INSERT INTO `tal_employee` (`id`, `last_name`, `email`, `gender`) VALUES('1','韩信','hanxin@gemail.com','男');
INSERT INTO `tal_employee` (`id`, `last_name`, `email`, `gender`) VALUES('2','LiBaihH','libai@gemail.com','男');
INSERT INTO `tal_employee` (`id`, `last_name`, `email`, `gender`) VALUES('3','孙尚香','sunshangxiang@gemail.com','女');
INSERT INTO `tal_employee` (`id`, `last_name`, `email`, `gender`) VALUES('4','安琪拉','anqila@gemail.com','女');
INSERT INTO `tal_employee` (`id`, `last_name`, `email`, `gender`) VALUES('5','Hello','Hello@gemail.com','男');
INSERT INTO `tal_employee` (`id`, `last_name`, `email`, `gender`) VALUES('6','Miya','Miya@gemail.com','男');
public class Employee {
private Integer id;
private String lastName;
private String email;
private String gender;
//此处省略get set toString。。。
}
登入後複製
4.建立實體類別映射設定檔public class Employee { private Integer id; private String lastName; private String email; private String gender; //此处省略get set toString。。。 }
<?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="EmployeeMapper">
<!-- 定义一个查询方法 resultType 返回值类型-->
<select id="findAll" resultType="com.simple.mybatis.entitys.Employee">
select * from tal_employee
</select>
</mapper>
登入後複製
5.建立mybatis主設定檔<?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="EmployeeMapper"> <!-- 定义一个查询方法 resultType 返回值类型--> <select id="findAll" resultType="com.simple.mybatis.entitys.Employee"> select * from tal_employee </select> </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>
<!-- 配置环境 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>
<!-- 加载映射 -->
<mappers>
<mapper resource="com/simple/mybatis/entitys/EmployeeMapper.xml" />
</mappers>
</configuration>
登入後複製
取得SqlSessionFactory物件<?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> <!-- 配置环境 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> <!-- 加载映射 --> <mappers> <mapper resource="com/simple/mybatis/entitys/EmployeeMapper.xml" /> </mappers> </configuration>
private SqlSessionFactory sqlSessionFactory;
@Before
public void init() throws IOException{
//读取mybatis主配置文件
InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
/**
* 实例化SqlSessionFactory
* 如果没有指定默认环境,可以在这里指定使用的环境ID,比如我先在有个DEV环境
* sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream,"DEV");
* 我这里已经使用了默认环境所以我就不用这种方式创建了
*/
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
}
取得SqlSession對象,作用於與資料庫的一次回話作用於與資料庫的一次回話
SqlSession session = sqlSessionFactory.openSession();
取得所有員工記錄
#EmployeeMapper就是我們實體類別映射檔案的命名空間,findAll就是我們select標籤的ID
List<Employee> employees = session.selectList("EmployeeMapper.findAll"); for (Employee employee : employees) { System.out.println(employee); }
存取結果:
Employee [id=1, lastName=null, email=hanxin@gemail.com, gender=男] Employee [id=2, lastName=null, email=libai@gemail.com, gender=男] Employee [id=3, lastName=null, email=sunshangxiang@gemail.com, gender=女] Employee [id=4, lastName=null, email=anqila@gemail.com, gender=女] Employee [id=5, lastName=null, email=Hello@gemail.com, gender=男] Employee [id=6, lastName=null, email=Miya@gemail.com, gender=男]
在這裡我們存取資料庫是正常的,為什麼lastName會是空呢?
解決表格欄位與類別屬性名稱不對應原因:應為我們這裡實體類別上的屬性叫做lastName與資料庫列last_name名字不對應所以取得的值為空
解決方案1:將實體類別對映檔案的中select標籤中的取別名
<select id="findAll" resultType="com.simple.mybatis.entitys.Employee"> select id,last_name AS lastName,email,gender from tal_employee </select>
解決方案2:在mybatis主設定檔中設定駝峰式命名,需要將配置排在前面否則XML報錯
<settings> <!-- 开启驼峰式命名规则 --> <setting name="mapUnderscoreToCamelCase" value="true"/> </settings>
使用方案2我們類別中屬性lastName會匹配資料庫欄位last_name
使用日誌查看SQL語句等#首先我們需要加入mybatis依賴套件
新增log4j.properties
#设置输出级别和输出位置 log4j.rootLogger=debug,Console #设置控制台相关的参数 log4j.appender.Console=org.apache.log4j.ConsoleAppender log4j.appender.Console.layout=org.apache.log4j.PatternLayout log4j.appender.Console.layout.ConversionPattern=%d [%t] %-5p [%c] - %m%n #设置MyBatis的输出内容 log4j.logger.java.sql.ResultSet=INFO log4j.logger.org.apache=INFO log4j.logger.java.sql.Connection=DEBUG log4j.logger.java.sql.Statement=DEBUG log4j.logger.java.sql.PreparedStatement=DEBUG
這樣我們就可以使用log4j來查看我們的sql語句啊,傳入的參數啊。 。等等
MyBatis的檔案- #透過前面簡單的MyBatis案例,大家應該了解了MyBatis框架的基本結構,和Hibernate一樣,MyBatis包含了一個核心設定檔和映射檔。
- 核心設定檔(mybatis-config.xml):包含了對Mybatis的核心配置,包含連線池信息,事務,載入映射文件,參數設定等設定。
- 映射檔案(EmployeeMapper.xml):主要實作實體物件對資料庫的映射,關聯關係,Sql語句等。
- 核心設定檔
#配置環境 | |
#一些外部屬性,這些屬性可以被取代 | |
Mybatis中極為重要的調整設置,會改變Mybatis的預設行為。 | |
為Java類型設定一個別名,它只和xml配置有關。 | |
映射器,載入MyBatis的對映檔案。 |
环境配置
Mybatis可以通过
配置多种环境,比如开发环境、测试环境和生产环境等。
不过要记住,尽管可以配置多个环境,但是SqlSessionFactory对象只能加载一个。如果你需要同时连接多个数据库,需要创建多个SqlSessionFactory实例。
事务管理
在 MyBatis来进行事务的设置,其中有两种类型的事务管理器。
JDBC:这个配置就是直接使用了 JDBC 的提交和回滚设置,它依赖于从数据源得到的连接来管理事务范围。
MANAGED:这个配置几乎没做什么。它从来不提交或回滚一个连接,而是让容器来管理事务的整个生命周期(比如 JEE 应用服务器的上下文)。 默认情况下它会关闭连接,然而一些容器并不希望这样,因此需要将 closeConnection 属性设置为 false 来阻止它默认的关闭行为。
<transactionManager type="MANAGED"> <property name="closeConnection" value="false"/> </transactionManager>
如果你正在使用 Spring + MyBatis,则没有必要配置事务管理器, 因为 Spring 模块会使用自带的管理器来覆盖前面的配置。
数据源
使用标准的 JDBC 数据源接口来配置 JDBC 连接对象的资源。有三种数据源类型
UNPOOLED:这个数据源的实现只是每次被请求时打开和关闭连接。
POOLED:这种数据源的实现利用“池”的概念将 JDBC 连接对象组织起来, 避免了创建新的连接实例时所必需的初始化和认证时间。
JNDI:使用JNDI在外部配置数据源。
properties标签
properties为外部属性,比如数据库连接信息可以配置到一个单独的properties文件中,然后在xml中进行引入。
添加一个db.properties文件
driver=com.mysql.jdbc.Driver url=jdbc:mysql://localhost:3306/test username=root password=root
在mybatis主配置文件中引用
<properties resource="db.properties" /> <environments default="development"> <environment id="development"> <transactionManager type="JDBC" /> <dataSource type="POOLED"> <property name="driver" value="${driver}" /> <property name="url" value="${url}" /> <property name="username" value="${username}" /> <property name="password" value="${password}" /> </dataSource> </environment> </environments>
映射器
通常MyBatis中将映射关系(非必须)和SQL语句写入到映射文件中,在配置文件中需要手动进行加载映射文件。加载映射文件使用进行加载。Mybatis中有4种加载方式。
1.使用resource,加载classpath路径进行加载。
<mappers> <mapper resource="com/simple/mybatis/entitys/EmployeeMapper.xml"/> </mappers>
2.使用url路径进行加载。
<mappers> <mapper url="file:///var/mappers/AuthorMapper.xml"/> </mappers>
3.使用calss进行加载,注解方式。
<!– 加载class类--> <mappers> <mapper class="使用注解的全类名"/> </mappers>
4.使用package进行加载,注解方式。
<!– 加载某个包下的所有class文件--> <mappers> <package name="com.simple.mybatis.entitys"/> </mappers>
别名的使用
之前,我们在sql映射xml文件中的引用实体类时,resultType需要写上实体类的全类名(包名+类名),如下:
<select id="findAll" resultType="com.simple.mybatis.entitys.Employee"> select id,last_name AS lastName,email,gender from tal_employee </select>
在mybatis主配置文件中加入
<typeAliases> <typeAlias type=“com.simple.mybatis.entitys.Employee" alias="Employee"/> </typeAliases>
这样在resultType中就可以直接使用Employee类型了。这个别名是不区分大小写的。
以上是Mybatis是什麼? Mybatis的相關內容介紹的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

熱門話題

iBatis與MyBatis:你該選擇哪一個?簡介:隨著Java語言的快速發展,許多持久化框架也應運而生。 iBatis和MyBatis是兩個備受歡迎的持久化框架,它們都提供了一個簡單而高效的資料存取解決方案。本文將介紹iBatis和MyBatis的特點和優勢,並給出一些具體的程式碼範例,幫助你選擇合適的框架。 iBatis簡介:iBatis是一個開源的持久化框架

MyBatis動態SQL標籤解讀:Set標籤用法詳解MyBatis是一個優秀的持久層框架,它提供了豐富的動態SQL標籤,可以靈活地建構資料庫操作語句。其中,Set標籤是用來產生UPDATE語句中SET子句的標籤,在更新作業中非常常用。本文將詳細解讀MyBatis中Set標籤的用法,以及透過具體的程式碼範例來示範其功能。什麼是Set標籤Set標籤用於MyBati

MyBatis中實現批量刪除語句的幾種方式,需要具體程式碼範例近年來,由於資料量的不斷增加,批量操作成為了資料庫操作的一個重要環節之一。在實際開發中,我們經常需要批量刪除資料庫中的記錄。本文將重點介紹在MyBatis中實作批量刪除語句的幾種方式,並提供相應的程式碼範例。使用foreach標籤實作批量刪除MyBatis提供了foreach標籤,可以方便地遍歷一個集

JPA和MyBatis:功能與效能比較分析引言:在Java開發中,持久化框架扮演著非常重要的角色。常見的持久化框架包括JPA(JavaPersistenceAPI)和MyBatis。本文將對這兩個框架的功能和效能進行比較分析,並提供具體的程式碼範例。一、功能對比:JPA:JPA是JavaEE的一部分,提供了一個物件導向的資料持久化解決方案。它透過註解或X

MyBatis批量刪除語句的使用方法詳解,需要具體程式碼範例引言:MyBatis是一款優秀的持久層框架,提供了豐富的SQL操作功能。在實際專案開發中,經常會遇到需要大量刪除資料的情況。本文將詳細介紹MyBatis批量刪除語句的使用方法,並附上具體的程式碼範例。使用場景:在資料庫中刪除大量資料時,逐條執行刪除語句效率低。此時,可以使用MyBatis的批次刪除功能

MyBatis一級快取詳解:如何提升資料存取效率?在開發過程中,高效率的資料存取一直是程式設計師關注的焦點之一。而對於MyBatis這樣的持久層框架而言,快取是提升資料存取效率的關鍵方法之一。 MyBatis提供了一級快取和二級快取兩種快取機制,其中一級快取是預設開啟的。本文將詳細介紹MyBatis一級快取的機制,並提供具體的程式碼範例,幫助讀者更好地理

MyBatis的快取機制解析:一級快取與二級快取的差異與應用在MyBatis框架中,快取是一個非常重要的特性,可以有效提升資料庫操作的效能。其中,一級快取和二級快取是MyBatis常用的兩種快取機制。本文將詳細解析一級快取與二級快取的差異與應用,並提供具體的程式碼範例進行說明。一、一級緩存一級緩存也被稱為本地緩存,它預設開啟且不可關閉。一級快取是SqlSes

MyBatisGenerator是MyBatis官方提供的程式碼產生工具,可以幫助開發人員快速產生符合資料庫表結構的JavaBean、Mapper介面以及XML映射檔。在使用MyBatisGenerator進行程式碼產生的過程中,配置參數的設定是至關重要的。本文將從配置參數的角度出發,深入探討MyBatisGenerator的
