日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Mybatis框架的操作步骤和细节处理

發布時間:2025/3/21 编程问答 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Mybatis框架的操作步骤和细节处理 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

mybatis.xml的寫法:

與spring整合后,數據庫連接池,配置別名,mapper文件掃描等都可以直接配置在spring的配置文件中

<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration><properties resource="jdbc.properties" /><typeAliases> <package name="com.sms.mybatis.pojo"/></typeAliases><typeHandlers> <typeHandler handler="org.apache.ibatis.type.EnumOrdinalTypeHandler" javaType="com.sms.mybatis.pojo.UserLevel"></typeHandler></typeHandlers><environments default="mysql"><!-- 默認采用的環境 --><environment id="mysql"> <!-- 環境的名稱 --><!--配置事務管理 --><transactionManager type="JDBC" /><!-- 數據源采用的是連接池技術 POOLED:mybatis自帶的數據源 --><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/sms/mybatis/mapper/UserMapper.xml"></mapper><!-- 要求接口名和xml名一致,同在一個包下 --><!--<package name="com.sms.mybatis.mapper"></package>--></mappers> </configuration>

配置文件詳細解說:

1.properties:

  • 通過properties引用外部配置文件,屬性resource以文件名的格式引入,如config/xxxx.xml
  • 如果字段名重復,優先使用外部文件

