欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

MyBatis 如何簡化的 JDBC(思路詳解)

 更新時間:2023年03月21日 09:59:36   作者:腳踏實地的大夢想家  
MyBatis 是一個 持久層 框架,用于 簡化JDBC開發(fā),這篇文章主要介紹了MyBatis 如何簡化的 JDBC(思路詳解),需要的朋友可以參考下

MyBatis 作用

MyBatis 是一個 持久層 框架,用于 簡化JDBC開發(fā)

持久層:即負責將數(shù)據(jù)保存到數(shù)據(jù)庫的那一層代碼;

框架:半成品軟件,可重用、通用的、軟件基礎代碼模型;

簡化JDBC開發(fā):JDBC存在 硬編碼操作繁瑣 的缺點;

簡化JDBC開發(fā)

JDBC存在 硬編碼操作繁瑣 的缺點;

完整JDBC代碼

// 注冊驅動
Class.forName("com.mysql.jdbc.Driver");
// 獲取Connection連接
String url = "jdbc:mysql:///db1?useSSL=false";
String uname = "root";
String pwd="1234";
// 接收輸入的查詢條件
String gender = "男";
// 定義sql
String sql = "select * from tb_user where gender = ?";
// 獲取pstmt對象
PreparedStatement pstmt = conn.prepareStatement(sql);
//設置?的值
pstmt.setString(1,gender);
// 執(zhí)行sql
ResultSet rs = pstmt.executeQuery();
// 遍歷Result,獲取數(shù)據(jù)
User user = null;
ArrayList<User> users = new ArrayList<>();
while (rs.next()){
	// 獲取數(shù)據(jù)
	int id = rs.getInt("id");
	String username = rs.getString("username");
	String password = rs.getString("password");
	// 創(chuàng)建對象,設置屬性值
	user = new User();
	user.setId(id);
	user.setUsername(username);
	user.setPassword(password);
	user.setGender(gender);
	//裝入集合
	users.add(user);
}

硬編碼

上述代碼中,注冊驅動以及獲取連接部分,有很多將字符串信息寫到代碼中去,即為 硬編碼;

// 注冊驅動
Class.forName("com.mysql.jdbc.Driver");
// 獲取Connection連接
String url = "jdbc:mysql:///db1?useSSL=false";
String uname = "root";
String pwd="1234";

而若我們對字符串信息發(fā)生變動,比如更改密碼等,我們就需要改動編碼,然后重新編譯,重新打包,重新運行;如此來看,代碼維護性相當差。

包括下述 sql語句部分,我們會頻繁改動sql語句:

// 接收輸入的查詢條件
String gender = "男";
// 定義sql
String sql = "select * from tb_user where gender = ?";

每一次的改動都意味著大量的任務量。

操作繁瑣

而在后續(xù)的 手動設置參數(shù)手動封裝結果集 部分,JDBC的操作也是相當?shù)姆爆崱?/p>

手動設置參數(shù):

// 獲取pstmt對象
PreparedStatement pstmt = conn.prepareStatement(sql);
//設置?的值
pstmt.setString(1,gender);

手動封裝結果集:

// 遍歷Result,獲取數(shù)據(jù)
User user = null;
ArrayList<User> users = new ArrayList<>();
while (rs.next()){
	// 獲取數(shù)據(jù)
	int id = rs.getInt("id");
	String username = rs.getString("username");
	String password = rs.getString("password");
	// 創(chuàng)建對象,設置屬性值
	user = new User();
	user.setId(id);
	user.setUsername(username);
	user.setPassword(password);
	user.setGender(gender);
	//裝入集合
	users.add(user);
}

MyBatis 簡化思路

配置文件

針對JDBC中 硬編碼 問題,MyBatis 通過將字符串寫到 配置文件 中;

針對 注冊驅動以及獲取連接部分 配置信息案例:

<!-- 連接池 -->
<dataSource type="POOLED">
	<property name="driver" value="com.mysql.jdbc.Driver"/>
	<property name="url" value="jdbc:mysql:///db1?useSSL=false"/>
	<property name="username" value="root"/>
	<property name="password" value="1234"/>
