這篇文章主要介紹了MyBatis怎么簡化的JDBC的相關知識,內容詳細易懂,操作簡單快捷,具有一定借鑒價值,相信大家閱讀完這篇MyBatis怎么簡化的JDBC文章都會有所收獲,下面我們一起來看看吧。
MyBatis 是一個 持久層 框架,用于 簡化JDBC開發;
持久層:即負責將數據保存到數據庫的那一層代碼;
框架:半成品軟件,可重用、通用的、軟件基礎代碼模型;
簡化JDBC開發: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); // 執行sql ResultSet rs = pstmt.executeQuery(); // 遍歷Result,獲取數據 User user = null; ArrayList<User> users = new ArrayList<>(); while (rs.next()){ // 獲取數據 int id = rs.getInt("id"); String username = rs.getString("username"); String password = rs.getString("password"); // 創建對象,設置屬性值 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";
而若我們對字符串信息發生變動,比如更改密碼等,我們就需要改動編碼,然后重新編譯,重新打包,重新運行;如此來看,代碼維護性相當差。
包括下述 sql語句部分,我們會頻繁改動sql語句:
// 接收輸入的查詢條件 String gender = "男"; // 定義sql String sql = "select * from tb_user where gender = ?";
每一次的改動都意味著大量的任務量。
而在后續的 手動設置參數 與 手動封裝結果集 部分,JDBC的操作也是相當的繁瑣。
手動設置參數:
// 獲取pstmt對象 PreparedStatement pstmt = conn.prepareStatement(sql); //設置?的值 pstmt.setString(1,gender);
手動封裝結果集:
// 遍歷Result,獲取數據 User user = null; ArrayList<User> users = new ArrayList<>(); while (rs.next()){ // 獲取數據 int id = rs.getInt("id"); String username = rs.getString("username"); String password = rs.getString("password"); // 創建對象,設置屬性值 user = new User(); user.setId(id); user.setUsername(username); user.setPassword(password); user.setGender(gender); //裝入集合 users.add(user); }
針對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", "男")
一行代碼搞定 手動設置參數 與 手動封裝結果集 部分;
MyBatis 主要是通過將 JDBC 的一些重復性、繁瑣性的代碼進行封裝和抽象化,從而簡化了原來 JDBC 代碼的一些部分,具體來說,它主要簡化了以下幾個方面的代碼:
在 JDBC 中,每次進行數據庫操作都需要手動獲取連接、創建 Statement 或者 PreparedStatement、執行 SQL 語句、處理結果集,并且需要手動關閉連接和釋放資源。而在 MyBatis 中,這些步驟都被封裝在 SqlSession 中,開發者只需要通過 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();
在 JDBC 中,SQL 語句通常以字符串的形式直接寫在代碼中,不利于維護和調試,并且容易受到 SQL 注入等安全問題的影響。而在 MyBatis 中,SQL 語句通過 XML 或注解的形式進行編寫和處理,可以更加靈活和方便地管理 SQL 語句,并且可以使用動態 SQL、命名參數等功能。
// 原始 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 提高了代碼的可讀性、可維護性和可擴展性,使得開發者可以更加專注于業務邏輯的實現,而不需要過多關注底層的數據庫訪問細節。
關于“MyBatis怎么簡化的JDBC”這篇文章的內容就介紹到這里,感謝各位的閱讀!相信大家對“MyBatis怎么簡化的JDBC”知識都有一定的了解,大家如果還想學習更多知識,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。