欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

MyBatis配置與CRUD超詳細(xì)講解

 更新時(shí)間:2023年02月21日 09:49:33   作者:綠仔牛奶_  
這篇文章主要介紹了MyBatis配置與CRUD,CRUD是指在做計(jì)算處理時(shí)的增加(Create)、讀取(Read)、更新(Update)和刪除(Delete)幾個(gè)單詞的首字母簡(jiǎn)寫。CRUD主要被用在描述軟件系統(tǒng)中數(shù)據(jù)庫或者持久層的基本操作功能

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

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

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

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

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

CRUD增刪改查

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

在確保已經(jīng)配置好了mybatis-config.xml核心配置文件之后,我們每次需要操作sql時(shí),就只需要操作接口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ù)過多時(shí),當(dāng)我們進(jìn)行添加操作或者修改操作就會(huì)非常麻煩。所以,可以優(yōu)化采用Map來進(jìn)行可選參數(shù)。以查詢用戶selectUser為例:

// UserMapper接口
// 查詢用戶 Map入?yún)?簡(jiǎn)單實(shí)現(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,實(shí)現(xiàn)定制化參數(shù)

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

基本數(shù)據(jù)類型時(shí)直接在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固定寫死,獲取用戶輸入的一個(gè)穩(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(對(duì)象工廠)
    plugins(插件)
    environments(環(huán)境配置)
        environment(環(huán)境變量)
            transactionManager(事務(wù)管理器)
            dataSource(數(shù)據(jù)源)
    databaseIdProvider(數(shù)據(jù)庫廠商標(biāo)識(shí))
    mappers(映射器)

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

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

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

我們可以在environments元素下配置多個(gè)環(huán)境environment,每個(gè)環(huán)境都需要設(shè)置單獨(dú)的id,當(dāng)我們需要用到哪一個(gè)的時(shí)候就需要將default設(shè)置為哪一個(gè)環(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ù)管理器,因?yàn)镾pring 模塊會(huì)使用自帶的管理器來覆蓋前面的配置

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

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

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

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

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

JND:表示正常連接

屬性(Properties)

屬性可以通過外部文件配置,也可以在Properties的子元素當(dāng)中配置,在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屬性文件進(jìn)行配置,比如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

最后價(jià)格文件用properties標(biāo)簽引入到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中的配置信息只寫一半,另一半在引入的同時(shí)用雙標(biāo)簽閉合,在其中用properties的子標(biāo)簽property重新引入即可

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

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

類型別名(typeAliases)

typeAliases用于簡(jiǎn)化全限定名的書寫,僅限于在xml中配置

指定全限定類名別名:

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

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

指定包名配置

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

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

在沒有對(duì)實(shí)體類添加注解用法:默認(rèn)使用Bean的首字母小寫的非限定類名來作為它的別名

添加注解的用法:

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

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

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

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

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

映射器(mappers)

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

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

<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)的映射器接口全部注冊(cè)為映射器

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

生命周期和作用域

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

SqlSessionFactoryBuilder:

  • 創(chuàng)建SqlSessionFactory工廠使用,一旦創(chuàng)建了SqlSessionFactory就不再需要使用它
  • 最佳作用域是方法域(局部方法變量)

SqlSessionFactory:

  • SqlSessionFactory用于生產(chǎn)SqlSession實(shí)例
  • 一旦創(chuàng)建就應(yīng)該一直存在于程序的運(yùn)行期間,不要丟棄或嘗試重新創(chuàng)建另一個(gè)SqlSessionFactory
  • 可以采用單例模式來保證唯一的SqlSessionFactory
  • 最佳作用域是全局作用(應(yīng)用作用域)

SqlSession:

  • SqlSession用于執(zhí)行已映射的sql指令
  • 每個(gè)線程都有自己的SqlSession實(shí)例,因?yàn)樗皇蔷€程安全的不能被共享
  • 最佳作用域是方法域或者請(qǐng)求域

到此這篇關(guān)于MyBatis配置與CRUD超詳細(xì)講解的文章就介紹到這了,更多相關(guān)MyBatis配置與CRUD內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論