激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - Java Mybatis框架Dao層的實現與映射文件以及核心配置文件詳解分析

Java Mybatis框架Dao層的實現與映射文件以及核心配置文件詳解分析

2022-03-03 00:33龍弟-idea Java教程

MyBatis 是一款優秀的持久層框架,它支持自定義 SQL、存儲過程以及高級映射。MyBatis 免除了幾乎所有的 JDBC 代碼以及設置參數和獲取結果集的工作。MyBatis 可以通過簡單的 XML 或注解來配置和映射原始類型、接口和 Java POJO為數據庫中

Mybatis的Dao層實現

傳統開發方式

1、編寫UserDao接口

public interface UserMapper {

  public List<User> findAll() throws IOException;
}

2、編寫UserDaoImpl實現

Java Mybatis框架Dao層的實現與映射文件以及核心配置文件詳解分析

3、測試傳統方式

Java Mybatis框架Dao層的實現與映射文件以及核心配置文件詳解分析

代理開發方式

代理開發方式介紹

采用Mybatis的代理開發方式實現DAO層的開發,這種方式是我們后面進入企業的主流.
Mapper接口開發方法只需要程序員編寫Mapper接口(相當于Dao接口),由Mybatis框架根據接口定義創建接口的動態代理對象,代理對象的方法體同上邊Dao接口實現類方法。
Mapper接口開發需要遵循以下規范:

①Mapper.xml文件中的namespace與mapper接口的全限定名相同
②Mapper接口方法名和Mapper.xml中定義的每個statement的id相同
③Mapper接口方法的輸入參數類型和mapper.xml中定義的每個sql的parameterType的類型相同4、④Mapper接口方法的輸出參數類型和mapper.xml中定義的每個sql的resultType的類型相

1、編寫UserMapper接口

Java Mybatis框架Dao層的實現與映射文件以及核心配置文件詳解分析

2、測試代理方式

Java Mybatis框架Dao層的實現與映射文件以及核心配置文件詳解分析

 

MyBatis映射文件深入

動態sql語句

動態sql語句描述【官方文檔】

Java Mybatis框架Dao層的實現與映射文件以及核心配置文件詳解分析

動態SQL之<if>

我們根據實體類的不同取值,使用不同的SQL語句來進行查詢。比如在 id如果不為空時可以根據id查詢,如果username不同空時還要加入用戶名作為條件。這種情況在我們的多條件組合查詢中經常會碰到。

  <!--sql語句抽取-->
  <sql id="selectUser">select * from user</sql>

  <select id="findByCondition" parameterType="user" resultType="user">
      <include refid="selectUser"></include>
      <where>
          <if test="id!=0">
              and id=#{id}
          </if>
          <if test="username!=null">
              and username=#{username}
          </if>
          <if test="password!=null">
              and password=#{password}
          </if>
      </where>
  </select>

當查詢條件id和username都存在時,測試代碼如下

Java Mybatis框架Dao層的實現與映射文件以及核心配置文件詳解分析

動態SQL之<foreach>

循環執行sql的拼接操作,例如: SELECT * FROM USER WHERE id IN (1,2,5)。

  <select id="findByIds" parameterType="list" resultType="user">
      <include refid="selectUser"></include>
      <where>
          <foreach collection="list" open="id in(" close=")" item="id" separator=",">
              #{id}
          </foreach>
      </where>
  </select>

測試代碼如下

Java Mybatis框架Dao層的實現與映射文件以及核心配置文件詳解分析

foreach標簽的屬性含義如下:
<foreach>標簽用于遍歷集合,它的屬性:
①collection:代表要遍歷的集合元素,注意編寫時不要寫#{}
②open:代表語句的開始部分
③close:代表結束部分
④item:代表遍歷集合的每個元素,生成的變量名
⑤sperator:代表分隔符

SQL片段抽取

Sql中可將重復的sql提取出來,使用時用include引用即可,最終達到sql重用的目的

Java Mybatis框架Dao層的實現與映射文件以及核心配置文件詳解分析

總結

MyBatis映射文件配置:
<select>:查詢
<insert>:插入
<update>:修改
<delete>:刪除
<where> : where條件
<if>: if判斷
<foreach>:循環
<sql> : sql片段抽取

 

Mybatis核心配置文件深入

typeHandlers標簽

無論是MyBatis在預處理語句(PreparedStatement)中設置一個參數時,還是從結果集中取出一個值時,都會用類型處理器將獲取的值以合適的方式轉換成Java類型。下表描述了一些默認的類型處理器(截取部分)。

Java Mybatis框架Dao層的實現與映射文件以及核心配置文件詳解分析

可以重寫類型處理器或創建你自己的類型處理器來處理不支持的或非標準的類型。具體做法為:實現org.apache.ibatis.type.TypeHandler接口,或繼承一個很便利的類org.apache.ibatis.type.BaseTypeHandler,然后可以選擇性地將它映射到一個JDBC類型。例如需求:一個Java中的Date數據類型,我想將之存到數據庫的時候存成一個1970年至今的毫秒數,取出來時轉換成java的Date,即java的Date與數據庫的varchar毫秒值之間轉換。
開發步驟:
①定義轉換類繼承類BaseTypeHandler<T>
②覆蓋4個未實現的方法,其中setNonNullarameter為java程序設置數據到數據庫的回調方法,getNullableResult為查詢時 mysql的字符串類型轉換成java的Type類型的方法
③在MyBatis核心配置文件中進行注冊
④測試轉換是否正確