2.typeAliases:設置別名,兩種方式

  • 這種方式別名可以隨意DIY ,但是如果有多個類就需要配置多個typeAlias

    typeAlias type="pengcen.bean.Student" alias="stu"/>
  • 這種方式別名默認為類名的首字母小寫

    < package name="com.sms.mybatis.pojo"/>
  • 3 . typeHandlers : 類型處理器:Java數據類型和jdbc數據庫類型進行相互轉換

    4. plugins : 可以干預sql執行的各個階段 , 如構建sql , 參數處理 , 結果集的處理等.

    <typeHandlers> <!--- mybatis的內置處理器可以將string類型的枚舉類,轉化成int型插入數據庫中--><typeHandler handler="org.apache.ibatis.type.EnumOrdinalTypeHandler" javaType="com.sms.mybatis.pojo.UserLevel"></typeHandler> </typeHandlers>

    4.environment : 配置運行環境 可以有多個environment

  • 配置事務管理采用jdbc默認的事務管理,之后整合的時候交給了 spring來處理

    < transactionManager type="JDBC" />
  • 配置數據庫: 數據源采用的是mybatis自帶的數據源POOLED ; JNDI:基于tomcat的數據源

    <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>
  • 5. mapper : 加載映射文件信息,兩種常用的方式

  • resource : 類路徑下的資源引用

  • package :要求接口名和xml名一致,同在一個包下

    < package name="com.sms.mybatis.mapper"></package>
  • mapper.xml的寫法:

    注意事項: - namespace和接口的全路徑名一一對應 - select/update/delete的id與接口中的方法名一一對應 - 返回值入參類型和接口中的方法一一對應 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org/DTD Mapper 3.0""http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mapper namespace="com.sms.mybatis.mapper.UserMapper"><select id="getAllUser" resultType="user">SELECT * from `user`</select><select id="getUserById" resultType="user">SELECT * FROM user where id=#{id}</select></mapper>

    執行增刪改的返回值處理:

    在Mybatis中增刪改只能有三種返回值:- 返回void- 返回Boolean:返回操作是否成功- 返回Integer:返回受影響的行數執行完增刪改后需要手動提交事務:sqlsession.commit();

    執行查詢的返回值處理:

    基本上返回一個對象或者一個集合

    入參的類型parameterType寫與不寫的區別:

    Mybatis框架具有類型推斷機制,因此parameterType寫與不寫都不會影響

    parameterType可以傳遞的類型:

    [parameterType=“map”] : 使用map作為參數傳遞時,直接在sql中寫map對應的key即可;
    [parameterType=“Object”] : 但是使用實體類對象作為入參傳遞,sql中的參數必須和實體類對象的屬性名保持一致

    < typeAliases >:給resultType設置別名的方式:

    在sqlMapConfig.xml中通過標簽設置,通過包掃描后,該包下的所有實體類在mapper.xml中返回值的類型以類名作為別名,不區分大小寫

    <typeAliases><package name="com.sms.mybatis.pojo"/></typeAliases>

    實現添加時,怎樣獲得自動生成的主鍵:

    useGeneratedKeys=“true”:設置可以使用自動生成的主鍵
    keyProperty=“uid”:設置將自動生成的主鍵賦值給傳遞過來參數的哪一個屬性

    <insert id="insertUser" useGeneratedKeys="true" keyProperty="uid">insert into user values(null,#{name},#{age},#{gender})</insert>

    字段屬性映射ResultMap的使用:

    出現下列情況:員工表和部門表是一對多的關系,員工實體類中有Dept這個屬性,但是多表連接查詢的時候只能查出Dept這張表的did和dname,此時若要查出員工信息表,那么Dept這個屬性會是null.因此需要建立映射關系

    方法一:連表查詢

    <!-- 列名和屬性名一一對應 --><resultMap type="Emp" id="map1"><id column="eid" property="eid"/><result column="ename" property="ename"/><result column="age" property="age"/><result column="gender" property="gender"/><!-- 創建Dept對象后,賦值給Emp類中的dept屬性 --><association property="dept" javaType="Dept"><id column="did" property="did"/><result column="dname" property="dname"/> </association></resultMap><select id="getAllEmpWithDept" resultMap="map1">select eid,ename,age,gender,did,dname from Emp e left join Dept d on e.did=d.did </select>

    方法二:分步查詢
    ①先通過eid查詢到ename,age,gender,did字段
    ②通過查詢出來的did字段,再查詢出Dept表中的dname

    <resultMap type="Emp" id="map2"><id column="eid" property="eid"/><result column="ename" property="ename"/><result column="age" property="age"/><result column="gender" property="gender"/><!-- 將getAllEmp的查詢結果did賦值到getDeptByDid中 column:作為分步查詢的字段名--><association property="dept" select="getDeptByDid" column="did"></association></resultMap><select id="getAllEmp" resultType="emp">select ename,age,gender,did from emp where eid=#{eid}</select><select id="getDeptByDid" resultType="dept">select did,dname from dept where dept=#{did}</select>

    Mybatis中的動態sql語句的用法:

    ①< where>:添加WHERE關鍵字,去掉多余的AND

    ②< if test=" ">:

    ③< trim prefix="" suffix="" prefixOverrides="" suffixOverrides="">:

    prefix:在sql語句前面添加內容 suffix:在sql語句后面添加內容 prefixOverrides:在sql語句前面去掉某些內容 suffixOverrides:在sql語句后面去掉某些內容

    ④< choose>(when,otherwise):類似java中if-else if-else結構

    ⑤< foreach collection=" " item=" " close=" " open=" " separator=" " index=" ">:對一個數組或者集合進行遍歷

    collection:設置要遍歷的集合或數組,入參為集合時,值為list;入參為數組時,值為array; item:設置遍歷的每一個數據的別名 open:設置循環體的開始內容 close:設置循環體的結束內容 separator:設置每一個循環之間的分隔符 index:若遍歷的是list,index代表下標;若遍歷的是map,index代表的是鍵;

    案例1:實現批量刪除:按eid刪除員工信息
    delete from emp where eid in ( ? , ? , ?);

    <!-- void deleteEmpByEids(List<Integer> eids) --> <delete id="deleteEmpByEids">delete from emp where eid in<foreach collection="list" item="eid" open="(" close=")" separator=",">#{eid}</foreach> </delete>

    案例2:實現員工表的批量添加:
    insert into emp values(),(),();

    <!-- void insertEmpByArray(Emp[] emps) --><insert id="insertEmpByArray">insert into emp values<foreach collection="array" item="emp" separator=",">(null,#{emp.ename},#{emp.age},#{emp.gender})</foreach></insert>

    mybatis中的緩存:

    一級緩存默認開啟,sqlsession級別:同一個sqlsession使用同一個緩存;

    二級緩存不默認開啟,映射文件mapper級別:不管是哪個sqlsession,只要是對當前這個映射文件進行操作,就會使用同一個緩存.

    開啟二級緩存的操作步驟:

    ①在sqlMapConfig.xml中配置全局設置開啟緩存可用:

    <settings><setting name="cacheEnabled" value="true"/></settings>

    ②在需要使用二級緩存的映射文件中添加< cache/>表示開啟二級緩存
    ③POJO需要實現serializable接口
    注意:二級緩存在sqlsession提交或關閉時才會生效.

    緩存的相關屬性設置:

    ① select標簽的useCache屬性:
    配置這個select是否使用二級緩存.一級緩存一直是使用的
    ② sql標簽的flushCache屬性:
    增刪改默認fulshCache=true.sql執行后,會同時清空一級和二級緩存
    查詢默認flushCache=false.
    ③ sqlSession.clearCache():
    清除的是一級緩存.

    《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀

    總結

    以上是生活随笔為你收集整理的Mybatis框架的操作步骤和细节处理的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。