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

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

一分钟明白: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

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5671922.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存