最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

MyBatis 作用

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

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

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

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

簡化JDBC開發(fā)

JDBC存在 硬編碼操作繁瑣 的缺點(diǎn);

完整JDBC代碼

// 注冊驅(qū)動(dòng)
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);
//設(shè)置?的值
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)建對象,設(shè)置屬性值
	user = new User();
	user.setId(id);
	user.setUsername(username);
	user.setPassword(password);
	user.setGender(gender);
	//裝入集合
	users.add(user);
}

硬編碼

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

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

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

包括下述 sql語句部分,我們會(huì)頻繁改動(dòng)sql語句:

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

每一次的改動(dòng)都意味著大量的任務(wù)量。

操作繁瑣

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

手動(dòng)設(shè)置參數(shù):

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

手動(dòng)封裝結(jié)果集:

// 遍歷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)建對象,設(shè)置屬性值
	user = new User();
	user.setId(id);
	user.setUsername(username);
	user.setPassword(password);
	user.setGender(gender);
	//裝入集合
	users.add(user);
}

MyBatis 簡化思路

配置文件

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

針對 注冊驅(qū)動(dòng)以及獲取連接部分 配置信息案例:

<!-- 連接池 -->
<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>

自動(dòng)完成

針對JDBC中 操作繁瑣 問題,MyBatis 嘗試 自動(dòng)完成;

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

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

補(bǔ)充:Mybatis是如何簡化JDBC代碼的

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

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

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

// 原始 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 語句通常以字符串的形式直接寫在代碼中,不利于維護(hù)和調(diào)試,并且容易受到 SQL 注入等安全問題的影響。而在 MyBatis 中,SQL 語句通過 XML 或注解的形式進(jìn)行編寫和處理,可以更加靈活和方便地管理 SQL 語句,并且可以使用動(dòng)態(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);

結(jié)果集的映射

在 JDBC 中,將查詢結(jié)果集映射到 Java 對象通常需要手動(dòng)進(jìn)行一些處理,例如通過 ResultSet.getXXX() 方法獲取每個(gè)字段的值,然后手動(dòng)設(shè)置到 Java 對象中。而在 MyBatis 中,可以通過配置 resultMap 或使用注解等方式將查詢結(jié)果集映射到 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);

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

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

相關(guān)文章

最新評論

湖南省| 东兰县| 四会市| 鄯善县| 北川| 二连浩特市| 康乐县| 旬邑县| 鹰潭市| 葵青区| 绵阳市| 湘乡市| 松原市| 宣威市| 宁晋县| 阿城市| 和硕县| 柏乡县| 利津县| 阳西县| 阜阳市| 汝南县| 柏乡县| 扎兰屯市| 泌阳县| 玉溪市| 沂源县| 田林县| 岳阳市| 阳西县| 汕头市| 信阳市| 喜德县| 汕尾市| 洛扎县| 桂林市| 沈丘县| 微山县| 响水县| 体育| 白河县|