</dataSource>

<!-- 連接池 -->
<dataSource type="POOLED">
	<property name="driver" value="com.mysql.jdbc.Driver"/>
	<property name="url" value="jdbc:mysql:///db1?useSSL=false"/>
	<property name="username" value="root"/>
	<property name="password" value="1234"/>
</dataSource>

針對 sql語句部分 配置信息案例:

<select id="selectByGender" parameterType="string" resultType="com.xuhongduo.pojo.User">
	select * from tb_user where gender = #{gender};
</select>

自動完成

針對JDBC中 操作繁瑣 問題,MyBatis 嘗試 自動完成;

List<User> users = sqlSession.selectList("test.selectByGender", "男")

一行代碼搞定 手動設置參數(shù)手動封裝結果集 部分;

補充:Mybatis是如何簡化JDBC代碼的

MyBatis 主要是通過將 JDBC 的一些重復性、繁瑣性的代碼進行封裝和抽象化,從而簡化了原來 JDBC 代碼的一些部分,具體來說,它主要簡化了以下幾個方面的代碼:

數(shù)據(jù)庫連接和資源的管理

在 JDBC 中,每次進行數(shù)據(jù)庫操作都需要手動獲取連接、創(chuàng)建 Statement 或者 PreparedStatement、執(zhí)行 SQL 語句、處理結果集,并且需要手動關閉連接和釋放資源。而在 MyBatis 中,這些步驟都被封裝在 SqlSession 中,開發(fā)者只需要通過 SqlSession 獲取 Mapper 接口對象,然后調用方法即可。

// 原始 JDBC 代碼
Connection conn = DriverManager.getConnection(url, username, password);
PreparedStatement stmt = conn.prepareStatement("SELECT * FROM users WHERE name = ?");
stmt.setString(1, "Tom");
ResultSet rs = stmt.executeQuery();
while (rs.next()) {
    int id = rs.getInt("id");
    String name = rs.getString("name");
    int age = rs.getInt("age");
    // ...
}
rs.close();
stmt.close();
conn.close();

// MyBatis 代碼
SqlSession sqlSession = sqlSessionFactory.openSession();
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
List<User> users = userMapper.findUsersByName("Tom");
sqlSession.close();

SQL 語句的編寫和處理

在 JDBC 中,SQL 語句通常以字符串的形式直接寫在代碼中,不利于維護和調試,并且容易受到 SQL 注入等安全問題的影響。而在 MyBatis 中,SQL 語句通過 XML 或注解的形式進行編寫和處理,可以更加靈活和方便地管理 SQL 語句,并且可以使用動態(tài) SQL、命名參數(shù)等功能。

// 原始 JDBC 代碼
PreparedStatement stmt = conn.prepareStatement("SELECT * FROM users WHERE name = ?");
stmt.setString(1, "Tom");

// MyBatis XML 代碼
<select id="findUsersByName" parameterType="String" resultType="User">
    SELECT * FROM users WHERE name = #{name}
</select>

// MyBatis 注解代碼
@Select("SELECT * FROM users WHERE name = #{name}")
List<User> findUsersByName(@Param("name") String name);

結果集的映射

在 JDBC 中,將查詢結果集映射到 Java 對象通常需要手動進行一些處理,例如通過 ResultSet.getXXX() 方法獲取每個字段的值,然后手動設置到 Java 對象中。而在 MyBatis 中,可以通過配置 resultMap 或使用注解等方式將查詢結果集映射到 Java 對象中,大大簡化了代碼。

// 原始 JDBC 代碼
ResultSet rs = stmt.executeQuery();
List<User> users = new ArrayList<>();
while (rs.next()) {
    User user = new User();
    user.setId(rs.getInt("id"));
    user.setName(rs.getString("name"));
    user.setAge(rs.getInt("age"));
    users.add(user);
}

// MyBatis XML 代碼
<resultMap id="userMap" type="User">
    <id property="id" column="id"/>
    <result property="name" column="name"/>
    <result property="age" column="age"/>
