MyBatis核心配置文件深入

五、e2studio VS STM32CubeIDE之汉化 介绍stm32cubeide汉化方案和汉化包e2studio自带汉化包,在安装过程中可选择安装e2studio STM32CubeIDE切换中英文。 阅读详情

目录

1.typeHandler标签

2.plugins标签

3.知识小结


1.typeHandler标签

无论是MyBatis在预处理语句(PrepareedStatement)中设置一个参数时,还是从结果集中取出一个值时,都会用类型处理器将获取的值以合适的方式转换成java类型。

类型处理器Java类型JDBC类型
BooleanTypeHandlerjava.lang.Boolean.boolean数据库兼容的BOOLEAN
ByteTypeHandlerjava.lang.Byte.byte数据库兼容的NUMERIC或BYTE
ShortTypeHandlerjava.lang.Short.short数据库兼容的NUMERIC或SHORT INTEGER
IntegerTypeHandlerjava.lang.Integer.int数据库兼容的NUMERIC或INTEGER
LongTypeHandlerjava.lang.Long.long数据库兼容的NUMERIC或LONG INTEGER

重写类型处理器或创建自己的类型处理器来处理不支持的或非标准的类型,具体做法为:实现org.apache.ibatis.type.TypeHandler接口,或继承一个很便利的类org.apache.ibatis.type.BaseTypeHandler,然后可以选择性的将它映射到一个JDBC类型。例如需求:一个java中的Date数据类型,我想要将之存到数据库的时候存成一个1970年至今的毫秒数,取出来时转换成java的Date,即java的Date与数据库中的varchar毫秒值之间的转换。

开发步骤为:

  • 定义转换类型类BaseTypeHandler<T>
  • 覆盖4个未实现的方法,其中setNonNullParameter为java程序设置数据到数据库的回调方法,getNullableResult为查询时mysql的字符串类型转换成java的Type类型的方法
  • 在MyBatis核心配置文件中进行注册
  • 测试转换是否正确
package com.caoyan.handler;

import java.sql.CallableStatement;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Date;

import org.apache.ibatis.type.BaseTypeHandler;
import org.apache.ibatis.type.JdbcType;

public class DateTypeHandler extends BaseTypeHandler<Date> {

    // 将数据库中类型 转换成java类型
    // String参数 要转换的字段名称
    // ResultSet 查询出的结果集
    @Override
    public Date getNullableResult(ResultSet resultSet, String s) throws SQLException {
        // 获得结果集中需要的数据(long) 转换成Date类型 返回
        Long long1 = resultSet.getLong(s);
        Date date = new Date(long1);
        return date;
    }

    // 将数据库中类型 转换成java类型
    @Override
    public Date getNullableResult(ResultSet resultSet, int i) throws SQLException {
        Long long1 = resultSet.getLong(i);
        Date date = new Date(long1);
        return date;
    }

    // 将数据库中类型 转换成java类型
    @Override
    public Date getNullableResult(CallableStatement callableStatement, int i) throws SQLException {
        Long long1 = callableStatement.getLong(i);
        Date date = new Date(long1);
        return date;
    }

    // 将java类型转换为数据库需要的类型
    @Override
    public void setNonNullParameter(PreparedStatement preparedStatement, int i, Date date, JdbcType jdbcType)
            throws SQLException {
        long time = date.getTime();
        preparedStatement.setLong(i, time);
    }

}

在sqlMapConfig.xml中配置类型处理器。 

<!-- 注册类型处理器 -->
<typeHandlers>
    <typeHandler handler="com.caoyan.handler.DateTypeHandler" />
</typeHandlers>
package com.caoyan.test;

import java.io.IOException;
import java.io.InputStream;
import java.util.Date;

import com.caoyan.domain.User;
import com.caoyan.mapper.UserMapper;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Test;

