溫馨提示×

溫馨提示×

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

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

Java中Mybatis框架增刪查改與核心配置的示例分析

發(fā)布時間:2021-10-27 13:45:05 來源:億速云 閱讀:135 作者:小新 欄目:開發(fā)技術(shù)

小編給大家分享一下Java中Mybatis框架增刪查改與核心配置的示例分析,希望大家閱讀完這篇文章之后都有所收獲,下面讓我們一起去探討吧!

    原始JDBC操作

    原始jdbc操作(查詢數(shù)據(jù))

    Java中Mybatis框架增刪查改與核心配置的示例分析

    原始jdbc操作(插入數(shù)據(jù))

    Java中Mybatis框架增刪查改與核心配置的示例分析

    原始jdbc操作的分析原始jdbc開發(fā)存在的問題如下:
    ①數(shù)據(jù)庫連接創(chuàng)建、釋放頻繁造成系統(tǒng)資源浪費從而影響系統(tǒng)性能
    ②sql 語句在代碼中硬編碼,造成代碼不易維護,實際應(yīng)用sql變化的可能較大,sql變動需要改變java代碼。
    ③查詢操作時,需要手動將結(jié)果集中的數(shù)據(jù)手動封裝到實體中。插入操作時,需要手動將實體的數(shù)據(jù)設(shè)置到sql語句的占位符位置

    應(yīng)對上述問題給出的解決方案:
    ①使用數(shù)據(jù)庫連接池初始化連接資源
    ②將sql語句抽取到xml配置文件中
    ③使用反射、內(nèi)省等底層技術(shù),自動將實體與表進行屬性與字段的自動映射

    Mybatis簡介

    ①mybatis是一個優(yōu)秀的基于java的持久層框架,它內(nèi)部封裝了jdbc,使開發(fā)者只需要關(guān)注sql語句本身,而不需要花費精力去處理加載驅(qū)動、創(chuàng)建連接、創(chuàng)建statement等繁雜的過程。
    ②mybatis通過xml或注解的方式將要執(zhí)行的各種statement配置起來,并通過java對象和statement中sql的動態(tài)參數(shù)進行映射生成最終執(zhí)行的sql語句。
    ③最后mybatis框架執(zhí)行sql并將結(jié)果映射為java對象并返回。采用ORM思想解決了實體和數(shù)據(jù)庫映射的問題,對jdbc進行了封裝,屏蔽了jdbc api底層訪問細(xì)節(jié),使我們不用與jdbc api打交道,就可以完成對數(shù)據(jù)庫的持久化操作。

    Mybatis官網(wǎng)地址:mybatis – MyBatis 3 | Introduction

    Mybatis開發(fā)步驟:

    ①添加MyBatis的坐標(biāo)
    ②創(chuàng)建user數(shù)據(jù)表
    ③編寫User實體類
    ④編寫映射文件UserMapper.xml
    ⑤編寫核心文件SqlMapConfig.xml
    ⑥編寫測試類

    ①添加MyBatis的坐標(biāo)和其它相關(guān)坐標(biāo)

    <dependencies>
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>5.1.32</version>
            </dependency>
            <dependency>
                <groupId>org.mybatis</groupId>
                <artifactId>mybatis</artifactId>
                <version>3.4.6</version>
            </dependency>
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>4.12</version>
            </dependency>
            <dependency>
                <groupId>log4j</groupId>
                <artifactId>log4j</artifactId>
                <version>1.2.17</version>
            </dependency>
        </dependencies>

    ②創(chuàng)建user數(shù)據(jù)表

    Java中Mybatis框架增刪查改與核心配置的示例分析

    ③編寫User實體類

    public class User {
     
        private int id;
        private String username;
        private String password;
        //省略get和set方法
    }

    ④編寫映射文件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="userMapper">
        <!--查詢操作-->
        <select id="findAll" resultType="user">
            select * from user
        </select>
    </mapper>

    ⑤編寫Mybatis核心文件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>
        <!--數(shù)據(jù)源環(huán)境-->
        <environments default="developement">
            <environment id="developement">
                <transactionManager type="JDBC"></transactionManager>
                <dataSource type="POOLED">
                    <property name="driver" value="${jdbc.driver}"/>
                    <property name="url" value="${jdbc.url}"/>
                    <property name="username" value="${jdbc.username}"/>
                    <property name="password" value="${jdbc.password}"/>
                </dataSource>
            </environment>
        </environments>
        <!--加載映射文件-->
        <mappers>
            <mapper resource="com/longdi/mapper/UserMapper.xml"></mapper>
        </mappers>
    </configuration>

    ⑥編寫測試類

    @Test
        //查詢操作
        public void test1() throws IOException {
            //獲得核心配置文件
            InputStream resourceAsStream = Resources.getResourceAsStream("sqlMapConfig.xml");
            //獲得session工廠對象
            SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
            //獲得session回話對象
            SqlSession sqlSession = sqlSessionFactory.openSession();
            //執(zhí)行操作  參數(shù):namespace+id
            List<User> userList = sqlSession.selectList("userMapper.findAll");
            //打印數(shù)據(jù)
            System.out.println(userList);
            //釋放資源
            sqlSession.close();
        }

    Mybatis的映射文件概述

    Java中Mybatis框架增刪查改與核心配置的示例分析

    Mybatis的增刪改查操作

    ①Mybatis的插入數(shù)據(jù)操作

    編寫UserMapper映射文件

    <mapper namespace="userMapper">  
      <!--插入操作-->
        <insert id="save" parameterType="com.longdi.domain.User">
            insert into user values(#{id},#{username},#{password})
        </insert>
    </mapper>

    編寫插入實體的User代碼

    @Test
        //插入操作
        public void test2() throws IOException {
     
            //模擬user對象
            User user = new User();
            user.setUsername("xxx");
            user.setPassword("abc");
     
            //獲得核心配置文件
            InputStream resourceAsStream = Resources.getResourceAsStream("sqlMapConfig.xml");
            //獲得session工廠對象
            SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
            //獲得session回話對象
            SqlSession sqlSession = sqlSessionFactory.openSession(true);
            //執(zhí)行操作  參數(shù):namespace+id
            sqlSession.insert("userMapper.save",user);
     
            //釋放資源
            sqlSession.close();
        }

    插入操作注意問題:

    插入語句使用insert標(biāo)簽
    在映射文件中使用parameterType屬性指定要插入的數(shù)據(jù)類型
    Sql語句中使用#{實體屬性名}方式引用實體中的屬性值
    插入操作使用的API是sqlSession.insert(“命名空間.id”,實體對象);
    插入操作涉及數(shù)據(jù)庫數(shù)據(jù)變化,所以要使用sqlSession對象顯示的提交事務(wù),即sqlSession.commit()

    ②Mybatis的修改數(shù)據(jù)操作

    編寫UserMapper映射文件

    <mapper namespace="userMapper">  
        <!--修改操作-->
        <update id="update" parameterType="com.longdi.domain.User">
            update user set username=#{username},password=#{password} where id=#{id}
        </update>
    </mapper>

    編寫修改實體的User代碼

    @Test
        //修改操作
        public void test3() throws IOException {
     
            //模擬user對象
            User user = new User();
            user.setId(7);
            user.setUsername("lucy");
            user.setPassword("123");
     
            //獲得核心配置文件
            InputStream resourceAsStream = Resources.getResourceAsStream("sqlMapConfig.xml");
            //獲得session工廠對象
            SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
            //獲得session回話對象
            SqlSession sqlSession = sqlSessionFactory.openSession();
            //執(zhí)行操作  參數(shù):namespace+id
            sqlSession.update("userMapper.update",user);
     
            //mybatis執(zhí)行更新操作  提交事務(wù)   因為mybatis默認(rèn)不提交事物
            sqlSession.commit();
     
            //釋放資源
            sqlSession.close();
        }

    修改操作注意問題:

    修改語句使用update標(biāo)簽
    修改操作使用的API是sqlSession.update(“命名空間.id”,實體對象);

    ③Mybatis的刪除數(shù)據(jù)操作

    編寫UserMapper映射文件

    <mapper namespace="userMapper">  
        <!--刪除操作-->
        <delete id="delete" parameterType="int">
            delete from user where id=#{abc}
        </delete>
    </mapper>

    編寫刪除實體的User代碼

    @Test
        //刪除操作
        public void test4() throws IOException {
     
            //獲得核心配置文件
            InputStream resourceAsStream = Resources.getResourceAsStream("sqlMapConfig.xml");
            //獲得session工廠對象
            SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
            //獲得session回話對象
            SqlSession sqlSession = sqlSessionFactory.openSession();
            //執(zhí)行操作  參數(shù):namespace+id
            sqlSession.delete("userMapper.delete",8);
     
            //mybatis執(zhí)行更新操作  提交事務(wù)
            sqlSession.commit();
     
            //釋放資源
            sqlSession.close();
        }

    刪除操作注意問題:

    刪除語句使用delete標(biāo)簽
    Sql語句中使用#{任意字符串}方式引用傳遞的單個參數(shù)
    刪除操作使用的API是sqlSession.delete(“命名空間.id”,Object);

    Java中Mybatis框架增刪查改與核心配置的示例分析

    MyBatis的核心配置文件概述

    MyBatis核心配置文件層級關(guān)系

    Java中Mybatis框架增刪查改與核心配置的示例分析

    MyBatis常用配置解析

    1.environments標(biāo)簽
    數(shù)據(jù)庫環(huán)境的配置,支持多環(huán)境配置

    Java中Mybatis框架增刪查改與核心配置的示例分析

    其中,事務(wù)管理器(transactionManager)類型有兩種:
    ①JDBC:這個配置就是直接使用了JDBC的提交和回滾設(shè)置,它依賴于從數(shù)據(jù)源得到的連接來管理事務(wù)作用域。
    ②MANAGED:這個配置幾乎沒做什么。它從來不提交或回滾一個連接,而是讓容器來管理事務(wù)的整個生命周期(比如JEE應(yīng)用服務(wù)器的上下文)。默認(rèn)情況下它會關(guān)閉連接,然而一些容器并不希望這樣,因此需要將closeConnection屬性設(shè)置為false來阻止它默認(rèn)的關(guān)閉行為。
    其中,數(shù)據(jù)源(dataSource)類型有三種:
    ①UNPOOLED:這個數(shù)據(jù)源的實現(xiàn)只是每次被請求時打開和關(guān)閉連接。
    ②POOLED:這種數(shù)據(jù)源的實現(xiàn)利用“池”的概念將JDBC連接對象組織起來。
    ③JNDI:這個數(shù)據(jù)源的實現(xiàn)是為了能在如EJB或應(yīng)用服務(wù)器這類容器中使用,容器可以集中或在外部配置數(shù)據(jù)源,然后放置一個JNDI上下文的引用。
    2.mapper標(biāo)簽

    該標(biāo)簽的作用是加載映射的,加載方式有如下幾種:
    ①使用相對于類路徑的資源引用,例如: <mapper resource="org/mybatis/builder/AuthorMapper.xml"/>

    ②使用完全限定資源定位符(URL),例如: <mapper url="file:/var/mappers/AuthorMapper.xml"/>

    ③使用映射器接口實現(xiàn)類的完全限定類名,例如: <mapper class="org.mybatis.builder.AuthorMapper"/>

    ④將包內(nèi)的映射器接口實現(xiàn)全部注冊為映射器,例如: <package name="org.mybatis.builder"/>

    3. Properties標(biāo)簽

    Java中Mybatis框架增刪查改與核心配置的示例分析

    4.typeAliases標(biāo)簽

    Java中Mybatis框架增刪查改與核心配置的示例分析

    上面我們是自定義的別名,mybatis框架已經(jīng)為我們設(shè)置好的一些常用的類型的別名

    Java中Mybatis框架增刪查改與核心配置的示例分析

    Mybatis相應(yīng)API

    ①SqlSession工廠構(gòu)建器SqlSessionFactoryBuilder
    常用API: SqISessionFactory build(InputStream inputStream)
    通過加載mybatis的核心文件的輸入流的形式構(gòu)建一個SqlSessionFactory對象

    Java中Mybatis框架增刪查改與核心配置的示例分析

    其中,Resources 工具類,這個類在 org.apache.ibatis.io包中。Resources類幫助你從類路徑下、文件系統(tǒng)或一個web URL 中加載資源文件。

    ②SqlSession工廠對象SqlSessionFactory

    SqlSessionFactory有多個個方法創(chuàng)建SqlSession實例。常用的有如下兩個:

    Java中Mybatis框架增刪查改與核心配置的示例分析

    ③SqlSession會話對象

    SqISession實例在MyBatis中是非常強大的一個類。在這里你會看到所有執(zhí)行語句、提交或回滾事務(wù)和獲取映射器實例的方法。執(zhí)行語句的方法主要有:

    Java中Mybatis框架增刪查改與核心配置的示例分析

    操作事務(wù)的方法主要有:
    ①void commit()

    ②void rollback()

    看完了這篇文章,相信你對“Java中Mybatis框架增刪查改與核心配置的示例分析”有了一定的了解,如果想了解更多相關(guān)知識,歡迎關(guān)注億速云行業(yè)資訊頻道,感謝各位的閱讀!

    向AI問一下細(xì)節(jié)

    免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

    AI