Mybatis 自动类型转换

RTX4090上跑CenterNet训练 参考实现 url=https://github.com/xingyizhou/CenterNet.git commit_id=5b1a490a52da57d3580e80b8bb4bbead9ef2af96 阅读详情

1、新建类xxxTypeHandler,实现TypeHandler接口 或 继承 BaseTypeHandler类

package com.william.typehandler;

import com.william.mapper.IdCardType;
import org.apache.ibatis.type.JdbcType;
import org.apache.ibatis.type.TypeHandler;

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

/**
 * 身份证加密解密类型转换器
 */

public class EncryptTypeHandler implements TypeHandler<IdCardType> {

    @Override
    public void setParameter(PreparedStatement preparedStatement, int i, IdCardType idCardType, JdbcType jdbcType) throws SQLException {
        String cryptIdCard = Base64.getEncoder().encodeToString(idCardType.getIdCard().getBytes());
        preparedStatement.setString(i, cryptIdCard);
    }

    @Override
    public IdCardType getResult(ResultSet resultSet, String s) throws SQLException {
        String cryptIdCard = resultSet.getString(s);
        String idCard = new String(Base64.getDecoder().decode(cryptIdCard));
        IdCardType idCardType = new IdCardType(idCard);
        return idCardType;
    }

    @Override
    public IdCardType getResult(ResultSet resultSet, int i) throws SQLException {
        String cryptIdCard = resultSet.getString(i);
        String idCard = new String(Base64.getDecoder().decode(cryptIdCard));
        IdCardType idCardType = new IdCardType(idCard);
        return idCardType;
    }

    @Override
    public IdCardType getResult(CallableStatement callableStatement, int i) throws SQLException {
        String cryptIdCard = callableStatement.getString(i);
        String idCard = new String(Base64.getDecoder().decode(cryptIdCard));
        IdCardType idCardType = new IdCardType(idCard);
        return idCardType;
    }
}

2、在Mybatis-config.xml中注册类型转换器

<typeHandlers>
        <typeHandler handler="com.william.typehandler.EncryptTypeHandler" javaType="IdCardType"></typeHandler>
    </typeHandlers>

3、直接使用

package com.william;

import com.william.mapper.*;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.ExecutorType;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.mybatis.generator.api.MyBatisGenerator;
import org.mybatis.generator.config.Configuration;
import org.mybatis.generator.config.xml.ConfigurationParser;
import org.mybatis.generator.exception.InvalidConfigurationException;
import org.mybatis.generator.exception.XMLParserException;
import org.mybatis.generator.internal.DefaultShellCallback;

import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

@Slf4j
@Data
public class Main {
    static public void main(String[] args) throws IOException, XMLParserException, InvalidConfigurationException, SQLException, InterruptedException {
        String resource = "mybatis-config.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        System.out.println(inputStream.toString());
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        SqlSession session = sqlSessionFactory.openSession(true);
        StudentMapper mapper = session.getMapper(StudentMapper.class);
        Student student = new Student();
        student.setAddress("Beijing");
        student.setAge(99);
        student.setName("FUCK");
        student.setPassword("123123");
        student.setIdCardType(new IdCardType("this is unencryptedPassword!"));
        mapper.insertTestTypeHandler(student);
        System.out.printf("自增主键为: %d\n", student.getId());
        student = mapper.selectTestTypeHandler(4);
        System.out.println(student);
    }
}

结果:

==>  Preparing: INSERT INTO students(`password`, `age`, `salary`, `address`, `name`, `idcard`) VALUES (?, ?, ?, ?, ?, ?)
==> Parameters: 123123(String), 99(Integer), null, Beijing(String), FUCK(String), dGhpcyBpcyB1bmVuY3J5cHRlZFBhc3N3b3JkIQ==(String)
<==    Updates: 1
自增主键为: 9
==>  Preparing: select * from students where id=?
==> Parameters: 4(Integer)
<==    Columns: id, password, age, salary, address, name, idcard
<==        Row: 4, 123123, 99, null, Beijing, FUCK, dGhpcyBpcyB1bmVuY3J5cHRlZFBhc3N3b3JkIQ==
<==      Total: 1
Student{idCardType=IdCardType(idCard=this is unencryptedPassword!), roles=null, id=4, password='123123', age=99, salary=null, address='Beijing', name='FUCK'}

 

vivado实现SDI接口 XAPP1249,用来介绍UHD_SDI的实现。 阅读详情

相关推荐

【STM32】CubeMx系列教程之移植FreeRTOS