public class MapperTest {
    @Test
    public void test1() throws IOException {
        InputStream resourceAsStream = Resources.getResourceAsStream("sqlMapConfig.xml");
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
        SqlSession sqlSession = sqlSessionFactory.openSession();
        UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
        // 创建user
        User user = new User();
        user.setUsername("ceshi");
        user.setPassword("abc");
        user.setBirthday(new Date());
        // 执行保存操作
        userMapper.save(user);
        sqlSession.commit();
        sqlSession.close();
    }

    @Test
    public void test2() throws IOException {
        InputStream resourceAsStream = Resources.getResourceAsStream("sqlMapConfig.xml");
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
        SqlSession sqlSession = sqlSessionFactory.openSession();
        UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
        User user = userMapper.findById(8);
        System.out.println("user中的birthday:" + user.getBirthday());
        sqlSession.commit();
        sqlSession.close();
    }
}

2.plugins标签

MyBatis可以使用第三方的插件来对功能进行扩展,分页助手PageHelper是将分页的复杂操作进行封装,使用简单的方式即可获得分页的相关数据。开发步骤如下:

  • 导入通用PageHelper的坐标
    <!-- 分页助手 -->
    <dependency>
      <groupId>com.github.pagehelper</groupId>
      <artifactId>pagehelper</artifactId>
      <version>5.3.0</version>
    </dependency>
    <dependency>
      <groupId>com.github.jsqlparser</groupId>
      <artifactId>jsqlparser</artifactId>
      <version>4.4</version>
    </dependency>
  • 在mybatis核心配置文件中配置PageHelper插件
    <!-- 版本5.0以下配置分页助手插件 -->
    <!-- <plugins>
        <plugin interceptor="com.github.pagehelper.PageHelper">
            <property name="dialect" value="mysql" />
        </plugin>
    </plugins> -->

    <!-- 版本5.0以上配置分页助手插件 -->
    <plugins>
        <plugin interceptor="com.github.pagehelper.PageInterceptor"></plugin>
    </plugins>
  • 测试分页数据获取
    @Test
    public void test3() throws IOException {
        InputStream resourceAsStream = Resources.getResourceAsStream("sqlMapConfig.xml");
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
        SqlSession sqlSession = sqlSessionFactory.openSession();
        UserMapper userMapper = sqlSession.getMapper(UserMapper.class);

        // 设置分页相关参数,当前页+每页显示的条数
        PageHelper.startPage(2, 3);

        List<User> userList = userMapper.findAll();
        for (User user : userList) {
            System.out.println(user);
        }
        sqlSession.close();
    }

3.知识小结

MyBatis核心配置文件常用标签:

  • properties标签:该标签可以加载外部的properties文件
  • typeAlias标签:设置类型别名
  • environments标签:数据源环境配置标签
  • typeHandlers标签:配置自定义类型处理器
  • plugins标签:配置MyBatis的插件
深入剖析RDMA Netlink:Linux内核中高效通信的基石 RDMA Netlink:Linux内核中高效通信控制的核心机制 RDMA技术通过绕过内核实现高速数据传输,但其管理控制仍需内核参与。drivers/infiniband/core/netlink.c文件作为RDMA子系统的心脏,构建了用户空间与内核间的高效通信桥梁。该模块采用模块化客户端架构,通过全局数组管理不同类型的RDMA功能,如设备管理、连接服务和链路层操作。从最初的全局锁到细粒度读写锁的演进,展现了Linux内核追求高性能的持续优化。同时,通过条件编译支持新旧内核版本和网络命名空间,体现了稳定性与 阅读详情

相关推荐

从 0 搭建一个智能问答工单系统:低代码 + 大模型的实战融合方案

企业智能问答工单系统解决方案:通过橙武低代码平台集成DeepSeek大模型,实现自动化工单处理与智能问答。系统能自动匹配知识库、分类工单,支持多渠道接入,显著提升响应效率(答复时间从12小时降至5分钟)。采用MySQL8表结构设计,结合向量数据库实现语义搜索,客服人力需求减少70%。系统支持知识库持续优化,AI答复满意度达88%,助力企业低成本构建智能客服中台。

