别名的设置:(别名不区分大小写):

设置单个别名:

<configuration><properties resource="db.properties" /><typeAliases><!-- 设置单个别名 --><typeAlias type="com.offcn.entity.Person" alias="person"/><typeAlias type="com.offcn.entity.Book" alias="book"/></typeAliases>

映射文件中直接写别名即可:

<select id="queryPersonById" parameterType="int" resultType="person">select * from person where id = #{id}
</select>

批量设置别名:

<typeAliases><!-- 批量定义别名 ,别名不区分大小写,会将该包下的所有文件批量设置别名--><package name="com.offcn.entity"/>
</typeAliases>

类型转换器:


1.MyBatis自带的类型转换器:

2.自定义的类型转换器:

步骤:

a.创建转换器:需要实现TypeHandler接口,实现转换器有两种方式:

  i.实现接口TypeHandler

  ii.继承BaseTypeHander

创建converter转换器,代码如下:

package com.offcn.converter;import java.sql.CallableStatement;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;import org.apache.ibatis.type.BaseTypeHandler;
import org.apache.ibatis.type.JdbcType;public class BooleanToIntConverter extends BaseTypeHandler<Boolean>{//DB ---> java
    @Override//根据名字拿public Boolean getNullableResult(ResultSet rs, String columnName) throws SQLException {// TODO Auto-generated method stubint sexNo = rs.getInt(columnName);return sexNo == 1?true:false;}//根据下标拿
    @Overridepublic Boolean getNullableResult(ResultSet rs, int columnIndex) throws SQLException {// TODO Auto-generated method stubint sexNo = rs.getInt(columnIndex);return sexNo == 1?true:false;}//根据存储过程拿
    @Overridepublic Boolean getNullableResult(CallableStatement cs, int columnIndex) throws SQLException {// TODO Auto-generated method stubint sexNo = cs.getInt(columnIndex);return sexNo == 1?true:false;}//java ---> DB
    @Overridepublic void setNonNullParameter(PreparedStatement ps, int i, Boolean parameter, JdbcType jdbc) throws SQLException {// TODO Auto-generated method stubif(parameter) {ps.setInt(i, 1);}else {ps.setInt(i, 0);}}}

在conf.xml文件中配置类型转换器:

<typeHandlers><typeHandler handler="com.offcn.converter.BooleanToIntConverter" javaType="Boolean" jdbcType="INTEGER"/>
</typeHandlers>

映射文件中查找的sql:(DB ---> JAVA)

<!-- 带类型转换器的查询 --><select id="queryPersonByIdWithConverter" parameterType="int" resultMap="personResult">select * from person where id = #{id}</select><resultMap type="person" id="personResult"><!-- 分为主键和非主键,主键用id,非主键用result --><id property="id" column="id"/><result property="name" column="name"/><result property="bir" column="bir"/><result property="address" column="address"/><result property="sex" column="sex" javaType="Boolean" jdbcType="INTEGER" /></resultMap>

接口中定义对应的方法:

Person queryPersonByIdWithConverter(int id);

测试类进行测试:

public static void queryPersonByIdWithConverter() throws IOException {//读取conf.xml文件Reader reader = Resources.getResourceAsReader("conf.xml");//创建sqlSessionFactorySqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(reader);//获取sqlSessionSqlSession session = sessionFactory.openSession();//通过session定位映射文件personMapper personMapper = session.getMapper(personMapper.class);//定位sql语句并执行Person person = personMapper.queryPersonByIdWithConverter(4);//提交事务
        session.commit();System.out.println(person);//关闭连接
        session.close();}

映射文件中增加的sql:(JAVA --> DB)

<!-- 带类型转转器的增加 --><insert id="insertPersonWithConverter" parameterType="person" >insert into person (name,bir,address,sex) value (#{name},#{bir},#{address},#{sex,javaType=Boolean,jdbcType=INTEGER})</insert>

接口中定义对应的方法:

测试类进行测试:

//带转换器的增加操作public static void insertPersonWithConverter() throws IOException {//读取conf.xml文件Reader reader = Resources.getResourceAsReader("conf.xml");//获取sqlSessionFactorySqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(reader);//获取sqlSessionSqlSession session = sessionFactory.openSession();//定位映射文件的位置personMapper personMapper = session.getMapper(personMapper.class);//定位sql并执行Person person = new Person("小孙",new Date(),"青岛",true);personMapper.insertPersonWithConverter(person);//提交事务
        session.commit();System.out.println("增加成功");//关闭连接
        session.close();}

最后关于:sql标签中什么时候用resultType什么时候用resultMap

1.如果表中字段和实体类中的属性的类型合理识别,则用resultType,否则用resultMap

2.如果表中字段的名字和实体类中属性名能够合理识别,则用resultType,否则用resultMap

转载于:https://www.cnblogs.com/man-tou/p/11335402.html

04.MyBatis别名的设置和类型转换器相关推荐

  1. springboot 别名不起作用_springboot之mybatis别名的设置

    mybatis别名设置 在具体的mapper.xml文件中,定义很多的statement,statement需要parameterType指定输入参数的类型.需要resultType指定输出结果的映射 ...

  2. java converter转换器_在SpringMVC中设置自定义类型转换器Converter

    前言 在SpringMVC中为我们提供了许多内置的类型转换器,当我们在HTML表单中发起一个请求时,Spring会根据表单项中name属性的值映射到POJO的属性名,调用相对性属性的set方法帮我们把 ...

  3. Struts2之类型转换器

    一.类型转换器的应用场景 类型转换是OGNL的一部分,默认的八种基本类型.String.Date会使用类型转换,但是更复杂的类型转换就需要我们自定义了(虽然这个东西一般根本用不到),OGNL可以应用在 ...

  4. 类的别名java,类型别名是为 Java 类型设置一个短的名字。 它只和 XML 配置有关,存在的意义仅在于用来减少类完全限定名的冗余。例如:typeAliases typeAlias ali...

    类型别名是为 Java 类型设置一个短的名字. 它只和 XML 配置有关,存在的意义仅在于用来减少类完全限定名的冗余.例如: 当这样配置时,Blog 可以用在任何使用 domain.blog.Blog ...

  5. mybatis类型转换器处理PostGis数据库geometry类型转换

    在入库和查询中需要自动的让geometry的类型和实体类中的类型映射. 实体类中接收参数是String类型(geoJson) PostGis中的geometry类型是十六进制的扩展WKB类型(EWKB ...

  6. Mybatis中的类型转换器

    无论是mybati是向数据库中存储数据还是将数据读取出来都需要涉及类型转换器. Mybatis再带的类型转换器:[部分] 自定义类型处理器 自定义类型转换器的解决方案: 重写已经有的类型转换器. 新建 ...

  7. 通过mybatis自定义参数类型转换器,进行数据库字段加密脱敏

    1 问题背景 在数据库存储人员的信息时,有一些信息是敏感数据,如身份证号.出生地等.为了防止信息泄漏,这些信息不允许直接在数据库中查看,此时就需要对这些字段进行加密存储,但在页面查看的仍旧是解密后的数 ...

  8. Mybatis特殊值Enum类型转换器-ValuedEnumTypeHandler

    引言 typeHandlers 阅读官方文档 typeHandlers 一节{:target="_blank"} MyBatis 在预处理语句(PreparedStatement) ...

  9. 使用 mybatis 自定义日期类型转换器

    文章目录 前言 一.resources 1.1 sqlMapConfig.xml 1.2 log4j.properties 1.3 userMapper.xml 二.java结构 2.1 dao 2. ...

最新文章

  1. Activity的启动模式与flag详解
  2. Liunx下HPCC(HPC Challenge)的安装运行
  3. json 对象 数组
  4. 大数据之-Hadoop3.x_MapReduce_自定义outputformat案例完善执行---大数据之hadoop3.x工作笔记0123
  5. PHP 5.4.8 添加系统服务命令
  6. php 生成小程序码
  7. 微信小程序获取Appsecret报错40125“invalid appsecret”
  8. Chrome 浏览器小恐龙游戏变身超级马利奥
  9. 用ggplot2进行直线回归并添加回归方程和方差分析表
  10. discuz 论坛配置 QQ/163 网易邮箱
  11. DxmCms自动过滤内容中的广告法违禁词功能
  12. springframework(九)AOP的advices,中规中矩的使用方式
  13. 单片机实例6——报警产生器(硬件电路图+汇编程序+C语言程序)
  14. CAD如何快速查找图纸的存放位置?怎么实现快速看图?
  15. 几幅图教你区分数字地、模拟地、电源地、单点接地
  16. 标准清洗槽中的质量参数的监控方法
  17. 蚂蚁金服面试3+2次,最终有惊无险通过!(已拿offer)
  18. swagger打开跳转login页面BUG
  19. Win10中英文输入法无法切换解决办法
  20. 话题 | vivo到底有没有技术创新?

热门文章

  1. 为何要使用docker
  2. Python3——FTP(文件传输协议)
  3. String Table MFC
  4. celery mysql 异步_celery配合rabbitmq任务队列实现任务的异步调度执行[celery redis]
  5. 设计模式_1_工厂模式与抽象工厂
  6. python网络爬虫系列(八)——常见的反爬手段和解决方法
  7. LeetCode MySQL 180. 连续出现的数字(cast)
  8. LeetCode 1144. 递减元素使数组呈锯齿状(奇偶分别遍历)
  9. Pandas入门1(DataFrame+Series读写/Index+Select+Assign)
  10. 贪心应用--汽车加油次数问题