最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Mybatis自定義typeHandle過程解析

 更新時間:2020年04月22日 09:50:46   作者:知識追尋者  
這篇文章主要介紹了Mybatis自定義typeHandle過程解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下

一 前言

本篇文章的基礎是建立在mybatis配置

二 準備工作

2.1建表語句

CREATE TABLE `customer` (
 `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主鍵',
 `customer_name` varchar(255) DEFAULT NULL COMMENT '顧客名稱',
 `gender` varchar(255) DEFAULT NULL COMMENT '性別',
 `telephone` varchar(255) DEFAULT NULL COMMENT '電話號碼',
 `register_time` timestamp NULL DEFAULT NULL COMMENT '注冊時間',
 PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='顧客表';

2.2 實體

public class Customer {
  // 主鍵
  private Long id;
  // 客戶姓名
  private String customer_name;
  // 性別
  private String gender;
  // 電話
  private String telephone;
  // 注冊時間
  private Long register_time;
  // 省略 set get
 } 

三 自定義TypeHandler

自定義TypeHandler實現(xiàn)一個業(yè)務邏輯就是 當插入數(shù)據(jù)時可以將時間戳轉為timestamp格式;當查詢數(shù)據(jù)得時候再將數(shù)據(jù)庫中得timestamp格式時間轉為時間戳;好吧知識追尋者也是無聊透頂了做這種操作,不過易于讀者理解;

/**
 * @Author lsc
 * <p> 一個無聊的業(yè)務邏輯 輸入的是時間戳,到數(shù)據(jù)庫中的是 timestamp 格式 輸出的又是時間戳 </p>
 */
@MappedJdbcTypes(JdbcType.TIMESTAMP)
@MappedTypes(Long.class)
public class TimeStringHandler<T> extends BaseTypeHandler<T> {


  public void setNonNullParameter(PreparedStatement preparedStatement, int i, T t, JdbcType jdbcType) throws SQLException {
    // 將 時間戳轉為 LocalDateTime
    LocalDateTime localDateTime = LocalDateTime.ofInstant(Instant.ofEpochSecond((java.lang.Long) t), ZoneOffset.ofHours(8));
    // 參數(shù)設置
    System.out.println("業(yè)務邏輯1");
    preparedStatement.setString(i,localDateTime.toString());
  }

  public T getNullableResult(ResultSet resultSet, String s) throws SQLException {
    System.out.println("業(yè)務邏輯2");
    String time = resultSet.getString(s);
    LocalDateTime localDateTime = LocalDateTime.parse(time, DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
    Long second = localDateTime.toEpochSecond(ZoneOffset.ofHours(8));
    return (T) second;
  }

  public T getNullableResult(ResultSet resultSet, int i) throws SQLException {
    System.out.println("業(yè)務邏輯3");
    String time = resultSet.getString(i);
    LocalDateTime localDateTime = LocalDateTime.parse(time, DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
    Long second = localDateTime.toEpochSecond(ZoneOffset.ofHours(8));
    return (T) second;
  }

  public T getNullableResult(CallableStatement callableStatement, int i) throws SQLException {
    System.out.println("業(yè)務邏輯4");
    String time = callableStatement.getString(i);
    LocalDateTime localDateTime = LocalDateTime.parse(time, DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
    Long second = localDateTime.toEpochSecond(ZoneOffset.ofHours(8));
    return (T) second;
  }
}

四 mappe接口

public interface CustomerMapper {

  // 添加客戶
  int addCustomer(Customer customer);
  // 查詢客戶
  List<Customer> getCustomer();
}

五 sql映射文件

sql映射文件中在使用得字段register_time中做專門得數(shù)據(jù)類型處理,這樣不用配置到全局配置文件中,可以針對特定字段處理是個不錯得選擇;這邊實現(xiàn)得邏輯是兩個部分,查詢語句用于返回時將register_time使用類型處理器處理;插入語句用于將數(shù)據(jù)進入數(shù)據(jù)庫時使用register_time使用類型處理器處理。

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
    PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
    "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="com.zszxz.typehandler.mapper.CustomerMapper">

  <resultMap id="customerMap" type="customer" autoMapping="true">
    <result column="register_time" property="register_time" typeHandler="com.zszxz.typehandler.handler.TimeStringHandler"></result>
  </resultMap>

  <select id="getCustomer" resultMap="customerMap" >
    select * from `customer`
  </select>

  <insert id="addCustomer" parameterType="customer">
     insert into `customer`(
      `customer_name`,
      `gender`,
      `telephone`,
      `register_time`
     )values (
      #{customer_name},
      #{gender},
      #{telephone},
      #{register_time,javaType=Long,jdbcType=TIMESTAMP,typeHandler=com.zszxz.typehandler.handler.TimeStringHandler}
     )
  </insert>
</mapper>

六測試類

測試類 也是分為2部分,查詢和新增部分;

/**
 * @Author lsc
 * <p> </p>
 */
@RunWith(JUnit4.class)
public class TypeHandlerTest {

  SqlSession sqlSession = null;

  // @Before 會在執(zhí)行測試類之前執(zhí)行該方法
  @Before
  public void before() throws IOException {
    // 資源路徑 resource目錄下
    String resource = "mybatis-config.xml";
    // 配置mybatis獲得輸入流
    InputStream inputStream = Resources.getResourceAsStream(resource);
    // 創(chuàng)建 SqlSessionFactory
    SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
    //從 SqlSessionFactory 中獲取 SqlSession
    sqlSession= sqlSessionFactory.openSession();
  }

  @Test
  public void testInsert(){
    // 獲得mapper的形式
    CustomerMapper mapper = sqlSession.getMapper(CustomerMapper.class);
    Customer customer = new Customer();
    customer.setCustomer_name("知識追尋者");
    customer.setRegister_time(1580739214L);
    customer.setGender("男");
    customer.setTelephone("999");
    // 添加客戶
    mapper.addCustomer(customer);
    sqlSession.commit();
    sqlSession.close();
  }

  @Test
  public void testSelect(){
    // 獲得mapper的形式
    CustomerMapper mapper = sqlSession.getMapper(CustomerMapper.class);
    List<Customer> customerList = mapper.getCustomer();
    for (Customer customer :customerList){
      System.out.println(customer.getCustomer_name());
      System.out.println(customer.getRegister_time());
    }
    sqlSession.commit();
    sqlSession.close();
  }
}

七 測試插入數(shù)據(jù)

插入數(shù)據(jù)時原本register_time是時間戳,從打印得SQL參數(shù)2020-02-03T22:13:34(String)可以看見入庫時就變成了timestamp支持的格式入庫;

[DEBUG] 2020-02-03 23:39:33,018 method:org.apache.ibatis.logging.jdbc.BaseJdbcLogger.debug(BaseJdbcLogger.java:159)
==> Preparing: insert into `customer`( `customer_name`, `gender`, `telephone`, `register_time` )values ( ?, ?, ?, ? )
業(yè)務邏輯1
[DEBUG] 2020-02-03 23:39:33,052 method:org.apache.ibatis.logging.jdbc.BaseJdbcLogger.debug(BaseJdbcLogger.java:159)
==> Parameters: 知識追尋者(String), 男(String), 999(String), 2020-02-03T22:13:34(String)
[DEBUG] 2020-02-03 23:39:33,116 method:org.apache.ibatis.logging.jdbc.BaseJdbcLogger.debug(BaseJdbcLogger.java:159)
<== Updates: 1

八 測試查詢數(shù)據(jù)

原本數(shù)據(jù)庫中是timestamp支持的格式得時間,出來就是時間戳;

[DEBUG] 2020-02-03 23:39:00,371 method:org.apache.ibatis.logging.jdbc.BaseJdbcLogger.debug(BaseJdbcLogger.java:159)
==> Preparing: select * from `customer`
[DEBUG] 2020-02-03 23:39:00,410 method:org.apache.ibatis.logging.jdbc.BaseJdbcLogger.debug(BaseJdbcLogger.java:159)
==> Parameters:
業(yè)務邏輯2
[DEBUG] 2020-02-03 23:39:00,468 method:org.apache.ibatis.logging.jdbc.BaseJdbcLogger.debug(BaseJdbcLogger.java:159)
<== Total: 1
知識追尋者
1580739214

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • 分享Spring的下載組件

    分享Spring的下載組件

    這篇文章主要為大家分享了Spring的下載組件,感興趣的小伙伴們可以參考一下
    2016-05-05
  • Java 中組合模型之對象結構模式的詳解

    Java 中組合模型之對象結構模式的詳解

    這篇文章主要介紹了Java 中組合模型之對象結構模式的詳解的相關資料,希望通過本文能幫助到大家理解應用對象結構模型,需要的朋友可以參考下
    2017-09-09
  • JAVA通過HttpClient發(fā)送HTTP請求的方法示例

    JAVA通過HttpClient發(fā)送HTTP請求的方法示例

    本篇文章主要介紹了JAVA通過HttpClient發(fā)送HTTP請求的方法示例,詳細的介紹了HttpClient使用,具有一定的參考價值,有興趣的可以了解一下
    2017-09-09
  • Swagger屏蔽某些接口顯示的操作

    Swagger屏蔽某些接口顯示的操作

    這篇文章主要介紹了Swagger屏蔽某些接口顯示的操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • Java三種移位運算符原理解析

    Java三種移位運算符原理解析

    這篇文章主要介紹了Java三種移位運算符原理解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-02-02
  • Java合并兩個及以上有序鏈表的示例詳解

    Java合并兩個及以上有序鏈表的示例詳解

    這篇文章主要通過兩個例題為大家介紹一下Java合并兩個及以上有序鏈表的實現(xiàn)方法,文中的示例代碼講解詳細,具有一定的學習價值,需要的可以參考一下
    2022-11-11
  • SpringBoot整合SpringSecurity實現(xiàn)圖形驗證碼功能

    SpringBoot整合SpringSecurity實現(xiàn)圖形驗證碼功能

    圖形驗證碼是一種用于區(qū)分用戶是人類還是計算機程序的自動化測試,它通常用于防止自動化軟件進行惡意操作,如濫用在線服務、暴力破?解密碼或進行垃圾郵件發(fā)送等,下面將介紹?Spring?Boot?整合?Spring?Security?實現(xiàn)圖形驗證碼功能,需要的朋友可以參考下
    2024-12-12
  • Java使用@Validated注解進行參數(shù)驗證的方法

    Java使用@Validated注解進行參數(shù)驗證的方法

    這篇文章主要介紹了Java使用@Validated注解進行參數(shù)驗證的方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-08-08
  • JAVA JSP頁面技術之EL表達式整理歸納總結

    JAVA JSP頁面技術之EL表達式整理歸納總結

    這篇文章主要介紹了java中JSP頁面技術之EL表達式概念作用以及語法等的使用,需要的朋友可以參考
    2017-04-04
  • 淺談Java中Spring Boot的優(yōu)勢

    淺談Java中Spring Boot的優(yōu)勢

    在本篇文章中小編給大家分析了Java中Spring Boot的優(yōu)勢以及相關知識點內容,興趣的朋友們可以學習參考下。
    2018-09-09

最新評論

阜南县| 广宗县| 阿拉善左旗| 班玛县| 武鸣县| 泽州县| 怀化市| 正安县| 永宁县| 乌兰浩特市| 西林县| 岑巩县| 库尔勒市| 崇明县| 怀宁县| 泰顺县| 章丘市| 昭觉县| 河源市| 仁化县| 黎川县| 东源县| 武义县| 河北省| 青龙| 织金县| 通城县| 通化县| 马公市| 江门市| 来安县| 汉源县| 栾川县| 潞城市| 黄骅市| 赤水市| 政和县| 万源市| 达拉特旗| 寻甸| 陆良县|