</resultMap>
// MyBatis 注解代碼
@Results({
@Result(property = "id", column = "id"),
@Result(property = "name", column = "name"),
@Result(property = "age", column = "age")
})
List<User> findUsersByName(@Param("name") String name);

通過以上三個方面的簡化,MyBatis 提高了代碼的可讀性、可維護性和可擴展性,使得開發(fā)者可以更加專注于業(yè)務邏輯的實現(xiàn),而不需要過多關注底層的數(shù)據(jù)庫訪問細節(jié)。

到此這篇關于MyBatis 怎樣簡化的 JDBC的文章就介紹到這了,更多相關MyBatis 簡化 JDBC內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 使用java的milo框架訪問OPCUA服務的過程

    使用java的milo框架訪問OPCUA服務的過程

    這篇文章主要介紹了使用java的milo框架訪問OPCUA服務的方法,本次采用KEPServerEX5模擬服務端,使用milo開發(fā)的程序作為客戶端,具體操作使用過程跟隨小編一起看看吧
    2022-01-01
  • springboot使用hibernate validation對參數(shù)校驗的實現(xiàn)方法

    springboot使用hibernate validation對參數(shù)校驗的實現(xiàn)方法

    這篇文章主要介紹了spring-boot 使用hibernate validation對參數(shù)進行優(yōu)雅的校驗,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-12-12
  • 利用Java實現(xiàn)mTLS調用

    利用Java實現(xiàn)mTLS調用

    這篇文章主要介紹使用 Java作為客戶端 與受 mTLS 保護的服務交互。為了對我們的 Java 客戶端進行 ssl 配置,我們需要先設置一個 SSLContext。這簡化了事情,因為 SSLContext 可用于各種 http 客戶端,接下來我們一起進入下面文章了解具體內容,需要的朋友可以參考一下
    2021-11-11
  • JVM完全解讀之Metaspace解密源碼分析

    JVM完全解讀之Metaspace解密源碼分析

    通過這篇文章,你將可以了解到,為什么會有metaspace?metaspace的組成,metaspace的VM參數(shù),jstat里我們應該關注metaspace的哪些值,有需要的朋友可以借鑒參考下
    2022-01-01
  • Java實現(xiàn)加鹽加密算法的示例詳解

    Java實現(xiàn)加鹽加密算法的示例詳解

    這篇文章主要為大家詳細介紹了如何利用Java語言實現(xiàn)加鹽加密算法,文中的示例代碼講解詳細,具有一定的學習價值,感興趣的小伙伴可以了解一下
    2023-06-06
  • 詳解Spring-Boot集成Spring session并存入redis

    詳解Spring-Boot集成Spring session并存入redis

    這篇文章主要介紹了詳解Spring-Boot集成Spring session并存入redis,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-05-05
  • java原碼補碼反碼關系解析

    java原碼補碼反碼關系解析

    這篇文章主要為大家詳細介紹了java原碼補碼反碼的關系,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-02-02
  • Java?C++題解leetcode1441用棧操作構建數(shù)組示例

    Java?C++題解leetcode1441用棧操作構建數(shù)組示例

    這篇文章主要為大家介紹了Java?C++題解leetcode1441用棧操作構建數(shù)組示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-10-10
  • SpringMVC文件上傳的配置實例詳解

    SpringMVC文件上傳的配置實例詳解

    本文通過實例代碼給大家介紹SpringMVC文件上傳的配置相關內容,本文介紹的非常詳細,具有參考借鑒價值,感興趣的朋友一起學習吧
    2016-05-05
  • Java synchronized關鍵_動力節(jié)點Java學院整理

    Java synchronized關鍵_動力節(jié)點Java學院整理

    在java中,每一個對象有且僅有一個同步鎖。這也意味著,同步鎖是依賴于對象而存在。下面通過本文給大家介紹synchronized原理 及基本規(guī)則,感興趣的朋友一起學習吧
    2017-05-05

最新評論