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

Java Mybatis框架增刪查改與核心配置詳解流程與用法

 更新時(shí)間:2021年10月27日 11:58:51   作者:龍弟-idea  
MyBatis 是一款優(yōu)秀的持久層框架,它支持自定義 SQL、存儲(chǔ)過(guò)程以及高級(jí)映射。MyBatis 免除了幾乎所有的 JDBC 代碼以及設(shè)置參數(shù)和獲取結(jié)果集的工作。MyBatis 可以通過(guò)簡(jiǎn)單的 XML 或注解來(lái)配置和映射原始類型、接口和 Java POJO為數(shù)據(jù)庫(kù)中的記錄

原始JDBC操作

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

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

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

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

Mybatis簡(jiǎn)介

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

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

Mybatis開發(fā)步驟:

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

①添加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ù)表

③編寫User實(shí)體類

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>

⑥編寫測(cè)試類

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

Mybatis的映射文件概述

Mybatis的增刪改查操作

①M(fèi)ybatis的插入數(shù)據(jù)操作

編寫UserMapper映射文件

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

編寫插入實(shí)體的User代碼

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

插入操作注意問(wèn)題:

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

編寫修改實(shí)體的User代碼

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

修改操作注意問(wèn)題:

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

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

編寫UserMapper映射文件

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

編寫刪除實(shí)體的User代碼

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

刪除操作注意問(wèn)題:

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

MyBatis的核心配置文件概述

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

MyBatis常用配置解析

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

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

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

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

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

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

3. Properties標(biāo)簽

4.typeAliases標(biāo)簽

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

Mybatis相應(yīng)API

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

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

②SqlSession工廠對(duì)象SqlSessionFactory

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

③SqlSession會(huì)話對(duì)象

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

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

②void rollback()

到此這篇關(guān)于Java Mybatis框架增刪查改與核心配置詳解流程與用法的文章就介紹到這了,更多相關(guān)Java Mybatis內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 使用java對(duì)一副撲克牌建模

    使用java對(duì)一副撲克牌建模

    這篇文章主要為大家詳細(xì)介紹了如何使用java對(duì)一副撲克牌建模,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-04-04
  • spring boot集成pagehelper(兩種方式)

    spring boot集成pagehelper(兩種方式)

    這篇文章主要介紹了spring boot集成pagehelper(兩種方式),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-01-01
  • java?讀寫?ini?配置文件的示例代碼

    java?讀寫?ini?配置文件的示例代碼

    這篇文章主要介紹了java?讀寫?ini?配置文件,本文通過(guò)示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-01-01
  • Java中Retry方法的簡(jiǎn)單實(shí)現(xiàn)

    Java中Retry方法的簡(jiǎn)單實(shí)現(xiàn)

    這篇文章主要介紹了Java中Retry方法的簡(jiǎn)單實(shí)現(xiàn),Retry主要是利用Java的lambda表達(dá)式和線程接口實(shí)現(xiàn)有返回值和無(wú)返回值的重試,思考了下就寫了一個(gè)簡(jiǎn)易R(shí)etry功能分享出來(lái),需要的朋友可以參考下
    2024-01-01
  • SpringBoot配置Https訪問(wèn)的詳細(xì)步驟

    SpringBoot配置Https訪問(wèn)的詳細(xì)步驟

    HTTP(Hypertext transfer protocal)是一種詳細(xì)規(guī)定了瀏覽器和萬(wàn)維網(wǎng)服務(wù)器之間相互通信的規(guī)則,通過(guò)因特網(wǎng)傳送萬(wàn)維網(wǎng)文檔的數(shù)據(jù)傳送協(xié)議,這篇文章主要介紹了SpringBoot配置Https訪問(wèn)的詳細(xì)步驟,需要的朋友可以參考下
    2024-02-02
  • Java開發(fā)druid數(shù)據(jù)連接池maven方式簡(jiǎn)易配置流程示例

    Java開發(fā)druid數(shù)據(jù)連接池maven方式簡(jiǎn)易配置流程示例

    本篇文章主要為大家介紹了java開發(fā)中druid數(shù)據(jù)連接池maven方式的簡(jiǎn)易配置流程示例,文中附含詳細(xì)的代碼示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助
    2021-10-10
  • 淺談Java BitSet使用場(chǎng)景和代碼示例

    淺談Java BitSet使用場(chǎng)景和代碼示例

    這篇文章主要介紹了淺談Java BitSet使用場(chǎng)景和代碼示例,具有一定借鑒價(jià)值,需要的朋友可以參考下。
    2017-12-12
  • 通過(guò)Class類獲取對(duì)象(實(shí)例講解)

    通過(guò)Class類獲取對(duì)象(實(shí)例講解)

    下面小編就為大家?guī)?lái)一篇通過(guò)Class類獲取對(duì)象(實(shí)例講解)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-06-06
  • 淺析如何在SpringBoot中實(shí)現(xiàn)數(shù)據(jù)脫敏

    淺析如何在SpringBoot中實(shí)現(xiàn)數(shù)據(jù)脫敏

    脫敏是指在不改變?cè)瓟?shù)據(jù)結(jié)構(gòu)的前提下,通過(guò)某種方式處理數(shù)據(jù),使數(shù)據(jù)不能直接暴露用戶的真實(shí)信息,下面我們就來(lái)看看SpringBoot中實(shí)現(xiàn)數(shù)據(jù)脫敏的具體方法吧
    2024-03-03
  • Spring中的@Cacheable緩存注解詳解

    Spring中的@Cacheable緩存注解詳解

    這篇文章主要介紹了Spring中的@Cacheable緩存注解詳解,數(shù)據(jù)庫(kù)查找的流程是先要從磁盤拿到數(shù)據(jù),再刷新到內(nèi)存,再返回?cái)?shù)據(jù)。磁盤相比于內(nèi)存來(lái)說(shuō),速度是很慢的,為了提升性能,就出現(xiàn)了基于內(nèi)存的緩存,需要的朋友可以參考下
    2023-05-05

最新評(píng)論

海林市| 科技| 石柱| 疏勒县| 黔西| 祁东县| 东山县| 巴青县| 墨竹工卡县| 福安市| 贡山| 乐安县| 绥德县| 四会市| 桦南县| 黄梅县| 东乌| 武隆县| 阿拉善右旗| 铁力市| 凤阳县| 鄂州市| 通城县| 绵竹市| 文安县| 乌海市| 长岭县| 抚远县| 四平市| 东辽县| 永年县| 商城县| 寿光市| 桐梓县| 德令哈市| 迁西县| 兴义市| 鹤山市| 南丹县| 社会| 铜梁县|