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”:設置將自動生成的主鍵賦值給傳遞過來參數的哪一個屬性
字段屬性映射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
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 ( ? , ? , ?);
案例2:實現員工表的批量添加:
insert into emp values(),(),();
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():
清除的是一級緩存.
總結
以上是生活随笔為你收集整理的Mybatis框架的操作步骤和细节处理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 解决Mybatis启动报错: Inval
- 下一篇: Redis常用方法