本文详细介绍了在STM32F429上通过CubeMX工具移植FreeRTOS的方法。主要内容包括:1)配置系统时钟源,将TIM1替换SysTick作为时钟基准;2)FreeRTOS的创建与配置,包括任务创建、堆栈大小设置等;3)关键配置参数说明,如堆大小建议设为RAM的50%-70%;4)常用函数如堆栈监控、任务挂起/恢复等。文章提供了从基础配置到深入优化的完整移植指南,适合STM32开发者参考使用。

JackieJin123的博客 785

MybatisPlus如何完成字段类型转换

对每个字段都有自己的定义都有两个类型 javaType可以不显式写出来,mybatis可以根据指定的实体类推断出来 jdbcType 也就是对应到数据库中的字段类型 mybatis完成数据库的数据到java实体类型的转换这两个类型是必不可少的。会根据javaType和jdbcType去匹配到对应的处理器完成类型转换

qq_37436172的博客 1万+

Miniforge3部署教程,完美替代Anaconda3

大背景不介绍了,哎!直接上教程!

zzy_ucas的博客 1万+

MyBatis -全局参数 - 别名 - 类型转换器

MyBatis-全局配置文件 MyBatis 的配置文件包含了影响 MyBatis 行为甚深的 设置(settings)和属性(properties)信息。 文档的 顶层结构如下:配置文档 • configuration 配置 • properties 属性 • settings 设置 • typeAliases 类型命名 • typeHandlers 类型处理器 • objectFa...

weixin_44130043的博客 374

详细对比模型训练和模型精调

当我们进行模型精调(Fine-Tuning)和模型训练时,我们需要考虑到不同的步骤和目标。

pumpkin84514的博客 1852

S7-1200中时钟功能设定和读写调用的具体方法

S7-1200中时钟功能设定和读写调用的具体方法

Robot_PLC_HMI_Automation 1万+

MyBatis通过配置实现下划线命名法和驼峰命名法之间的自动转换

如果你需要更复杂的转换逻辑,可以使用自定义类型转换器。在这种情况下,你需要实现接口。

qq_46426180的博客 3119

华为OD机考2025C卷 - 精准核酸检测(Java & Python& JS & C++ & C语言)

华为OD机考2025C卷 - 精准核酸检测,提供在线OJ Java & Python& JS & C++ & C

算法大师! 2881

Mybatis中的类型转换器

无论是mybati是向数据库中存储数据还是将数据读取出来都需要涉及类型转换器。 Mybatis再带的类型转换器:【部分】 自定义类型处理器 自定义类型转换器的解决方案: 重写已经有的类型转换器。 新建类型转换器。 你可以重写类型处理器或者是新建类型转换器,处理不支持或非标准的类型,具体的实现方法是: 实现TypeHandler接口,或者是继承BaseTypeHandler,然后我们可以有选择的将它映射到JDBC的类型。 自定义类型转换器的步骤: 创建类型...

qq_48569009的博客 2516

直击高频编程考点:字符串知识及经典算法题总结

字符串相关基本练习题总结(最长公共子串、最长回文子串、最长无重复字符子串、最小覆盖子串、字符串相乘、中文数字表达转实际数字格式等)

曾经“等你生日那天”都遥远得像未来,如今却可欢愉的挥手说“下个十年见” 172万+

混合精度训练与推理:平衡性能与效率

在深度学习领域,模型的训练和推理通常需要大量的计算资源和时间。随着模型规模的不断增大,如大型语言模型、复杂的视觉模型等,对计算资源的需求也呈指数级增长。混合精度训练与推理技术应运而生,它通过在训练和推理过程中同时使用不同精度的数据类型,在保证模型性能的前提下,显著提高计算效率,减少内存占用。本文的目的是全面介绍混合精度训练与推理技术,包括其原理、实现方法、应用场景以及相关工具和资源,帮助读者深入理解并掌握该技术,从而在实际项目中更好地平衡性能与效率。

操作系统内核探秘的博客 1068

MyBatis之自定义数据类型转换器

MyBatis 数据类型转换器

dy051107的博客 3031

VMware下载与安装

一、VMware下载 二、VMware安装

欢迎订阅我的“JAVA全栈开发笔记(全)”专栏,价格优惠,仅需19.9元。 315

MyBatis Plus 自动类型转换之TypeHandler

