04.MyBatis别名的设置和类型转换器
别名的设置:(别名不区分大小写):
设置单个别名:
<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别名的设置和类型转换器相关推荐
- springboot 别名不起作用_springboot之mybatis别名的设置
mybatis别名设置 在具体的mapper.xml文件中,定义很多的statement,statement需要parameterType指定输入参数的类型.需要resultType指定输出结果的映射 ...
- java converter转换器_在SpringMVC中设置自定义类型转换器Converter
前言 在SpringMVC中为我们提供了许多内置的类型转换器,当我们在HTML表单中发起一个请求时,Spring会根据表单项中name属性的值映射到POJO的属性名,调用相对性属性的set方法帮我们把 ...
- Struts2之类型转换器
一.类型转换器的应用场景 类型转换是OGNL的一部分,默认的八种基本类型.String.Date会使用类型转换,但是更复杂的类型转换就需要我们自定义了(虽然这个东西一般根本用不到),OGNL可以应用在 ...
- 类的别名java,类型别名是为 Java 类型设置一个短的名字。 它只和 XML 配置有关,存在的意义仅在于用来减少类完全限定名的冗余。例如:typeAliases typeAlias ali...
类型别名是为 Java 类型设置一个短的名字. 它只和 XML 配置有关,存在的意义仅在于用来减少类完全限定名的冗余.例如: 当这样配置时,Blog 可以用在任何使用 domain.blog.Blog ...
- mybatis类型转换器处理PostGis数据库geometry类型转换
在入库和查询中需要自动的让geometry的类型和实体类中的类型映射. 实体类中接收参数是String类型(geoJson) PostGis中的geometry类型是十六进制的扩展WKB类型(EWKB ...
- Mybatis中的类型转换器
无论是mybati是向数据库中存储数据还是将数据读取出来都需要涉及类型转换器. Mybatis再带的类型转换器:[部分] 自定义类型处理器 自定义类型转换器的解决方案: 重写已经有的类型转换器. 新建 ...
- 通过mybatis自定义参数类型转换器,进行数据库字段加密脱敏
1 问题背景 在数据库存储人员的信息时,有一些信息是敏感数据,如身份证号.出生地等.为了防止信息泄漏,这些信息不允许直接在数据库中查看,此时就需要对这些字段进行加密存储,但在页面查看的仍旧是解密后的数 ...
- Mybatis特殊值Enum类型转换器-ValuedEnumTypeHandler
引言 typeHandlers 阅读官方文档 typeHandlers 一节{:target="_blank"} MyBatis 在预处理语句(PreparedStatement) ...
- 使用 mybatis 自定义日期类型转换器
文章目录 前言 一.resources 1.1 sqlMapConfig.xml 1.2 log4j.properties 1.3 userMapper.xml 二.java结构 2.1 dao 2. ...
最新文章
- Activity的启动模式与flag详解
- Liunx下HPCC(HPC Challenge)的安装运行
- json 对象 数组
- 大数据之-Hadoop3.x_MapReduce_自定义outputformat案例完善执行---大数据之hadoop3.x工作笔记0123
- PHP 5.4.8 添加系统服务命令
- php 生成小程序码
- 微信小程序获取Appsecret报错40125“invalid appsecret”
- Chrome 浏览器小恐龙游戏变身超级马利奥
- 用ggplot2进行直线回归并添加回归方程和方差分析表
- discuz 论坛配置 QQ/163 网易邮箱
- DxmCms自动过滤内容中的广告法违禁词功能
- springframework(九)AOP的advices,中规中矩的使用方式
- 单片机实例6——报警产生器(硬件电路图+汇编程序+C语言程序)
- CAD如何快速查找图纸的存放位置?怎么实现快速看图?
- 几幅图教你区分数字地、模拟地、电源地、单点接地
- 标准清洗槽中的质量参数的监控方法
- 蚂蚁金服面试3+2次,最终有惊无险通过!(已拿offer)
- swagger打开跳转login页面BUG
- Win10中英文输入法无法切换解决办法
- 话题 | vivo到底有没有技术创新?
热门文章
- 为何要使用docker
- Python3——FTP(文件传输协议)
- String Table MFC
- celery mysql 异步_celery配合rabbitmq任务队列实现任务的异步调度执行[celery redis]
- 设计模式_1_工厂模式与抽象工厂
- python网络爬虫系列(八)——常见的反爬手段和解决方法
- LeetCode MySQL 180. 连续出现的数字(cast)
- LeetCode 1144. 递减元素使数组呈锯齿状(奇偶分别遍历)
- Pandas入门1(DataFrame+Series读写/Index+Select+Assign)
- 贪心应用--汽车加油次数问题