目錄
一.mybatis的簡介
二.MyBatis的環境搭建
????????2.1 導入pom依賴
????????2.2 數據庫文件導入連接
? ? ? ? ?2.3 修改web.xml文件
? ? ? ? 2.4 安裝插件
? ? ? ? 2.5 配置文件
? ? ? ? ? ? ? ? 2.5.1?mybatis.cfg.xml文件
? ? ? ? ? ? ? ??2.5.2?generatorConfig.xml文件
?2.6 最后測試生成代碼
三.MyBatis的增刪改查
? ? ? ?? 3.1? ? 寫service類,
3.2 工具類
3.3 模擬數據測試結果
一.mybatis的簡介
????????MyBatis是一種持久層框架(orm框架),用于將Java對象映射到數據庫表中。它提供了一種簡單的方式來執行數據庫操作,例如查詢、插入、更新和刪除。
MyBatis通過將SQL語句和Java代碼分離來實現數據訪問層的解耦。它使用XML或注解來描述數據庫操作,并提供了豐富的API來執行這些操作。
MyBatis的核心原理是通過配置文件或注解將Java對象和數據庫表進行映射。它還支持事務管理、緩存機制和動態SQL等高級功能,使得開發者能夠更加方便地進行數據庫操作。
它能夠簡化數據庫訪問的開發工作,提高代碼的可讀性和可維護性。無論是小型項目還是大型企業級應用,MyBatis都是一個值得考慮的選擇。
????優點介紹:
1. 簡單易用:MyBatis使用簡單直觀的API和配置文件,使得開發人員能夠快速上手并進行數據庫操作。
2. 靈活性:MyBatis允許開發人員編寫自定義的SQL語句,以滿足各種復雜的查詢需求。同時,它也支持動態SQL,可以根據不同的條件生成不同的SQL語句。
3. 易于調試:MyBatis可以將執行的SQL語句輸出到日志中,方便開發人員進行調試和性能優化。 4. 緩存支持:MyBatis支持一級緩存和二級緩存,可以提高數據庫訪問的性能。
5. 支持多種數據庫:MyBatis支持多種主流數據庫,包括MySQL、Oracle、SQL Server等,方便開發人員在不同的項目中使用。
6. 與Java對象的映射:MyBatis使用XML或注解來描述Java對象與數據庫表的映射關系,使得開發人員可以通過簡單的配置實現對象與表之間的轉換。
二.MyBatis的環境搭建
? ? ? ? 使用框架的步驟:導入pom依賴,配置xml文件,
????????2.1 導入pom依賴
? ? ? ? 這里所有完整版的,去maven官網下載即可
<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.zking</groupId><artifactId>mybatis01</artifactId><version>1.0-SNAPSHOT</version><packaging>war</packaging><name>mybatis01 Maven Webapp</name><!-- FIXME change it to the project's website --><url>http://www.example.com</url><properties><maven.compiler.source>1.8</maven.compiler.source><maven.compiler.target>1.8</maven.compiler.target></properties><dependencies><!-- ********************** junit單元測試依賴 ********************** --><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version><scope>test</scope></dependency><!-- ********************** Java Servlet API ********************** --><dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><version>4.0.0</version><scope>provided</scope></dependency><!-- ********************** Mybatis依賴 ********************** --><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.4.5</version></dependency><!-- ********************** Mysql JDBC驅動 ********************** --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.44</version></dependency><!-- ********************** 日志配置 ********************** --><!--記得修改mybatis.cfg.xml添加如下內容--><!--<setting name="logImpl" value="LOG4J2"/>--><!--核心log4j2jar包--><dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-core</artifactId><version>2.9.1</version></dependency><dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-api</artifactId><version>2.9.1</version></dependency><!--web工程需要包含log4j-web,非web工程不需要--><dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-web</artifactId><version>2.9.1</version></dependency></dependencies><build><finalName>mybatis01</finalName><resources><!--解決mybatis-generator-maven-plugin運行時沒有將XxxMapper.xml文件放入target文件夾的問題--><resource><directory>src/main/java</directory><includes><include>**/*.xml</include></includes></resource><!--解決mybatis-generator-maven-plugin運行時沒有將jdbc.properites文件放入target文件夾的問題--><resource><directory>src/main/resources</directory><includes><include>jdbc.properties</include><include>*.xml</include></includes></resource></resources><plugins><plugin><groupId>org.mybatis.generator</groupId><artifactId>mybatis-generator-maven-plugin</artifactId><version>1.3.2</version><dependencies><!--使用Mybatis-generator插件不能使用太高版本的mysql驅動 --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.44</version></dependency></dependencies><configuration><overwrite>true</overwrite></configuration></plugin><plugin><artifactId>maven-clean-plugin</artifactId><version>3.1.0</version></plugin><!-- see http://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_war_packaging --><plugin><artifactId>maven-resources-plugin</artifactId><version>3.0.2</version></plugin><plugin><artifactId>maven-compiler-plugin</artifactId><version>3.8.0</version></plugin><plugin><artifactId>maven-surefire-plugin</artifactId><version>2.22.1</version></plugin><plugin><artifactId>maven-war-plugin</artifactId><version>3.2.2</version></plugin><plugin><artifactId>maven-install-plugin</artifactId><version>2.5.2</version></plugin><plugin><artifactId>maven-deploy-plugin</artifactId><version>2.8.2</version></plugin></plugins></build>
</project>
????????2.2 數據庫文件導入連接
? ? ? ? ?2.3 修改web.xml文件
?
? ? ? ? 2.4 安裝插件
????????安裝以下插件
????????????????Free mybatis plugin:
????????????????????????有以下作用:? 1.注解支持?
????????????????????????????????????????????????2.XML映射文件支持?
????????????????????????????????????????????????3. SQL語句智能提示 ?
????????????????????????????????????????????????4. 代碼生成器?
????????????????????????????????????????????????5. 數據庫連接和查詢
Free MyBatis Plugin通過提供豐富的功能和工具,簡化了? MyBatis開發過程中的各種操作,提高了開發效率和代碼質量。
????????????????Mybatis generator:
? ? ? ? ? ? ? ? ? ? ? 有以下作用:1. 自動生成實體類
??????????????????????????????????????????? 2. 自動生成Mapper接口(包含了常用的增刪改查方法)
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 3. 生成XML映射文件(包含SQL語句的定義和參數映射關系)
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 4. 生成的代碼可自定義
MyBatis Generator可以根據數據庫表結構自動生成CRUD代碼,減少手動編寫重復代碼的工作量,提高開發效率和代碼質量。同時,生成的代碼可根據需求進行自定義修改和擴展,以滿足具體的業務需求
????????????????mybatis tools:
? ? ? ? ? ? ? ? ? ? ? ? ? ? 有以下作用:1. 代碼生成(生成對應的實體類、Mapper接口和XML映射)
??????????????????????????????????????????????????2. SQL語句編輯和調試
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??3. SQL語句執行和結果查看
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 4. 自動生成SQL語句
MyBatis Tools是一個集成在IDE中的插件,提供了一系列輔助開發的功能,如代碼生成、SQL語句編輯和調試、SQL語句執行和結果查看等
????????????????maven helper :
? ? ? ? ? ? ? ? ? ? ? ? ? ?有以下作用:1. 依賴架包分析
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?2. 快速搜索依賴
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?3. 優化依賴
?????????????????????????????????????????????????4. 自動導入依賴
????????????????幫助開發人員更方便地管理和調試 Maven 項目。
點擊File--->點擊setting--->點擊Plugins---->搜索框輸入下載
?下載之后重寫啟動軟件
重啟之后,就變成這樣,已下載即可
?
? ? ? ? 2.5 配置文件
? ? ? ? ? ? ? ? 2.5.1?mybatis.cfg.xml文件
? ? ? 關于數據庫的連接?
<?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><!-- 引入外部配置文件 --><properties resource="jdbc.properties"/><settings><setting name="logImpl" value="LOG4J2"/></settings><!-- 別名 --><typeAliases><!--<typeAlias type="com.javaxl.model.Book" alias="Book"/>--></typeAliases><!-- 配置mybatis運行環境 --><environments default="development"><environment id="development"><!-- type="JDBC" 代表使用JDBC的提交和回滾來管理事務 --><transactionManager type="jdbc"/><!-- mybatis提供了3種數據源類型,分別是:POOLED,UNPOOLED,JNDI --><!-- POOLED 表示支持JDBC數據源連接池 --><!-- UNPOOLED 表示不支持數據源連接池 --><!-- JNDI 表示支持外部數據源連接池 --><dataSource type="POOLED"><property name="driver"value="${jdbc.driver}"/><property name="url"value="${jdbc.url}"/><property name="username" value="${jdbc.username}"/><property name="password" value="${jdbc.password}"/></dataSource></environment></environments><mappers><!--<mapper resource="com/javaxl/mapper/BookMapper.xml"/>--></mappers>
</configuration>
2.5.2?generatorConfig.xml文件
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE generatorConfiguration PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN""http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd" >
<generatorConfiguration><!-- 引入配置文件 --><properties resource="jdbc.properties"/><!-- 指定數據庫jdbc驅動jar包的位置 --><classPathEntry location="F:\\temp\\maven_repository\\mysql\\mysql-connector-java\\5.1.44\\mysql-connector-java-5.1.44.jar"/><!-- 一個數據庫一個context --><context id="infoGuardian"><!-- 注釋 --><commentGenerator><property name="suppressAllComments" value="true"/><!-- 是否取消注釋 --><property name="suppressDate" value="true"/><!-- 是否生成注釋代時間戳 --></commentGenerator><!-- jdbc連接 --><jdbcConnection driverClass="${jdbc.driver}" connectionURL="${jdbc.url}" userId="${jdbc.username}" password="${jdbc.password}"/><!-- 類型轉換 --><javaTypeResolver><!-- 是否使用bigDecimal, false可自動轉化以下類型(Long, Integer, Short, etc.) --><property name="forceBigDecimals" value="false"/></javaTypeResolver><!-- 01 指定javaBean生成的位置 --><!-- targetPackage:指定生成的model生成所在的包名 --><!-- targetProject:指定在該項目下所在的路徑 --><javaModelGenerator targetPackage="com.zking.model" targetProject="src/main/java"><!-- 是否允許子包,即targetPackage.schemaName.tableName --><property name="enableSubPackages" value="false"/><!-- 是否對model添加構造函數 --><property name="constructorBased" value="true"/><!-- 是否針對string類型的字段在set的時候進行trim調用 --><property name="trimStrings" value="false"/><!-- 建立的Model對象是否 不可改變 即生成的Model對象不會有 setter方法,只有構造方法 --><property name="immutable" value="false"/></javaModelGenerator><!-- 02 指定sql映射文件生成的位置 --><sqlMapGenerator targetPackage="com.zking.mapper" targetProject="src/main/java"><!-- 是否允許子包,即targetPackage.schemaName.tableName --><property name="enableSubPackages" value="false"/></sqlMapGenerator><!-- 03 生成XxxMapper接口 --><!-- type="ANNOTATEDMAPPER",生成Java Model 和基于注解的Mapper對象 --><!-- type="MIXEDMAPPER",生成基于注解的Java Model 和相應的Mapper對象 --><!-- type="XMLMAPPER",生成SQLMap XML文件和獨立的Mapper接口 --><javaClientGenerator targetPackage="com.zking.mapper" targetProject="src/main/java" type="XMLMAPPER"><!-- 是否在當前路徑下新加一層schema,false路徑com.oop.eksp.user.model, true:com.oop.eksp.user.model.[schemaName] --><property name="enableSubPackages" value="false"/></javaClientGenerator><!-- 配置表信息 --><!-- schema即為數據庫名 --><!-- tableName為對應的數據庫表 --><!-- domainObjectName是要生成的實體類 --><!-- enable*ByExample是否生成 example類 --><!-- <table schema="" tableName="t_book" domainObjectName="Book" --><!-- enableCountByExample="false" enableDeleteByExample="false" --><!-- enableSelectByExample="false" enableUpdateByExample="false"> --><!-- <!– 忽略列,不生成bean 字段 –> --><!-- <!– <ignoreColumn column="FRED" /> –> --><!-- <!– 指定列的java數據類型 –> --><!-- <!– <columnOverride column="LONG_VARCHAR_FIELD" jdbcType="VARCHAR" /> –> --><!-- </table> --><table schema="" tableName="t_mvc_book" domainObjectName="Book" enableCountByExample="false" enableDeleteByExample="false" enableSelectByExample="false" enableUpdateByExample="false"><!-- 忽略列,不生成bean 字段 --><!-- <ignoreColumn column="FRED" /> --><!-- 指定列的java數據類型 --><!-- <columnOverride column="LONG_VARCHAR_FIELD" jdbcType="VARCHAR" /> --></table></context>
</generatorConfiguration>
????????但是這里面的一些數據要根據自己情況而定,需要自行更改
jar包的位置
?路徑位置
SQL文件位置? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
Mapper接口名稱? ? ? ? ? ?? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
? ? ?數據庫表名 及實體類的名字? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??? ? ? ? ? ?
?
?
?2.6 最后測試生成代碼
? ? ? ? 可以看到,下面報錯了,沒有生成代碼成功,是因為版本原因,因為我的數據庫是 8.0的版本,現在要我將版本換成 5.7的版本
?換完之后,再次測試
?
?
?這樣,MyBatis的環境搭建就已經完美辣!!!
三.MyBatis的增刪改查
? ? ? ? ? ?3.1? ? 寫service類,
先定義一個接口 BookBiz
package com.zking.biz;import com.zking.model.Book;public interface BookBiz {int deleteByPrimaryKey(Integer bid);int insert(Book record);int insertSelective(Book record);Book selectByPrimaryKey(Integer bid);int updateByPrimaryKeySelective(Book record);int updateByPrimaryKey(Book record);
}
接著寫一個類實現BookBiz接口
package com.zking.biz;import com.sun.prism.impl.Disposer;
import com.zking.mapper.BookMapper;
import com.zking.model.Book;/*** @author yinzi* @create 2023-08-19 16:13*/
public class BookBizImpl implements BookBiz{private BookMapper bm;@Overridepublic int deleteByPrimaryKey(Integer bid) {return bm.deleteByPrimaryKey(bid);}@Overridepublic int insert(Book record) {return bm.insert(record);}@Overridepublic int insertSelective(Book record) {return bm.insertSelective(record);}@Overridepublic Book selectByPrimaryKey(Integer bid) {return bm.selectByPrimaryKey(bid);}@Overridepublic int updateByPrimaryKeySelective(Book record) {return bm.updateByPrimaryKeySelective(record);}@Overridepublic int updateByPrimaryKey(Book record) {return bm.updateByPrimaryKey(record);}
}
3.2 工具類
? ? ? ? 定義一個工廠類生成SqlSession
package com.zking.Utils;import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;/*** @author yinzi* @create 2023-08-19 16:22*/
public class SessionUtil {private static SqlSessionFactory sessionFactory;private static ThreadLocal<SqlSession> threadLocal = new ThreadLocal<SqlSession>();static {sessionFactory = new SqlSessionFactoryBuilder().build(SessionUtil.class.getResourceAsStream("/mybatis.cfg.xml"));}public static SqlSession openSession() {SqlSession session = threadLocal.get();if (null == session) {session = sessionFactory.openSession();threadLocal.set(session);}return session;}public static void main(String[] args) {SqlSession session = openSession();System.out.println(session.getConnection());session.close();
// System.out.println(session.getConnection());}
}
3.3 模擬數據測試結果
? ? ? ? 根據ID查詢
?
?刪除單個
?運行結果
?
今天介紹的內容就到這啦!!!