自动类型转换 数据库里有一个ids字段,里面存放的都是一些其他表的主键id,逗号分隔。 按照我一开始的解决思路,转换成String,然后再分割一下,转换成Set。 git提交代码后,老大审查代码,摇头。才了解到MyBatis有一个TypeHandler. 上代码: @MappedTypes(Set.class) @MappedJdbcTypes(JdbcType.VARCHAR) public class SetTypeHandler extends BaseTypeHandler<Set> {

qq_31775377的博客 9294

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

VC中sqlite的使用

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

mybatis自动将mysql的json类型转换为对象_MyBatis:复杂映射,配置深入

MyBatis 高级查询ResultMap 属性resultType - 如果实体的属性名与表中字段名一致,将查询结果自动封装到实体类中resutlMap - 如果实体的属性名与表中字段名不一致,可以使用 resutlMap 实现手动封装到实体类中编写 UserMapper 接口List<User> findAllResultMap();编写 UserMapper.xml<!--...

weixin_39915668的博客 1522

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

mybatis自动将mysql的json类型转换为对象_Mybatis源码阅读套路,一次性打包发您~

关注“Java后端技术全栈”回复“面试”获取全套面试资料很多人看源码都不知道如何看,今天来教教大家如何看源码。前提是我们需要对整个Mybatis的原理、工作流程和模块进行一个整体的直知晓,另外还要有使用经验。建议先看这两篇文章:本文主要内容:源码下载如何下载源码?进入官网https://mybatis.org/mybatis-3/zh/index.html方法一跳转到github上,我们...

weixin_39885683的博客 319

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

mybatis使用generator自动生成代码时的类型转换

使用mybatis的generator自动生成代码,但是oracle数据库中number(6,2)总是自动转成BigDecimal,我想要转成的是float类型 这样就写了一个类型转换器,需要继承JavaTypeResolver接口 然后在mybaties配置文件generatorConfig.xml中类型转换配置位置添加上即可 类型转换器MyJavaTypeRe

lele2426的专栏 2万+

Mybatis类型转换介绍

Mybatis类型转换介绍 1.1     目录 1.2     建立TypeHandler 1.2.1    TypeHandler接口 1.2.2    BaseTypeHandler抽象类 1.3     注册TypeHandler 1.4     Mybatis自动获取TypeHandler 1.5     Mybatis中自动注册的TypeHandler     ...

Elim的博客 2357

mybatis自动生成代码--类型转换的问题

mybatis自动生成代码--类型转换的问题

IT界的一只菜鸟 479

自定义mybatis-generator自动生成代码时的类型转换

一、mybatis-generator问题 大家在使用mybatis的时候,有些时候需要使用mybatis generator来逆向生成mapper和entity层。 这其中一个问题在于,表设计的时候,出于最大程度节省表空间的考虑,不少枚举使用了tinyint类型,但是在进行自动生成的时候,默认生成的java字段是Byte类型,但是我想要的是Integer类型,这就对程序中使用产生了不便。 ...

Roy_70的专栏 1万+

mysql-generator用法_mybatis使用generator自动生成代码时的类型转换

使用mybatis的generator自动生成代码,但是oracle数据库中number(6,2)总是自动转成BigDecimal,我想要转成的是float类型 这样就写了一个类型转换器,需要继承JavaTypeResolver接口 然后在mybaties配置文件generatorConfig.xml中类型转换配置位置添加上即可 j使用mybatis的generator自动生成代码,但是oracl...

weixin_39842611的博客 423

说说mybatis中的#{} 和 ${}

MyBatis是一种Java持久层框架,为了方便操作数据库,MyBatis提供了动态SQL的功能。在MyBatis中,我们可以使用${}和#{}两种方式来引用变量。${}#{}为什么要使用#{}${}#{}${}#{}总之,为了提高安全性和可靠性,推荐使用#{}的方式来引用变量。

weixin_43747389的博客 465

Mybatis类型转换TypeHandler介绍

1.1     目录 1.2     建立TypeHandler 1.2.1    TypeHandler接口 1.2.2    BaseTypeHandler抽象类 1.3     注册TypeHandler 1.4     Mybatis自动获取TypeHandler 1.5     Mybatis中自动注册的TypeHandler     1

zsg88的专栏 796

mybatis快速入门(基于Mapper接口编程)

在MyBatis中,#{value}是一种预编译的参数占位符,用于在SQL语句中插入参数值。它能够防止SQL注入攻击,提高SQL语句的安全性。当使用#{value}作为参数占位符时,MyBatis会将参数值直接插入到SQL语句中,并在执行时进行数据类型转换和字符转义处理。这种预编译的参数占位符可以有效地提高SQL语句的性能和安全性。

小丁的博客 562
上一篇: Mybatis 插入并获取自增主键
下一篇: 【设计模式】
WilliamCode
博客等级 码龄11年 118粉丝 105原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值