這篇文章帶給大家的內容是關於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.建立實體類別映射設定檔<?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可以通过
配置多种环境,比如开发环境、测试环境和生产环境等。
不过要记住,尽管可以配置多个环境,但是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中文網其他相關文章!

類加載器通過統一的類文件格式、動態加載、雙親委派模型和平台無關的字節碼,確保Java程序在不同平台上的一致性和兼容性,實現平台獨立性。

Java編譯器生成的代碼是平台無關的,但最終執行的代碼是平台特定的。 1.Java源代碼編譯成平台無關的字節碼。 2.JVM將字節碼轉換為特定平台的機器碼,確保跨平台運行但性能可能不同。

多線程在現代編程中重要,因為它能提高程序的響應性和資源利用率,並處理複雜的並發任務。 JVM通過線程映射、調度機制和同步鎖機制,在不同操作系統上確保多線程的一致性和高效性。

Java的平台獨立性是指編寫的代碼可以在任何安裝了JVM的平台上運行,無需修改。 1)Java源代碼編譯成字節碼,2)字節碼由JVM解釋執行,3)JVM提供內存管理和垃圾回收功能,確保程序在不同操作系統上運行。

Javaapplicationscanindeedencounterplatform-specificissuesdespitetheJVM'sabstraction.Reasonsinclude:1)Nativecodeandlibraries,2)Operatingsystemdifferences,3)JVMimplementationvariations,and4)Hardwaredependencies.Tomitigatethese,developersshould:1)Conduc

云计算显著提升了Java的平台独立性。1)Java代码编译为字节码,由JVM在不同操作系统上执行,确保跨平台运行。2)使用Docker和Kubernetes部署Java应用,提高可移植性和可扩展性。

Java'splatformindependenceallowsdeveloperstowritecodeonceandrunitonanydeviceorOSwithaJVM.Thisisachievedthroughcompilingtobytecode,whichtheJVMinterpretsorcompilesatruntime.ThisfeaturehassignificantlyboostedJava'sadoptionduetocross-platformdeployment,s

容器化技術如Docker增強而非替代Java的平台獨立性。 1)確保跨環境的一致性,2)管理依賴性,包括特定JVM版本,3)簡化部署過程,使Java應用更具適應性和易管理性。


熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

SAP NetWeaver Server Adapter for Eclipse
將Eclipse與SAP NetWeaver應用伺服器整合。

Dreamweaver Mac版
視覺化網頁開發工具

SublimeText3 英文版
推薦:為Win版本,支援程式碼提示!

MantisBT
Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

WebStorm Mac版
好用的JavaScript開發工具