Atitit mybatis的扩展使用sql udf,js java等语言

目录

1.1. 默认,mybatis使用xml,sql等语言来书写业务流程 1

2. 使用java扩展函数 1

2.1. 1.TypeHandler概念  1

2.2. 自定义类型处理器 2

2.3. 配置注册自定义处理器(mybatis.cfg.xml) 2

2.4. 使用 3

3. 默认TypeHandle}实现45个 4

3.1. StringTypeHandler 6

  1. 默认,mybatis使用xml,sql等语言来书写业务流程
  1. 使用java扩展函数
  1. 1.TypeHandler概念 

TypeHandler,类型转换器,在mybatis中用于实现java类型和JDBC类型的相互转换.mybatis使用prepareStatement来进行参数设置的时候,需要通过typeHandler将传入的java参数设置成合适的jdbc类型参数,这个过程实际上是通过调用PrepareStatement不同的set方法实现的;在获取结果返回之后,也需要将返回的结果转换成我们需要的java类型,这时候是通过调用ResultSet对象不同类型的get方法时间的;所以不同类型的typeHandler其实就是调用PrepareStatement和ResultSet的不同方法来进行类型的转换,有些时候会在调用PrepareStatement和ResultSet的相关方法之前,可以对传入的参数进行一定的处理.

---------------------

使用场景:mybatis在预处理语句(PreparedStatement)中设置一个参数时,或者从结果集(ResultSet)中取出一个值时,都会用到TypeHandler。它的作用就是将java类型(javaType)转化为jdbc类型(jdbcType),或者将jdbc类型(jdbcType)转化为java类型(javaType)。

    1. 自定义类型处理器
  • 实现TypeHandler接口或者继承BaseTypehandler
    TypeHandler是一个接口,它定义了如下四个方法,实现类必须去实现,方法如下:

void setParameter(PreparedStatement var1, int var2, T var3,JdbcType var4) throws SQLException;

T getResult(ResultSet var1, String var2) throws SQLException;

T getResult(ResultSet var1, int var2) throws SQLException;

T getResult(CallableStatement var1, int var2) throws SQLException;

}

setParameter:通过preparedStatement对象设置参数,将T类型的数据存入数据库。

getResult:通过列名或者下标来获取结果数据,也可以通过CallableStatement获取数据。

  1. 配置注册自定义处理器(mybatis.cfg.xml)

<!--自定义类型处理器-->

<typeHandlers>

<typeHandler handler="com.mdd.mybatis.typehandle.MyTypeHandle"></typeHandler>

</typeHandlers>

最后,可以让 MyBatis 为你查找类型处理器:

<!-- mybatis-config.xml --><typeHandlers>

<package name="org.mybatis.example"/></typeHandlers>

注意在使用自动检索(autodiscovery)功能的时候,只能通过注解方式来指定 JDBC 的类型。

  1. 使用 

不是使用的常见的双括号函数形式,而是模板语法指定处理器

#{name,typeHandler=com.mdd.mybatis.typehandle.MyTypeHandle},

但注册完成之后也仍然不能起作用,因为还需要标识那些参数和返回的结果是需要使用这个TypeHandler进行处理的;具体来说,在插入数据和对返回结果进行处理的时候,可以对参数配置javaType和jdbcType或直接配置typeHandler属性来进行标识

下面是插入数据时标识用指定TypeHandler进行处理

---------------------

要注意 MyBatis 不会窥探数据库元信息来决定使用哪种类型,所以你必须在参数和结果映射中指明那是 VARCHAR 类型的字段, 以使其能够绑定到正确的类型处理器上

  1. 默认TypeHandle}实现45个