欢迎来到我的优快云博客!我专注于技术创新和数字化转型,特别是在低代码平台、人工智能和大数据分析领域的探索与应用。通过深入分析各种行业案例,帮助企业加速数字化进程,提升运营效率与创新能力。在这里,您将找到关于低代码平台、AI技术、数据分析与 1549

Mybatis中typeHandler的简单使用

typeHandlers标签 无论是 MyBatis 在预处理语句(PreparedStatement)中设置一个参数时,还是从结果集中取出一个值时, 都会用类型处理器将获取的值以合适的方式转换成 Java 类型。 你可以重写类型处理器或创建你自己的类型处理器来处理不支持的或非标准的类型。具体做法为:实现 org.apache.ibatis.type.TypeHandler 接口, 或继承一个很便...

Tang_cancan的博客 575

AMBA-ATB spec

AMBA-ATB spec 1. ATB总线的用途及版本 1.1 ATB总线用途 一般来说,ATB(Advanced Trace Bus)总线用来在ARM的coresight组件之间传递trace数据。如下图所示: 1.2 ATB总线的版本 ATB(Advanced Trace Bus)共有两个版本,其中v1.0作为AMBA3的一部分,于2006年发布的,而v1.1则是2012年随着AMBA4发布的。ATB规范新增了数据(主要针对trace data)不可知的接口,以便在跟踪系统中根据 AMBA 规范跟

weixin_43781229的博客 7352

【Mybatis系列】Mybatis之TypeHandler入门

TypeHandler” 通常指的是在软件开发中处理数据类型转换和操作的组件或模块。具体来说,TypeHandler 主要用于将一个数据类型转换为另一个数据类型,以便在不同的上下文中使用。在不同的编程语言和框架中,TypeHandler 的实现方式可能有所不同。在持久化层,比如与数据库的交互中,TypeHandler 可能用于将数据库中的数据类型与应用程序中的数据类型进行映射。例如,将数据库中的字符串字段映射为应用程序中的整数类型。在处理用户输入或从网络传输数据时,可能需要将字符串转换为数字、日期等。

优快云站内信: https://i.youkuaiyun.com/#/msg/chat/qyj19920704 1万+

GD32F407工程模板搭建全记录:从零整理固件库、创建文件夹到编译通过

本文详细记录了GD32F407工程模板的搭建过程,从固件库整理、目录规划到Keil环境配置,帮助开发者快速搭建可维护的嵌入式工程结构。重点介绍了开发环境搭建、工程目录设计、Keil配置及常见编译问题解决方案,适合嵌入式开发者参考。

weixin_29164497的博客 121

LIGGGHTS颗粒模拟入门:从DEM原理到工程实践

离散元法(DEM)是一种用于模拟颗粒物质行为的数值方法,其核心原理是通过计算每个颗粒的运动和相互作用来预测颗粒系统的宏观行为。该方法基于牛顿第二定律和接触力学模型,能够精确描述颗粒间的碰撞、摩擦和粘结等微观机制。在工程实践中,DEM技术为优化工业设备设计、预测材料流动和减少实验成本提供了重要价值。它广泛应用于制药造粒、矿石破碎、粉体输送和农业加工等领域,帮助工程师和研究人员深入理解颗粒系统的复杂动力学。LIGGGHTS作为一款基于LAMMPS的开源DEM软件,继承了其高效的并行计算架构,并针对颗粒模拟进行了

weixin_33979203的博客 419

MyBatis自定义类型处理器 TypeHandler

在项目开发中经常会遇到一个问题: 当我们在javabean中自定义了枚举类型或者其它某个类型,但是在数据库中存储时往往需要转换成数据库对应的类型,并且在从数据库中取出来时也需要将数据库类型转换为javabean中的对应类型。比如:javabean中字段类型为Date,数据库中存储的是varchar类型;javabean中字段类型是Enum,数据库中存储的是String或者Integer。 因为有大...

