溫馨提示×

溫馨提示×

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

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

MyBatis配置與CRUD使用的方法是什么

發(fā)布時間:2023-02-24 10:07:00 來源:億速云 閱讀:110 作者:iii 欄目:開發(fā)技術(shù)

本篇內(nèi)容主要講解“MyBatis配置與CRUD使用的方法是什么”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學(xué)習(xí)“MyBatis配置與CRUD使用的方法是什么”吧!

namespace:命名空間 必須綁定一個對應(yīng)Mapper接口

使用全限定名: com.yuqu.Dao.UserMapper

id:對應(yīng)上面的Mapper接口下面的某一方法名

resultType:表示返回結(jié)果類型 如:com.yuqu.pojo.User

parameterType:參數(shù)類型,基本數(shù)據(jù)類型通常忽略不寫

CRUD增刪改查

增刪改切記提交事務(wù):sqlSession.commit();

在確保已經(jīng)配置好了mybatis-config.xml核心配置文件之后,我們每次需要操作sql時,就只需要操作接口UserMapper和UserMapper.xml配置文件即可

示例代碼

UserMapper.xml

<mapper namespace="com.yuqu.dao.UserMapper">
    <select id="getUserList" resultType="com.yuqu.pojo.User">
        select * from testmybatis.tb_user;
    </select>
    <select id="getUserById" parameterType="int" resultType="com.yuqu.pojo.User">
        select * from testmybatis.tb_user where id = #{id};
    </select>
    <insert id="insertUser" parameterType="com.yuqu.pojo.User">
        insert into testmybatis.tb_user (id,username,password,gender,addr) values(#{id},#{username},#{password},#{gender},#{addr});
    </insert>
    <update id="updateUser" parameterType="com.yuqu.pojo.User">
        update testmybatis.tb_user set username=#{username},password=#{password},gender=#{gender},addr=#{addr} where id = #{id};
    </update>
    <delete id="deleteUser" parameterType="int">
        delete from testmybatis.tb_user where id = #{id};
    </delete>
</mapper>

Test代碼(僅以添加為例)

    @Test
    public void testInsertUser(){
        // 獲取SqlSession
        SqlSession sqlSession = MyBatisUtils.getSqlSession();
        // 執(zhí)行sql
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        int res = mapper.insertUser(new User(4, "趙六", "1234", '妖', "鄭州"));
        if (res > 0){
            System.out.println("插入成功!");
            // 增刪改必須提交事務(wù)
            sqlSession.commit();
        }
    }

Map傳參

上述UserMapper.xml所示,如果參數(shù)過多時,當我們進行添加操作或者修改操作就會非常麻煩。所以,可以優(yōu)化采用Map來進行可選參數(shù)。以查詢用戶selectUser為例:

// UserMapper接口
// 查詢用戶 Map入?yún)?nbsp;簡單實現(xiàn)模糊查詢
    int selectUser2(Map<String,Object> map);
// UserMapper.xml
<select id="selectUser2" parameterType="map" resultType="com.yuqu.pojo.User">
        select * from testmybatis.tb_user where username = #{helloName};
    </select>
// @Test
@Test
    public void testSelectUser2(){
        SqlSession sqlSession = MyBatisUtils.getSqlSession();
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        Map<String, Object> map = new HashMap<String, Object>();
        map.put("helloName","順子");
        User user = mapper.selectUser2(map);
        System.out.println(user);
        sqlSession.close();
    }

map傳遞參數(shù),可以直接在sql中獲取key,實現(xiàn)定制化參數(shù)

對象傳遞參數(shù),直接在sql中取出sql的對象屬性。但要保證字段名相同

基本數(shù)據(jù)類型時直接在sql中獲取

模糊查詢

// UserMapper
// 模糊查詢用戶
    List<User> getUserLikeList(String value);
// UserMapper.xml
<select id="getUserLikeList" resultType="com.yuqu.pojo.User">
        select * from testmybatis.tb_user where username like #{value};
    </select>

還有一種方式就是直接把sql固定寫死,獲取用戶輸入的一個穩(wěn)定的值

select * from testmybatis.tb_user where username like "%"#{value}"%";

MyBatis配置解析

核心配置文件mybatis-config.xml

參考mybatis官網(wǎng)給出的配置信息:

configuration(配置)
    properties(屬性)
    settings(設(shè)置)
    typeAliases(類型別名)
    typeHandlers(類型處理器)
    objectFactory(對象工廠)
    plugins(插件)
    environments(環(huán)境配置)
        environment(環(huán)境變量)
            transactionManager(事務(wù)管理器)
            dataSource(數(shù)據(jù)源)
    databaseIdProvider(數(shù)據(jù)庫廠商標識)
    mappers(映射器)

環(huán)境變量(Environments)

mybatis可以配置多種環(huán)境,但每個sqlSessionFactory智能選擇一個環(huán)境

一個數(shù)據(jù)庫對應(yīng)一個SqlSessionFactory

我們可以在environments元素下配置多個環(huán)境environment,每個環(huán)境都需要設(shè)置單獨的id,當我們需要用到哪一個的時候就需要將default設(shè)置為哪一個環(huán)境的id

<environments default="development"><environments>

environments下包含

事務(wù)管理器transactionManger

<transactionManager type="JDBC">
  <property name="skipSetAutoCommitOnClose" value="true"/>
</transactionManager>

事務(wù)管理器不僅有JDBC一種,還有一種 MANAGED

<transactionManager type="MANAGED">
  <property name="closeConnection" value="false"/>
</transactionManager>

MyBatis官網(wǎng)提示: 如果你正在使用 Spring + MyBatis,則沒有必要配置事務(wù)管理器,因為Spring 模塊會使用自帶的管理器來覆蓋前面的配置

數(shù)據(jù)源DataSource

之前學(xué)過的比如dbcp、c3p0、druid等等。用于連接數(shù)據(jù)庫

mybatis內(nèi)置了三種數(shù)據(jù)源:type="[UNPOOLED|POOLED|JND]"

UNPOOLED:表示無池連接,用完即銷毀

POOLED:有池連接,用完后回收等待下次使用。(默認情況使用)

JND:表示正常連接

屬性(Properties)

屬性可以通過外部文件配置,也可以在Properties的子元素當中配置,在Properties子元素配置如下示例:

<environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/mybatis?useSSL=true&amp;useUnicode=true&amp;characterEncoding=UTF-8&amp;serverTimezone=UTC"/>
                <property name="username" value="root"/>
                <property name="password" value="123456"/>
            </dataSource>
        </environment>
    </environments>

也可以通過典型的Java屬性文件進行配置,比如db.properties文件

driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/mybatis?useSSL=true&;useUnicode=true&;characterEncoding=UTF-8&;serverTimezone=UTC
username=root
password=123456

最后價格文件用properties標簽引入到mybatis-config.xml中,環(huán)境則更改為初始形式

<!--  引入外部資源  -->
    <properties resource="db.properties" />
<environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="${driver}"/>
                <property name="url" value="${url}"/>
                <property name="username" value="${username}"/>
                <property name="password" value="${password}"/>
            </dataSource>
        </environment>
    </environments>

通過官網(wǎng)可以知道,我們也可以將db.properties中的配置信息只寫一半,另一半在引入的同時用雙標簽閉合,在其中用properties的子標簽property重新引入即可

<properties resource="db.properties" >
        <property name="username" value="root"/>
        <property name="password" value="123456"/>
    </properties>

如果同時存在于外部文件和property中,優(yōu)先使用外部文件的配置信息

類型別名(typeAliases)

typeAliases用于簡化全限定名的書寫,僅限于在xml中配置

指定全限定類名別名:

<typeAliases>
   <typeAlias type="com.yuqu.pojo.User" alias="user" />
</typeAliases>

type代表全限定名,將其映射為一個簡化名稱 user。如上所示在需要用到com.yuqu.pojo.User的地方就可以替換成user

指定包名配置

<typeAliases>
   <package name="com.yuqu.pojo"/>
</typeAliases>

經(jīng)此配置后,mybatis會自動查找在com.yuqu.pojo下的所需Java Bean。

在沒有對實體類添加注解用法:默認使用Bean的首字母小寫的非限定類名來作為它的別名

添加注解的用法:

@Alias("hello")
public class User {
    //...
}

接下來就可以在任何要用com.yuqu.pojo.User的地方使用hello代替

建議在實體類較少的情況下使用第一種指定全限定類名的別名

實體類較多時可以使用指定包名配置

其他的Java類型內(nèi)建的別名可以參考MyBatis官網(wǎng)

映射器(mappers)

在定義sql映射語句之前,首先我們要告訴mybatis去哪里獲取這些語句。這個時候就需要用到映射器mappers,mybatis根據(jù)映射的路徑去找到對應(yīng)的文件或者接口再去執(zhí)行sql語句

映射器使用一:使用相對于類路徑的資源引用(建議使用)

<mappers>
  <mapper resource="org/mybatis/builder/PostMapper.xml"/>
</mappers>
    // 如果將Mapper文件直接放在resource下就可以改成
<mappers>
  <mapper resource="PostMapper.xml"/>
</mappers>

映射器使用二:使用class文件的完全限定類名

<mappers>
	<mapper class="org.mybatis.builder.PostMapper" />
</mappers>
  • 接口和它的Mapper配置文件必須在同一包下!

  • 接口和它的Mapper配置文件必須同名!

映射器使用使用三:將包內(nèi)的映射器接口全部注冊為映射器

<mappers>
  <package name="org.mybatis.builder"/>
</mappers>
  • 接口和它的Mapper配置文件必須在同一包下!

  • 接口和它的Mapper配置文件必須同名!

生命周期和作用域

錯誤的使用生命周期和作用域會導(dǎo)致非常嚴重的并發(fā)問題

SqlSessionFactoryBuilder:

  • 創(chuàng)建SqlSessionFactory工廠使用,一旦創(chuàng)建了SqlSessionFactory就不再需要使用它

  • 最佳作用域是方法域(局部方法變量)

SqlSessionFactory:

  • SqlSessionFactory用于生產(chǎn)SqlSession實例

  • 一旦創(chuàng)建就應(yīng)該一直存在于程序的運行期間,不要丟棄或嘗試重新創(chuàng)建另一個SqlSessionFactory

  • 可以采用單例模式來保證唯一的SqlSessionFactory

  • 最佳作用域是全局作用(應(yīng)用作用域)

SqlSession:

  • SqlSession用于執(zhí)行已映射的sql指令

  • 每個線程都有自己的SqlSession實例,因為它不是線程安全的不能被共享

  • 最佳作用域是方法域或者請求域

到此,相信大家對“MyBatis配置與CRUD使用的方法是什么”有了更深的了解,不妨來實際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進入相關(guān)頻道進行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!

向AI問一下細節(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