溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

MyBatis怎么簡化的JDBC

發布時間:2023-03-21 14:18:43 來源:億速云 閱讀:145 作者:iii 欄目:開發技術

這篇文章主要介紹了MyBatis怎么簡化的JDBC的相關知識,內容詳細易懂,操作簡單快捷,具有一定借鑒價值,相信大家閱讀完這篇MyBatis怎么簡化的JDBC文章都會有所收獲,下面我們一起來看看吧。

    MyBatis 作用

    MyBatis 是一個 持久層 框架,用于 簡化JDBC開發;

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

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

    簡化JDBC開發: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);
    }

    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", "男")

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

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

    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();

    SQL 語句的編寫和處理

    在 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”知識都有一定的了解,大家如果還想學習更多知識,歡迎關注億速云行業資訊頻道。

    向AI問一下細節

    免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

    AI

    亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女