目錄
环境配置
事务管理
数据源
properties标签
映射器
别名的使用
首頁 Java java教程 Mybatis是什麼? Mybatis的相關內容介紹

Mybatis是什麼? Mybatis的相關內容介紹

Oct 12, 2018 pm 02:44 PM
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
MyBatis開發步驟

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','男');
登入後複製

#3.建立實體類別
public class Employee {
    private Integer id;
    private String lastName;
    private String email;
    private String gender;
    //此处省略get set toString。。。
}
登入後複製
4.建立實體類別映射設定檔
<?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 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物件

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允許使用者在已對應的某一點進行攔截。 ############

环境配置

  1. Mybatis可以通过

    配置多种环境,比如开发环境、测试环境和生产环境等。

  2. 不过要记住,尽管可以配置多个环境,但是SqlSessionFactory对象只能加载一个。如果你需要同时连接多个数据库,需要创建多个SqlSessionFactory实例。

事务管理

在 MyBatis来进行事务的设置,其中有两种类型的事务管理器。

  1. JDBC:这个配置就是直接使用了 JDBC 的提交和回滚设置,它依赖于从数据源得到的连接来管理事务范围。

  2. MANAGED:这个配置几乎没做什么。它从来不提交或回滚一个连接,而是让容器来管理事务的整个生命周期(比如 JEE 应用服务器的上下文)。 默认情况下它会关闭连接,然而一些容器并不希望这样,因此需要将 closeConnection 属性设置为 false 来阻止它默认的关闭行为。

<transactionManager type="MANAGED">
    <property name="closeConnection" value="false"/>
</transactionManager>
登入後複製

如果你正在使用 Spring + MyBatis,则没有必要配置事务管理器, 因为 Spring 模块会使用自带的管理器来覆盖前面的配置。

数据源

使用标准的 JDBC 数据源接口来配置 JDBC 连接对象的资源。有三种数据源类型

  1. UNPOOLED:这个数据源的实现只是每次被请求时打开和关闭连接。

  2. POOLED:这种数据源的实现利用“池”的概念将 JDBC 连接对象组织起来, 避免了创建新的连接实例时所必需的初始化和认证时间。

  3. 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中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.聊天命令以及如何使用它們
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

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

iBatis和MyBatis:哪個比較適合你? iBatis和MyBatis:哪個比較適合你? Feb 19, 2024 pm 04:38 PM

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

詳解MyBatis動態SQL標籤中的Set標籤功能 詳解MyBatis動態SQL標籤中的Set標籤功能 Feb 26, 2024 pm 07:48 PM

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

實作MyBatis中批次刪除操作的多種方式 實作MyBatis中批次刪除操作的多種方式 Feb 19, 2024 pm 07:31 PM

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

比較分析JPA和MyBatis的功能和性能 比較分析JPA和MyBatis的功能和性能 Feb 19, 2024 pm 05:43 PM

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

MyBatis批次刪除語句的使用方法詳解 MyBatis批次刪除語句的使用方法詳解 Feb 20, 2024 am 08:31 AM

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

MyBatis 一級快取詳解:如何提升資料存取效率? MyBatis 一級快取詳解:如何提升資料存取效率? Feb 23, 2024 pm 08:13 PM

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

解析MyBatis的快取機制:比較一級快取和二級快取的特性和用法 解析MyBatis的快取機制:比較一級快取和二級快取的特性和用法 Feb 25, 2024 pm 12:30 PM

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

MyBatis Generator配置參數解讀及最佳實踐 MyBatis Generator配置參數解讀及最佳實踐 Feb 23, 2024 am 09:51 AM

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

See all articles