Java MyBatis框架環境搭建詳解
一、MyBatis簡介
1、MyBatis歷史
MyBatis最初是Apache的一個開源項目iBatis, 2010年6月這個項目由Apache Software Foundation遷移到瞭Google Code。隨著開發團隊轉投Google Code旗下, iBatis3.x正式更名為MyBatis。代碼於2013年11月遷移到Github。iBatis一詞來源於“internet”和“abatis”的組合,是一個基於Java的持久層框架。 iBatis提供的持久層框架包括SQL Maps和Data Access Objects(DAO)。
2、MyBatis特性
1) MyBatis 是支持定制化 SQL、存儲過程以及高級映射的優秀的持久層框架
2) MyBatis 避免瞭幾乎所有的 JDBC 代碼和手動設置參數以及獲取結果集
3) MyBatis可以使用簡單的XML或註解用於配置和原始映射,將接口和Java的POJO(Plain Old JavaObjects,普通的Java對象)映射成數據庫中的記錄
4) MyBatis 是一個 半自動的ORM(Object Relation Mapping)框架
3、MyBatis下載
MyBatis下載地址:https://github.com/mybatis/mybatis-3
4、和其它持久化層技術對比
JDBC
- SQL 夾雜在Java代碼中耦合度高,導致硬編碼內傷
- 維護不易且實際開發需求中 SQL 有變化,頻繁修改的情況多見
- 代碼冗長,開發效率低
Hibernate 和 JPA
- 操作簡便,開發效率
- 高程序中的長難復雜 SQL 需要繞過框架
- 內部自動生產的 SQL,不容易做特殊優化
- 基於全映射的全自動框架,大量字段的 POJO 進行部分映射時比較困難。
- 反射操作太多,導致數據庫性能下降
MyBatis
- 輕量級,性能出色
- SQL 和 Java 編碼分開,功能邊界清晰。Java代碼專註業務、SQL語句專註數據
- 開發效率稍遜於HIbernate,但是完全能夠接受
二、搭建MyBatis
1、開發環境
IDE:idea 2019.2
構建工具:maven 3.5.4
MySQL版本:MySQL 5.7
MyBatis版本:MyBatis 3.5.7
MySQL 不同版本的註意事項
1 、驅動類 driver-class-name
MySQL 5 版本使用 jdbc5 驅動,驅動類使用: com.mysql.jdbc.Driver
MySQL 8 版本使用 jdbc8 驅動,驅動類使用: com.mysql.cj.jdbc.Driver
2 、連接地址 url
MySQL 5 版本的 url :
jdbc:mysql://localhost:3306/ssm
MySQL 8 版本的 url :
jdbc:mysql://localhost:3306/ssm?serverTimezone=UTC
否則運行測試用例報告如下錯誤:
java.sql.SQLException: The server time zone value 'Öйú±ê׼ʱ¼ä' is unrecognized or
represents more
2、創建maven工程
a>打包方式:jar
b>引入依賴
<dependencies> <!-- Mybatis核心 --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.5.7</version> </dependency> <!-- junit測試 --> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <scope>test</scope> </dependency> <!-- MySQL驅動 --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.3</version> </dependency> </dependencies>
3、創建MyBatis的核心配置文件
習慣上命名為mybatis-config.xml,這個文件名僅僅隻是建議,並非強制要求。將來整合Spring之後,這個配置文件可以省略,所以大傢操作時可以直接復制、粘貼。
核心配置文件主要用於配置連接數據庫的環境以及MyBatis的全局配置信息
核心配置文件存放的位置是src/main/resources目錄下
提示:
下面的 username 和 password 為mysql的賬號密碼 根據自身實際情況進行改寫
<?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:3306/ssm? serverTimezone=UTC"/> <property name="username" value="root"/> <property name="password" value="root"/> </dataSource> </environment> </environments> <!--引入映射文件--> <mappers> <mapper resource="mappers/UserMapper.xml"/> </mappers> </configuration>
4、創建mapper接口
MyBatis中的mapper接口相當於以前的dao。但是區別在於,mapper僅僅是接口,我們不需要提供實現類。
先創建用戶類 類中屬性 與 數據庫中的字段對應
User類裡面的代碼:
public class User { private Integer id; private String username; private String password; private Integer age; private String sex; private String email; public User() { } public User(Integer id, String username, String password, Integer age, String sex, String email) { this.id = id; this.username = username; this.password = password; this.age = age; this.sex = sex; this.email = email; } public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } @Override public String toString() { return "User{" + "id=" + id + ", username='" + username + '\'' + ", password='" + password + '\'' + ", age=" + age + ", sex='" + sex + '\'' + ", email='" + email + '\'' + '}'; } }
創建UserMapper接口
public interface UserMapper { /*** 添加用戶信息 */ int insertUser(); }
5、創建MyBatis的映射文件
相關概念:ORM(Object Relationship Mapping)對象關系映射。
對象:Java的實體類對象
關系:關系型數據庫
映射:二者之間的對應關系
Java概念 | 數據庫概念 |
類 | 表 |
屬性 | 字段/列 |
對象 | 記錄/行 |
1 、映射文件的命名規則:
表所對應的實體類的類名 +Mapper.xml
例如:表 t_user ,映射的實體類為 User ,所對應的映射文件為 UserMapper.xml
因此一個映射文件對應一個實體類,對應一張表的操作
MyBatis 映射文件用於編寫 SQL ,訪問以及操作表中的數據
MyBatis 映射文件存放的位置是 src/main/resources/mappers 目錄下
2 、 MyBatis 中可以面向接口操作數據,要保證兩個一致:
a>mapper 接口的全類名和映射文件的命名空間( namespace )保持一致
b>mapper 接口中方法的方法名和映射文件中編寫 SQL 的標簽的 id 屬性保持一致
<?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.atguigu.mybatis.mapper.UserMapper"> <!--int insertUser();--> <insert id="insertUser"> insert into t_user values(null,'張三','123',23,'女') </insert> </mapper>
6、通過junit測試功能
//讀取MyBatis的核心配置文件 InputStream is = Resources.getResourceAsStream("mybatis-config.xml"); //創建SqlSessionFactoryBuilder對象 SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder(); //通過核心配置文件所對應的字節輸入流創建工廠類SqlSessionFactory,生產SqlSession對象 SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(is); //創建SqlSession對象,此時通過SqlSession對象所操作的sql都必須手動提交或回滾事務 //SqlSession sqlSession = sqlSessionFactory.openSession(); //創建SqlSession對象,此時通過SqlSession對象所操作的sql都會自動提交 S qlSession sqlSession = sqlSessionFactory.openSession(true); //通過代理模式創建UserMapper接口的代理實現類對象 UserMapper userMapper = sqlSession.getMapper(UserMapper.class); //調用UserMapper接口中的方法,就可以根據UserMapper的全類名匹配元素文件,通過調用的方法名匹配 映射文件中的SQL標簽,並執行標簽中的SQL語句 int result = userMapper.insertUser(); //sqlSession.commit();
- SqlSession:代表Java程序和數據庫之間的會話。(HttpSession是Java程序和瀏覽器之間的會話)
- SqlSessionFactory:是“生產”SqlSession的“工廠”。
- 工廠模式:如果創建某一個對象,使用的過程基本固定,那麼我們就可以把創建這個對象的相關代碼封裝到一個“工廠類”中,以後都使用這個工廠類來“生產”我們需要的對象。
7、加入log4j日志功能
a>加入依賴
<!-- log4j日志 --> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.17</version> </dependency>
b>加入log4j的配置文件
log4j的配置文件名為log4j.xml,存放的位置是src/main/resources目錄下
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE log4j:configuration SYSTEM "log4j.dtd"> <log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/"> <appender name="STDOUT" class="org.apache.log4j.ConsoleAppender"> <param name="Encoding" value="UTF-8"/> <layout class="org.apache.log4j.PatternLayout"> <param name="ConversionPattern" value="%-5p %d{MM-dd HH:mm:ss,SSS} %m (%F:%L) \n"/> </layout> </appender> <logger name="java.sql"> <level value="debug"/> </logger> <logger name="org.apache.ibatis"> <level value="info"/> </logger> <root> <level value="debug"/> <appender-ref ref="STDOUT"/> </root> </log4j:configuration>
日志的級別
FATAL(致命)>ERROR(錯誤)>WARN(警告)>INFO(信息)>DEBUG(調試)
從左到右打印的內容越來越詳細
到此這篇關於Java MyBatis框架環境搭建詳解的文章就介紹到這瞭,更多相關Java MyBatis框架內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!
推薦閱讀:
- Java Mybatis框架增刪查改與核心配置詳解流程與用法
- mybatis新手快速入門以及一些錯誤匯總
- SpringBoot MyBatis簡單快速入門例子
- 一文詳解Mybatis-plus的介紹與使用
- Spring整合Mybatis思路梳理總結