MyBatis框架的入門

目錄

  • MyBatis
    • 第一章:框架的概述
      • 1. MyBatis框架的概述
    • 第二章:MyBatis的入門程序
      • 1. 創建數據庫和表結構
      • 2. MyBatis的入門步驟

MyBatis

第一章:框架的概述

1. MyBatis框架的概述

  1. MyBatis是一個優秀的基于Java的持久層框架,內部對JDBC做了封裝,使開發者只需要關注SQL語句,而不用關注JDBC的代碼,使開發變得更加的簡單。
  2. MyBatis通過XML或者注解的方式將要執行的各種Statement對象配置起來,通過Java對象和statement中SQL的動態參數進行映射,并最終執行SQL語句。執行SQL后,最終將結果已Java對象返回。
  3. 采用了ORM的思想。

第二章:MyBatis的入門程序

1. 創建數據庫和表結構

create database mybatis_db;
use mybatis_db;CREATE TABLE `user` (`id` int(11) NOT NULL auto_increment,`username` varchar(32) NOT NULL COMMENT '用戶名稱',`birthday` datetime default NULL COMMENT '生日',`sex` char(1) default NULL COMMENT '性別',`address` varchar(256) default NULL COMMENT '地址',PRIMARY KEY  (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;insert  into `user`(`id`,`username`,`birthday`,`sex`,`address`) values (1,'老王','2018-02-27 17:47:08','男','北京'),(2,'熊大','2018-03-02 15:09:37','女','上海'),(3,'熊二','2018-03-04 11:34:34','女','深圳'),(4,'光頭強','2018-03-04 12:04:06','男','廣州');

2. MyBatis的入門步驟

  1. 創建maven的項目,創建Java工程即可。

  2. 引入坐標

    1. 引入MyBatis的3.4.5的版本的坐標

    2. 引入MySQL驅動的jar包,5.1.6版本

    3. 引入Junit單元測試的jar包

    4. 引入log4j的jar包,1.2.12版本(需要引入log4j.properties的配置文件)

          <dependencies><!--mybatis核心包--><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.4.5</version></dependency><!--mysql驅動包--><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.6</version></dependency><!-- 單元測試 --><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.10</version><scope>test</scope></dependency><!-- 日志 --><dependency><groupId>log4j</groupId><artifactId>log4j</artifactId><version>1.2.17</version></dependency></dependencies>
      
  3. 編寫User的實現類,屬性盡量使用包裝類型,具體的代碼如下

    package cn.tx.domain;import java.io.Serializable;
    import java.util.Date;/***** */
    public class User implements Serializable{private static final long serialVersionUID = 525400707336671154L;private Integer id;private String username;private Date birthday;private String sex;private String address;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 Date getBirthday() {return birthday;}public void setBirthday(Date birthday) {this.birthday = birthday;}public String getSex() {return sex;}public void setSex(String sex) {this.sex = sex;}public String getAddress() {return address;}public void setAddress(String address) {this.address = address;}@Overridepublic String toString() {return "User{" +"id=" + id +", username='" + username + '\'' +", birthday=" + birthday +", sex='" + sex + '\'' +", address='" + address + '\'' +'}';}
    }
    
  4. 編寫UserMapper的接口和方法(就是咱們以前的UserDao接口)

    package cn.tx.mapper;import java.util.List;
    import cn.tx.domain.User;public interface UserMapper {/*** 查詢所有的用戶* @return*/public List<User> findAll();}
    
  5. 在resources目錄下,創建mapper文件夾。編寫UserMapper.xml的配置文件,導入約束文件。

    <?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.qcbyjy.mapper.UserMapper"><select id="findAll" resultType="com.qcbyjy.domain.User">select * from user;</select>
    </mapper>
    
    1. mapper namespace=“com.qcbyjy.mapper.UserMapper”,叫名稱空間,表明以后查找UserMapper接口中的findAll的方法。
    2. select id="findAll"中的id屬性編寫的UserMapper接口中的方法的名稱,固定的。
    3. resultType="com.qcbyjy.domain.User"表明的是findAll方法的返回值類型。
  6. 編寫主配置文件,在resources目錄下創建SqlMapConfig.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><!-- 配置環境們 --><environments default="mysql"><!-- 配置具體的環境 --><environment id="mysql"><!-- 配置事務管理類型 --><transactionManager type="JDBC"/><!-- 配置是否需要使用連接池,POOLED使用,UNPOOLED不使用 --><dataSource type="POOLED"><property name="driver" value="com.mysql.jdbc.Driver"/><property name="url" value="jdbc:mysql:///mybatis_db"/><property name="username" value="root"/><property name="password" value="root"/></dataSource></environment></environments><!-- 加載映射的配置文件 --><mappers><mapper resource="mappers/UserMapper.xml"/></mappers>
    </configuration>
    

    1.配置環境(environments)

    default=“mysql”:指定默認使用的數據庫環境。

    子標簽 定義了名為 mysql 的環境。

    transactionManager type=“JDBC”:聲明使用 JDBC 事務管理方式。

    配置數據源,類型為連接池(POOLED)。

    包括數據庫驅動類、連接 URL、用戶名和密碼。

    2.加載映射文件(mappers)

    :加載位于 resources/mappers/ 目錄下的 UserMapper.xml 文件,定義 SQL 語句和接口映射關系

  7. 編寫入門程序

    1.加載配置文件

    使用 MyBatis 提供的 Resources 工具類加載 SqlMapConfig.xml。

    2.構建 SqlSessionFactory

    通過 SqlSessionFactoryBuilder 構建 SqlSessionFactory 工廠,用于創建 SqlSession。

    3.獲取 SqlSession

    調用 openSession() 方法創建 SqlSession,用于執行 SQL 語句。

    4.調用 Mapper 接口

    使用 getMapper(UserMapper.class) 獲取 UserMapper 接口的動態代理對象。

    調用 findAll() 方法執行 SQL 查詢。

    5.輸出結果

    遍歷查詢結果,打印用戶信息。

    6.釋放資源

    關閉 SqlSession 和 InputStream,避免資源泄漏。

    package cn.tx.test;import java.io.InputStream;
    import java.util.List;import org.apache.ibatis.io.Resources;
    import org.apache.ibatis.session.SqlSession;
    import org.apache.ibatis.session.SqlSessionFactory;
    import org.apache.ibatis.session.SqlSessionFactoryBuilder;
    import org.junit.Test;import cn.tx.domain.User;
    import cn.tx.mapper.UserMapper;public class UserTest {/*** 測試查詢所有的方法* @throws Exception */@Testpublic void testFindAll() throws Exception {// 加載主配置文件,目的是構建SqlSessionFactory的對象InputStream in = Resources.getResourceAsStream("SqlMapConfig.xml");// 創建SqlSessionFactory對象SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in);// 使用SqlSessionFactory工廠對象創建SqlSession對象SqlSession session = factory.openSession();// 通過session創建UserMapper接口的代理對象UserMapper mapper = session.getMapper(UserMapper.class);// 調用查詢所有的方法List<User> list = mapper.findAll();// 遍歷集合for (User user : list) {System.out.println(user);}// 釋放資源session.close();in.close();}@Testpublic void run2() throws Exception {// 加載配置文件InputStream inputStream = Resources.getResourceAsStream("SqlMapConfig.xml");// 構建SqlSessionFactory對象SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(inputStream);// 獲取到session對象SqlSession session = factory.openSession();// 查詢所有的數據List<User> list = session.selectList("com.qcbyjy.mapper.UserMapper.findAll");// 變量集合for (User user : list) {System.out.println(user);}// 關閉資源session.close();inputStream.close();} 
    }
    

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/63250.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/63250.shtml
英文地址,請注明出處:http://en.pswp.cn/web/63250.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

rust的axux框架開啟負載均衡和重啟自身的方法-會議簽到的調優

開啟負載均衡和重啟自身 更換axum后臺的意外解決的嘗試在caddy反代,使用負載均衡,加多一個節點axum主程序 ip映射信息做全局共享axum重啟自身刷新全局共享配置 前期剛實現了rust的后臺關鍵業務.結果出現了兩類大問題停止服務.在正用著的時候,出現很多意外,真是刺激… 更換axum…

深入理解數據庫索引:原理、分類與優化

目錄 1. 索引基礎1.1 索引的工作原理 2. 最左匹配原則2.1 什么是最左匹配原則&#xff1f;2.2 示例說明2.3 最左匹配原則的圖示 3. 索引分類3.1 按數據結構分類3.2 按索引列數分類3.3 按唯一性分類3.4 按存儲方式分類 4. 聚集索引與非聚集索引的區別4.1 聚集索引4.2 非聚集索引…

Three.js相機Camera控件知識梳理

原文&#xff1a;https://juejin.cn/post/7231089453695238204?searchId20241217193043D32C9115C2057FE3AD64 1. 相機類型 Three.js 主要提供了兩種類型的相機&#xff1a;正交相機&#xff08;OrthographicCamera&#xff09;和透視相機&#xff08;PerspectiveCamera&…

Bernstein-type inequality (BTI)

參見論文&#xff1a; Dual-Functional Artificial Noise (DFAN) Aided Robust Covert Communications in Integrated Sensing and Communications 理論 \boxed{} ?用于加框 Lemma 2. (BTI): For any A ∈ C N N \mathbf{A} \in\mathbb{C}^{N\times N} A∈CNN, b ∈ C N …

一條線上的點

給你一個數組 points &#xff0c;其中 points[i] [xi, yi] 表示 X-Y 平面上的一個點。求最多有多少個點在同一條直線上。 提示&#xff1a; 1 < points.length < 300points[i].length 2-104 < xi, yi < 104points 中的所有點 互不相同 解析&#xff1a;使用斜…

XX服務器上的npm不知道咋突然壞了

收到同事的V&#xff0c;說是&#xff1a;182上的npm不知道咋突然壞了&#xff0c;查到這里了&#xff0c;不敢動了。 咱一定要抓重點&#xff1a;突然壞了。這里的突然肯定不是瞬間&#xff08;大概率是上次可用&#xff0c;這次不可用&#xff0c;中間間隔了多長時間&#x…

GNSS定位局限性與綜合PNT及5G定位技術研究

摘要 本文主要介紹了GNSS定位技術的系統組成與原理、發展歷程、應用領域及現狀&#xff0c;并分析了其存在的局限性&#xff0c;如信號遮擋、多路徑效應、大氣層干擾等。文章還探討了綜合PNT技術的體系架構、多源信息融合方法以及智能化算法在PNT中的應用&#xff0c;強調了綜…

/hbase/oldWALs 文件

/hbase/oldWALs 是 HBase 中的一個目錄&#xff0c;用于存儲那些不再需要用于恢復目的的 WAL&#xff08;Write-Ahead Log&#xff09;文件。這些文件在 HBase 確認所有的數據都已經從 MemStore 持久化到 HFile 之后&#xff0c;會被移動到這個目錄。 /hbase/oldWALs 目錄中的…

HALCON 算子 之 形態學操作算子

文章目錄 什么是形態學操作&#xff1f;為什么要形態學操作&#xff1f;怎么形態學操作&#xff1f;腐蝕 —— Erosionerosion1erosion_circle&#xff1a;erosion_rectangle1&#xff1a; 膨脹 —— Dilationdilation1dilation_circledilation_rectangle1 打開 —— Openingop…

[金盾杯 2024] PWN 復現

好長時間不作題了&#xff0c;在復現平臺上看到這個比賽&#xff0c;作了一下&#xff0c;題過于簡單了。不過密碼一言難盡。 Orange 要說libc-2.23有多老&#xff0c;我一開始學PWN的時候還有不少&#xff0c;這兩年幾乎不見了。一些比賽估計是拿的舊題。 遠看像個堆題&…

pytest入門九:feature

fixture是pytest特有的功能&#xff0c;用以在測試執行前和執行后進行必要的準備和清理工作。使用pytest.fixture標識&#xff0c;定義在函數前面。在你編寫測試函數的時候&#xff0c;你可以將此函數名稱做為傳入參數&#xff0c;pytest將會以依賴注入方式&#xff0c;將該函數…

uniapp Vue3 語法實現瀏覽器中音頻錄制、停止、保存、播放、轉碼、實時音頻輸出

一、引言 在現代 Web 應用開發中,音頻處理功能變得越來越重要。本文將詳細介紹如何使用 uniapp 結合 Vue3 語法在瀏覽器環境中實現音頻錄制、停止、保存、播放、轉碼以及實時音頻輸出等一系列功能。通過深入剖析代碼結構和功能實現細節,幫助讀者全面理解和掌握相關技術,以便…

【jpa】會什么jpa會自動新建一個hibernate_sequence表

目錄 1. 說明2. 主鍵生成策略3. hibernate_sequence表的創建4. 如何避免自動創建hibernate_sequence表 1. 說明 1.JPA&#xff08;Java Persistence API&#xff09;在默認情況下&#xff0c;如果使用Hibernate作為持久化框架&#xff0c;并且沒有顯式指定主鍵生成策略&#x…

秒優科技-供應鏈管理系統 login/doAction SQL注入漏洞復現

0x01 產品簡介 秒優科技提供的供應鏈管理系統,即秒優SCM服裝供應鏈管理系統,是一款專為服裝電商企業設計的全方位解決方案。是集款式研發、訂單管理、物料管理、生產管理、工藝管理、收發貨管理、賬單管理、報表管理于一體的服裝電商供應鏈管理解決方案。它涵蓋了從企劃到開…

【TF-IDF】Hugging Face Model Recommendation System

利用了機器學習技術的模型檢索 TF-IDF (Term Frequency-Inverse Document Frequency) 文本特征提取例子This project is a Hugging Face Model Recommendation System designed to assist users in discovering the most suitable models based on their task descriptions. Th…

136.WEB滲透測試-信息收集-小程序、app(7)

免責聲明&#xff1a;內容僅供學習參考&#xff0c;請合法利用知識&#xff0c;禁止進行違法犯罪活動&#xff01; 內容參考于&#xff1a; 易錦網校會員專享課 上一個內容&#xff1a;135.WEB滲透測試-信息收集-小程序、app&#xff08;6&#xff09; 進入之后我們通過輸入…

samout llm解碼 幻覺更低更穩定

這段代碼定義了一個簡單的對話生成系統&#xff0c;包括模型加載、詞匯表加載、以及基于給定提示生成文本的功能。下面是對代碼的解析&#xff1a; load_model_and_voc(device"cpu"): 該函數用于加載預訓練的模型和詞匯表&#xff08;vocabulary&#xff09;。它首先…

K近鄰原理和距離

K近鄰 基本思想歐氏距離算法流程代碼基于近鄰用戶的協同過濾基于近鄰物品的協同過濾杰卡德相似度 基本思想 我們根據涂色樣本點和未涂色樣本點 X 的距離給涂色樣本點編號1-6&#xff0c;即&#xff1a;1號樣本點距離X最近&#xff0c;其余次之。 那么問題來了&#xff1a;樣本…

Transformer 中 Self-Attention 的二次方復雜度(Quadratic Complexity )問題及改進方法:中英雙語

Transformer 中 Self-Attention 的二次方復雜度問題及改進方法 隨著大型語言模型&#xff08;LLM&#xff09;輸入序列長度的增加&#xff0c;Transformer 結構中的核心模塊——自注意力機制&#xff08;Self-Attention&#xff09; 的計算復雜度和內存消耗都呈現二次方增長。…

模型 A/B測試(科學驗證)

系列文章 分享 模型&#xff0c;了解更多&#x1f449; 模型_思維模型目錄。控制變量法。 1 A/B測試的應用 1.1 Electronic Arts&#xff08;EA&#xff09;《模擬城市》5游戲網站A/B測試 定義目標&#xff1a; Electronic Arts&#xff08;EA&#xff09;在發布新版《模擬城…