lmb55的专栏 5万+

反爬虫:POST 请求参数中 Sign 的加密机制详解,并设计带 Sign 校验的网站

本文介绍了API请求中sign签名的生成原理及实现方法。sign是通过对请求参数加密生成的一串字符串,用于验证请求合法性,防止参数篡改、重放攻击和伪造请求。其生成步骤包括参数排序、拼接字符串、加盐和哈希加密。文章还演示了如何在FastAPI后端实现带sign验证的新闻网站,包括参数校验、时间戳验证和签名比对等安全措施,有效提升API安全性,增加爬虫逆向难度。

数据知道的博客 4079

MyBatis--系统定义的TypeHandler、BaseTypeHandler和StringTypeHandler源码分析

系统定义的TypeHandler MyBatis 内部定义了许多有用的 typeHandler,如下表所示。 类型处理器 Java类型 JDBC类型 BooleanTypeHandler java.lang.Boolean,boolean 数据库兼容的 BOOLEAN ByteTypeHandler java.lang.Byte,byte 数据库兼容的 NUMERIC 或 BY...

吴声子夜歌的博客 1万+

【YOLOv8科研级优化】基于YOLOv9的GELAN模块重构C2f结构,实现精度与效率的同步提升

打开确保模型解析器能识别GELANBlock模块。通过将YOLOv9的GELAN模块集成到YOLOv8的C2f模块中,我们实现了一个“强特征表达+高效计算”的目标检测模型。这个改进不仅在工程上能提升复杂场景下的检测效果,更在科研上提供了“多分支特征融合”的创新思路——这种思路可以延伸到其他检测网络(如Faster R-CNN、SSD)的改进中,帮你在论文中打造独特的研究点。

know_F0727的博客 204

【100%通过率】2024华为OD机试真题E卷 C++语言 实现【流浪地球】

流浪地球计划在赤道上均匀部署了N个转向发动机,按位置顺序编号为0~N-1。 1) 初始状态下所有的发动机都是未启动状态; 2) 发动机起动的方式分为“手动启动”和“关联启动”两种方式; 3) 如果在时刻1一个发动机被启动,下一个时刻2与之相邻的两个发动机就会被“关联启动”; 4) 如果准备启动某个发动机时,它已经被启动了,则什么都不用做; 5) 发动机0与发动机N-1是相邻; 地球联合政府准备挑选某些发动机在某些时刻进行“手动启动”,当然最终所有的发动机都会被启动。 哪些发动机最晚被启动呢?

MISAYAONE的博客 4213

【MyBatis框架】核心配置文件讲解

本篇详细介绍了MyBatis框架的核心配置文件,以及各个配置元素的作用。

一个真ikun 2706

主流几个JDK版本:JDK 8、JDK 11、JDK 17 和 JDK 21 的区别

主流几个JDK版本:JDK 8、JDK 11、JDK 17 和 JDK 21 的区别

技术分享 1727

MyBatis:核心配置文件

本篇内容包括:MyBatis 配置文件概述以及核心配置文件详解(configuration、properties、settings、typeAliases、typeHandlers、objectFactory等)的内容。

栗筝i的博客 5384

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

Mybatis的核心配置文件

Mybatis的核心配置文件有两个,一个是全局配置文件,它包含了会深深影响Mybatis行为的设置和属性信息;一个是映射文件,它很简单,让用户能更专注于SQL代码。

yuiezt的专栏 3129

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

MyBatis 核心配置文件

