目录
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 List2.自定义类转换findRoles(String roleName); }
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的两种方法第一种:指定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
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)