public TypeHandlerRegistry() {

register(Boolean.class, new BooleanTypeHandler());

register(boolean.class, new BooleanTypeHandler());

register(JdbcType.BOOLEAN, new BooleanTypeHandler());

register(JdbcType.BIT, new BooleanTypeHandler());

register(Byte.class, new ByteTypeHandler());

register(byte.class, new ByteTypeHandler());

register(JdbcType.TINYINT, new ByteTypeHandler());

register(Short.class, new ShortTypeHandler());

register(short.class, new ShortTypeHandler());

register(JdbcType.SMALLINT, new ShortTypeHandler());

register(Integer.class, new IntegerTypeHandler());

register(int.class, new IntegerTypeHandler());

register(JdbcType.INTEGER, new IntegerTypeHandler());

register(Long.class, new LongTypeHandler());

register(long.class, new LongTypeHandler());

register(Float.class, new FloatTypeHandler());

register(float.class, new FloatTypeHandler());

register(JdbcType.FLOAT, new FloatTypeHandler());

register(Double.class, new DoubleTypeHandler());

register(double.class, new DoubleTypeHandler());

register(JdbcType.DOUBLE, new DoubleTypeHandler());

register(Reader.class, new ClobReaderTypeHandler());

register(String.class, new StringTypeHandler());

register(String.class, JdbcType.CHAR, new StringTypeHandler());

register(String.class, JdbcType.CLOB, new ClobTypeHandler());

register(String.class, JdbcType.VARCHAR, new StringTypeHandler());

register(String.class, JdbcType.LONGVARCHAR, new ClobTypeHandler());

register(String.class, JdbcType.NVARCHAR, new NStringTypeHandler());

register(String.class, JdbcType.NCHAR, new NStringTypeHandler());

register(String.class, JdbcType.NCLOB, new NClobTypeHandler());

register(JdbcType.CHAR, new StringTypeHandler());

register(JdbcType.VARCHAR, new StringTypeHandler());

register(JdbcType.CLOB, new ClobTypeHandler());

register(JdbcType.LONGVARCHAR, new ClobTypeHandler());

register(JdbcType.NVARCHAR, new NStringTypeHandler());

register(JdbcType.NCHAR, new NStringTypeHandler());

register(JdbcType.NCLOB, new NClobTypeHandler());

register(Object.class, JdbcType.ARRAY, new ArrayTypeHandler());

register(JdbcType.ARRAY, new ArrayTypeHandler());

register(BigInteger.class, new BigIntegerTypeHandler());

register(JdbcType.BIGINT, new LongTypeHandler());

register(BigDecimal.class, new BigDecimalTypeHandler());

register(JdbcType.REAL, new BigDecimalTypeHandler());

register(JdbcType.DECIMAL, new BigDecimalTypeHandler());

register(JdbcType.NUMERIC, new BigDecimalTypeHandler());

register(InputStream.class, new BlobInputStreamTypeHandler());

register(Byte[].class, new ByteObjectArrayTypeHandler());

register(Byte[].class, JdbcType.BLOB, new BlobByteObjectArrayTypeHandler());

register(Byte[].class, JdbcType.LONGVARBINARY, new BlobByteObjectArrayTypeHandler());

register(byte[].class, new ByteArrayTypeHandler());

register(byte[].class, JdbcType.BLOB, new BlobTypeHandler());

register(byte[].class, JdbcType.LONGVARBINARY, new BlobTypeHandler());

register(JdbcType.LONGVARBINARY, new BlobTypeHandler());

register(JdbcType.BLOB, new BlobTypeHandler());

register(Object.class, UNKNOWN_TYPE_HANDLER);

register(Object.class, JdbcType.OTHER, UNKNOWN_TYPE_HANDLER);

register(JdbcType.OTHER, UNKNOWN_TYPE_HANDLER);

register(Date.class, new DateTypeHandler());

register(Date.class, JdbcType.DATE, new DateOnlyTypeHandler());

register(Date.class, JdbcType.TIME, new TimeOnlyTypeHandler());

register(JdbcType.TIMESTAMP, new DateTypeHandler());

register(JdbcType.DATE, new DateOnlyTypeHandler());

register(JdbcType.TIME, new TimeOnlyTypeHandler());

register(java.sql.Date.class, new SqlDateTypeHandler());

register(java.sql.Time.class, new SqlTimeTypeHandler());

register(java.sql.Timestamp.class, new SqlTimestampTypeHandler());

---------------------

  1. StringTypeHandler 

public class StringTypeHandler extends BaseTypeHandler<String> {
    public StringTypeHandler() {
    }

public void setNonNullParameter(PreparedStatement ps, int i, String parameter, JdbcType jdbcType) throws SQLException {
        ps.setString(i, parameter);
    }

Atitit mybatis的扩展使用sql udf,js java等语言 目录 1.1. 默认,mybatis使用xml,sql等语言来书写业务流程 1 2. 使用java扩展函数 1 2.1.相关推荐

  1. flink sql udf jar包_Flink 生态:一个案例快速上手 PyFlink

    简介: Flink 从 1.9.0 版本开始增加了对 Python 的支持(PyFlink),在刚刚发布的 Flink 1.10 中,PyFlink 添加了对 Python UDFs 的支持,现在可以 ...

  2. sql server解析xml属性为表格_[Mybatis][基础支持层]mapper xml sql 解析

    该系列文章针对 Mybatis 3.5.1 版本 Mybatis 中 标签解析,主要是为了得到两大部分数据 1.Mapper.class 接口 2.SQL 执行语句,结果集映射关系等数据 在上一章中提 ...

  3. jsp基础代码片段(含sql与js和jsp的交互)与简易贴吧网站项目

    因为老是翘掉学校jsp的课程,结果结课作业本来是一个小组做一个网站,结果我被老师指名道姓的要求一个人做一个网站,于是学了几天jsp,用了2天时间做了个网站 , 但安全性几乎为0 , 先写一篇博客记录一 ...

  4. 【Java从0到架构师】MyBatis - 增删改、动态 SQL

    MyBatis - 增删改.动态 SQL 动态 SQL if 标签 where 标签 sql 标签 foreach 标签 添加 主键设置 批量添加 - 利用 foreach 标签 更新 删除 批量删除 ...

  5. aop拦截mybatis执行sql_Java进阶架构之开源框架面试题系列:Spring+SpringMVC+MyBatis

    开源框架 Spring5 Framework体系结构 spring5概述 Spring5环境搭建 Spring MVC AOP源码解析 IOC源码解析 Mybatis spring 什么是Spring ...

  6. JAVA计算机毕业设计高校教材征订管理系统Mybatis+源码+数据库+lw文档+系统+调试部署

    JAVA计算机毕业设计高校教材征订管理系统Mybatis+源码+数据库+lw文档+系统+调试部署 JAVA计算机毕业设计高校教材征订管理系统Mybatis+源码+数据库+lw文档+系统+调试部署 本源 ...

  7. JAVA计算机毕业设计学术会议信息网站Mybatis+源码+数据库+lw文档+系统+调试部署

    JAVA计算机毕业设计学术会议信息网站Mybatis+源码+数据库+lw文档+系统+调试部署 JAVA计算机毕业设计学术会议信息网站Mybatis+源码+数据库+lw文档+系统+调试部署 本源码技术栈 ...

  8. java毕业设计水利施工安全检测系统设mybatis+源码+调试部署+系统+数据库+lw

    java毕业设计水利施工安全检测系统设mybatis+源码+调试部署+系统+数据库+lw java毕业设计水利施工安全检测系统设mybatis+源码+调试部署+系统+数据库+lw 本源码技术栈: 项目 ...

  9. java计算机毕业设计web企业档案管理系统MyBatis+系统+LW文档+源码+调试部署

    java计算机毕业设计web企业档案管理系统MyBatis+系统+LW文档+源码+调试部署 java计算机毕业设计web企业档案管理系统MyBatis+系统+LW文档+源码+调试部署 本源码技术栈: ...

  10. JAVA计算机毕业设计大连环保公益网Mybatis+系统+数据库+调试部署

    JAVA计算机毕业设计大连环保公益网Mybatis+系统+数据库+调试部署 JAVA计算机毕业设计大连环保公益网Mybatis+系统+数据库+调试部署 本源码技术栈: 项目架构:B/S架构 开发语言: ...

最新文章

  1. idea提交git差件_多人合作使用git,推送代码、和并分支
  2. 打算近期去深圳找工作
  3. 2021-03-20 包含生成树的性质
  4. iphone如何信任软件_你知道iPhone手机如何正确卸载软件?怪不得手机内存总是不够用!...
  5. 中标麒麟linux系统忘记root密码,中标麒麟(龙芯CPU)--忘记root密码怎么修改?
  6. Git使用技巧(1)-- 配置【持续更新】
  7. leedcode04:转换字符串的最少操作次数
  8. idea隐藏 .iml 和 .idea 等自动生成文件
  9. 嵌入式Linux系统编程学习之二十六多线程概述
  10. math api matrix
  11. ERROR: Could not find a version that satisfies the requirement PIL (from versions: none)
  12. 本周论文推荐(10.26-11.1)
  13. 利用Mircosoft URLRewriter.dll实现页面伪静态[转]
  14. Mybaitis框架与Spring整合详解(三)
  15. 求定积分 c++实现
  16. PASCAL VOC 2012数据集
  17. Android Contact分析(二):实战篇之读取联系人,模糊查询,通过汉字返回拼音
  18. java wildcard_java泛型 wildcard
  19. There appears to be a gap in the edit log. We expected txid 867311, but got txid 867402.
  20. Linux实战教学笔记28:企业级LNMP环境应用实践

热门文章

  1. php arrayfillkeys,PHP中的array_fill_keys()函数
  2. linux的yum命令无法使用在哪里下载_Centos Linux下载rpm软件包(基础环境篇)-从零到无 - 飞翔的小胖猪...
  3. oracle 列出asm磁盘,如何列出ASM磁盘组的所有磁盘
  4. linux命令执行绕过,命令执行绕过
  5. java项目关联关系_Mybatis一对多关联关系映射实现过程解析
  6. 泰拉瑞亚测试速度的软件,泰拉瑞亚1.4工具速度是多少 泰拉瑞亚1.4工具速度介绍-游侠网...
  7. 开始php脚本,php bypass disable function
  8. Windows下配置安装Git(一)
  9. 拒绝瞎忙,高效的学习与工作经验谈
  10. Spring实例化bean的三种方法