是 MyBatis 框架的 “总开关”,用于全局配置 MyBatis 的运行环境、类型别名、插件、数据库连接等。这些设置会全局影响 MyBatis 的运行,需根据项目需求调整(如。MyBatis 的核心配置文件(通常命名为。对字段命名不规范的老项目可能不适用)(必须严格按顺序配置)

2401_83708850的博客 765

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

MyBatis——核心配置文件

一、核心配置文件介绍  核心配置文件或者说总控文件即上文提到的mybatis-config.xml配置文件,该文件中包含了影响MyBatis行为的设置和属性信息,在配置这些属性的时候要严格遵循xml文件的dtd约束,dtd约束了各个属性出现的位置。 二、核心配置文件的内容  1、<properties>标签:引入外部资源文件,比如c3p0、数据库的配置等   ①在src下新建数据库的配...

如不來的博客 648

mybatis核心配置文件介绍

mybatis核心配置文件介绍

lisus2007的专栏 976

mybatis核心配置文件

yBatis另一个核心要素就是核心配置文件。一个完整的核心配置文件的标签包括:注意:文件中的元素节点是有一定顺序的,节点位置必须按以上位置排序,否则会编译错误SqlSessionFactoryBuilder(构造器)SqlSessionFactory(工厂接口)SqlSession(会话)SQL Mapper(映射器)properties 标签可以通过 resource属性指定外部 properties 文件 (databaseproperties),也可以通过 properties 子元素配置.datab

m0_73671382的博客 1484

MyBatis 入门之核心配置文件

MyBatis 是一个基于 Java 的持久层框架,它通过将 SQL 语句与 Java 代码分离,使得数据库操作更加灵活和可维护。MyBatis 提供了一种简单而强大的方式来执行 SQL 语句、映射结果集和管理数据库连接。本文介绍了 MyBatis 的核心配置文件的作用、结构和代码实现。通过配置文件,我们可以轻松地管理和配置 MyBatis 的各种属性,使得数据库操作更加灵活和可维护。希望本文对你学习 MyBatis 有所帮助。

dawn191228的博客 1687

【MyBatis】核心配置文件详解

详解mybatis核心配置文件

August_._的博客 1135

MyBatis笔记——mybatis核心配置文件

注意:package 是包路径,如果要映射配置需要给。这样配置就可以在mapper中直接使用。等连接信息,直接写在代码中,而是写在。的配置文件中,让配置文件直接读取。在开发中,我们常常不会直接将。(user) 来作为别名,添加别名(不区分大小写),的文件,它们之间通过等号(

zxb的博客 592

MyBatis 核心配置文件详细内容详解

mybatis-confg.xml ,也就是MyBatis 的核心配置文件,主要配置连接数据库的信息等(**一般一个数据库,对应一个这个MyBatis 的核心配置文件),同样的与之对应的通过mybatis-config.xml 核心配置文件'所创建的对象:SqlSession FactoryBuilder,SqlSessionFactory 也是一个数据库相对应上一个对象。<envrioments> 标签表示:配置环境(在MyBatis 的核心配置文件当中,可以配置多个),注意:一般s。

2501_92608043的博客 1017

MyBatis 核心配置文件深入浅出_mybatis配置文件

User全限定名:com.mybatis.domain.User使用。

2501_90392300的博客 1991

MyBatis的核心配置——MyBatis的核心配置及核心对象MyBatis核心配置文件

MyBatis的核心配置——MyBatis的核心配置及核心对象MyBatis核心配置文件

致力于分享在各类技术领域的学习与实践经验,涵盖编程、虚拟化、开源工具、网络安全等。 1190

MyBatis核心配置文件

摘要:本文详细介绍了MyBatis核心配置文件的组成与配置方法。主要内容包括:1)XML命名空间声明;2)configuration根元素及其子元素:properties(属性配置)、typeAliases(类型别名)、environments(运行环境)、mappers(映射器配置)、settings(全局设置)和plugins(插件配置);3)各元素的具体用法示例,如数据源定义、类型别名设置、事务管理器配置等;4)不同配置方式的注意事项。通过合理配置这些元素,可以实现对数据库连接、映射器加载、插件扩展等

sfrsfsfggg的博客 925
上一篇: MyBatis映射文件深入
下一篇: MyBatis多表查询
Caoyy686868
博客等级 码龄8年 5742粉丝 57原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Caoyy686868

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值