public class DateTypeHandler extends BaseTypeHandler<Date> {
  //將java類型 轉換成 數據庫需要的類型
  public void setNonNullParameter(PreparedStatement preparedStatement, int i, Date date, JdbcType jdbcType) throws SQLException {
      long time = date.getTime();
      preparedStatement.setLong(i,time);
  }

  //將數據庫中類型 轉換成java類型
  //String參數  要轉換的字段名稱
  //ResultSet 查詢出的結果集
  public Date getNullableResult(ResultSet resultSet, String s) throws SQLException {
      //獲得結果集中需要的數據(long) 轉換成Date類型 返回
      long aLong = resultSet.getLong(s);
      Date date = new Date(aLong);
      return date;
  }

  //將數據庫中類型 轉換成java類型
  public Date getNullableResult(ResultSet resultSet, int i) throws SQLException {
      long aLong = resultSet.getLong(i);
      Date date = new Date(aLong);
      return date;
  }

  //將數據庫中類型 轉換成java類型
  public Date getNullableResult(CallableStatement callableStatement, int i) throws SQLException {
      long aLong = callableStatement.getLong(i);
      Date date = new Date(aLong);
      return date;
  }
}
  <!--注冊自定義類型處理器-->
  <typeHandlers>
      <typeHandler handler="com.longdi.handler.DateTypeHandler"></typeHandler>
  </typeHandlers>

測試添加操作

Java Mybatis框架Dao層的實現與映射文件以及核心配置文件詳解分析

數據庫數據:

Java Mybatis框架Dao層的實現與映射文件以及核心配置文件詳解分析

plugins標簽

MyBatis可以使用第三方的插件來對功能進行擴展,分頁助手PageHelper是將分頁的復雜操作進行封裝,使用簡單的方式即可獲得分頁的相關數據
開發步驟:

①導入通用PageHelper的坐標
②在mybatis核心配置文件中配置PageHelper插件
③測試分頁數據獲取

①導入通用PageHelper的坐標

      <dependency>
          <groupId>com.github.pagehelper</groupId>
          <artifactId>pagehelper</artifactId>
          <version>3.7.5</version>
      </dependency>
      <dependency>
          <groupId>com.github.jsqlparser</groupId>
          <artifactId>jsqlparser</artifactId>
          <version>0.9.1</version>
      </dependency>

②在mybatis核心配置文件中配置PageHelper插件

  <!--配置分頁助手插件   配置在mapper之前-->
  <plugins>
      <plugin interceptor="com.github.pagehelper.PageHelper">
          <property name="dialect" value="mysql"></property>
      </plugin>
  </plugins>

③測試分頁數據獲取

Java Mybatis框架Dao層的實現與映射文件以及核心配置文件詳解分析

獲得分頁相關的其他參數

      //獲得與分頁相關參數
      PageInfo<User> pageInfo = new PageInfo<User>(userList);
      System.out.println("當前頁:"+pageInfo.getPageNum());
      System.out.println("每頁顯示條數:"+pageInfo.getPageSize());
      System.out.println("總條數:"+pageInfo.getTotal());
      System.out.println("總頁數:"+pageInfo.getPages());
      System.out.println("上一頁:"+pageInfo.getPrePage());
      System.out.println("下一頁:"+pageInfo.getNextPage());
      System.out.println("是否是第一個:"+pageInfo.isIsFirstPage());
      System.out.println("是否是最后一個:"+pageInfo.isIsLastPage());

總結

MyBatis核心配置文件常用標簽:
1、properties標簽:該標簽可以加載外部的properties文件
2、 typeAliases標簽:設置類型別名
3、environments標簽:數據源環境配置標簽
4、typeHandlers標簽:配置自定義類型處理器
5、plugins標簽:配置MyBatis的插件

到此這篇關于Java Mybatis框架Dao層的實現與映射文件以及核心配置文件詳解分析的文章就介紹到這了,更多相關Java Mybatis內容請搜索服務器之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持服務器之家!

原文鏈接:https://blog.csdn.net/weixin_48838340/article/details/120937450

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 中文黄色一级片 | 免费久久久久久 | 毛片在线视频在线播放 | 日韩视频在线免费 | 狠狠操精品视频 | 午夜影视一区二区 | 国产三级影院 | 久久久久性视频 | 欧美日本另类 | 久久男人视频 | 日韩av成人 | 亚洲导航深夜福利涩涩屋 | 久久国产一二三 | 欧美a级在线免费观看 | 9999精品 | 91成人免费在线观看 | 成码无人av片在线观看网站 | 一道本不卡一区 | 久久久久久久久浪潮精品 | 欧美一级黄 | asian超清日本肉体pics | 国产乱淫av片免费 | 大学生一级毛片在线视频 | wwwxxx视频 | 国产精品麻豆一区二区三区 | 国产亚洲欧美日韩高清 | 日韩精品免费一区二区三区 | 国产福利不卡一区二区三区 | 久久草在线视频免费 | 久久综合福利 | 久久中文字幕在线观看 | 日韩视频―中文字幕 | 国产成人精品一区二区仙踪林 | www.91sese| 黄色免费不卡视频 | 九九热视频免费观看 | 黄污网站在线 | 毛片在线视频免费观看 | 成人毛片免费视频 | 老师你怎么会在这第2季出现 | 伊人99在线 |