栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

一分钟明白:mybatis自定义别名的三种方式和自定义TypeHandler类型转换器

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

一分钟明白:mybatis自定义别名的三种方式和自定义TypeHandler类型转换器

目录

1.自定义别名

1.1自定义类别名

1.2包扫描批量自定义别名

1.3注解自定义别名

2.自定义类转换

 2.1创建自定义TypeHandler

2.2使用自动TypeHandler的两种方法

2.3运行测试


1.自定义别名

1.1自定义类别名

自定义别名可以让我们在xml文件中写sql文件时,减少一些繁琐而又没必要写的一些代码

例如:

 
        select id, role_name, note from t_role where id = #{id}
    

我们在写select查询时需要指定resultType的类型,但是在自定义别名之后就可以减少此类代码,只需要在mybatis-config.xml文件中配置如下:

 配置之后:

 此类方法可以解决少数类型,如果包下的类很多,可以采用扫描包的形式去自定义别名:

1.2包扫描批量自定义别名

		
		
	

配置之后,会自动将类名首字母小写作为别名

1.3注解自定义别名

其次mybatis还提供了注解的形式去@Alias(‘别名’)创建别名

import java.util.List;
@Alias("xxx")
public interface RoleMapper {
	public int insertRole(Role role);
	public int deleteRole(Long id);
	public int updateRole(Role role);
	public Role getRole(Long id);
	public List findRoles(String roleName);
}

2.自定义类转换

TypeHandler的作用是转换jdbcType和javaType之间转换的,jdbcType是定义数据类型,而javaType是定义java类型,正常情况下mybatis是会根据系统定义的typeHandler自动转换的,但有时我们需要特殊的转换规则就需要我们自定义去解决。

 这些是系统定义的typeHandler,一般不需要显示声明,在Mybatis中TypeHandler都需要实现org.apache.ibatis.type.TypeHandler接口

 其中T是泛型,专指javaType,比如我们需要String的时候,那么实现类可以写为implements TypeHandler

setParameter方法,是使用typeHandler通过PreparedStatement对象进行设置SQL参数的时候使用的具体方法,其中i是参数在SQL的下标,parameter是参数,jdbcType是数据库类型。

其中有3个getResult的方法,它的作用是从JDBC结果集中获取数据进行转换,要么使用列名(columnName)要么使用下标(columnIndex)获取数据库的数据,其中最后一个getResult方法是存储过程专用的。

如果我们打开系统定义的TypeHandler会发现,它们都继承了baseTypeHandler这个类,而这个类同样实现了TypeHandler接口,例如:StringTypeHandler

 在这里mybatis会自动转化jdbcType和javaType,但是需要进行注册

 2.1创建自定义TypeHandler

 我们在使用的自定义转换的时候一般会采用配置或者扫描的形式,在这里我们创建一个自定义的TypeHandler,我们同样需要实现TypeHandler接口

 定义的类型String,在实现接口方法之后,我们需要去mybatis-config中去进行注册

如果我们需要自定义的TypeHandler比较多,可以使用扫描包的形式, 如果使用扫描就不可以在xml中指定jdbcType和javaType了,需要使用注解的形式

在注册之后jdbcType和javaType能和我们自定义的类对上就会启动,

2.2使用自动TypeHandler的两种方法



    
        
        
        
    

    
        select id, role_name, note from t_role
        where role_name like concat('%', #{roleName, jdbcType=VARCHAR,
		javaType=string}, '%')
    

    

第一种:指定jdbcType和javaType的类型

第二种:使用具体的TypeHandler实现类

在数据库返回空的情况下,又没有注册相应的javaTypeHandler,mybatis就不知道该去怎么处理,我们使用这两种方法就不会有异常

2.3运行测试

运行之后,查看日志发现我们自定义的TypeHandler已经启动了

INFO 2021-12-15 22:06:41,124 mybatis02.typehandler.MyTypeHandler: 读取string参数1【role_name_1】
 INFO 2021-12-15 22:06:41,124 mybatis02.typehandler.MyTypeHandler: 读取string参数1【note_1】
 INFO 2021-12-15 22:06:41,125 mybatis02.Chapter4Main: role_name_1

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/666660.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号