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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/482528.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

史上首次,强化学习算法控制核聚变登上Nature:DeepMind让人造太阳向前一大步...

来源&#xff1a;机器之心过去三年&#xff0c;DeepMind 和瑞士洛桑联邦理工学院 EPFL 一直在进行一个神秘的项目&#xff1a;用强化学习控制核聚变反应堆内过热的等离子体&#xff0c;如今它已宣告成功。DeepMind研究科学家David Pfau在论文发表后感叹道&#xff1a;「为了分享…

Memcached 使用 及.NET客户端调用

memcached安装: 1 解压缩文件到c:\memcached 2 命令行输入 c:\memcached\memcached.exe -d install 3 命令行输入 c:\memcached\memcached.exe -d start &#xff0c;该命令启动 Memcached &#xff0c;默认监听端口为 11211 注&#xff1a; 如果出现如下错误 “ failed to in…

机器人流程自动化技术的新发展

来源&#xff1a;学习时报作者&#xff1a;李蕾蓬勃发展的数字经济&#xff0c;是全球新一轮科技进步的产物&#xff0c;直接受到新兴数字技术与智能技术的驱动。机器人流程自动化技术&#xff08;简称“RPA”&#xff09;&#xff0c;是近些年获得快速发展与广泛应用的重要智能…

运算符 优先级 结合性

&#xff23;语言的运算符可分为以下几类&#xff1a; 1. 算术运算符:用于各类数值运算。包括加()、减(-)、乘(*)、除(/)、求余(或称模运算&#xff0c;%)、自增()、自减(--)共七种。 2. 关系运算符:用于比较运算。包括大于(>)、小于(<)、等于()、 大于等于(&g…

05.MyBtais两种取值符号以及输入参数和输出参数

输入参数&#xff1a;parameterType 两种取值符号的异同 1.类型为简单类型(8个基本类型string) 不同点: a.#{任意值}&#xff0c;${value} 其中的标识符只能是value b. #{}自动给String类型加上单引号(‘’) (自动类型转换) ${} 原样输出&#xff0c;适合于动态排序 &#xff0…

论人工智能历史、现状与未来发展战略

来源&#xff1a;《学术前沿》作者&#xff1a;郭毅可人工智能问世60多年来&#xff0c;承载着人类对自己的智慧的无限自信。在这样的自信下&#xff0c;人工智能发展到了今天&#xff0c;人们在追求机器从事尽可能多的智力劳动的路上走得很快&#xff0c;也很远。今天人工智能…

PHP 开发者大会

PHPCON 2019 开发者大会(上海)2019.8.10-8-11 郭新华,和陈雷给我留下的影响很大 再看下天气,利奇马台风,都坐满了,来的都是真爱. Swoole 的韩天峰开始演讲,感觉是程序员标准的样子,哈哈哈 2345 的高旭 讲公司用swoole 的架构 鸟哥因为台风问题没来成,搞了个直播,哈哈哈,感觉很…

IEEE Fellow杨铮:打破「视觉」垄断,无线信号为 AI 开启「新感官」

来源&#xff1a;AI科技评论作者&#xff1a;陈彩娴编辑&#xff1a;岑峰2020年年初疫情刚开始时&#xff0c;清华大学的官方号曾祭出一篇题为《清华教师升级「十大神器」&#xff0c;上课力满格》的推文&#xff0c;讲述了软件学院某老师如何居家办公、探索出一套防止学生偷懒…

对于量子计算来说,99%的准确度足够吗?

UNIVERSITY OF NEW SOUTH WALES来源&#xff1a;IEEE电气电子工程师来自荷兰代尔夫特理工大学&#xff08;Delft University of Technology&#xff09;、日本理化学研究所&#xff08;Riken&#xff09;和悉尼新南威尔士大学&#xff08;UNSW&#xff09;的研究团队在硅中开发…

JavaScript每日学习日记(1)

8.11.2019 1. lastIndexOf() 方法从尾到头进行检索。 2. 有三种提取部分字符串的方法&#xff1a; 2.1 slice(start, end) 如果某个参数为负&#xff0c;则从字符串的结尾开始计数。如果省略第二个参数&#xff0c;则该方法将裁剪字符串的剩余部分。 2.2 substring(start, end…

人工智能将如何改变芯片设计

来源&#xff1a;ScienceAI编译&#xff1a;绿萝摩尔定律的终结正在逼近。工程师和设计师只能将晶体管小型化并尽可能多地封装到芯片中。因此&#xff0c;他们正在转向其他芯片设计方法&#xff0c;将 AI 等技术融入到设计过程中。例如&#xff0c;三星正在将人工智能添加到其内…

网络编程 总结

软件开发架构 c/s client/server b/s broswer/server ps:b/s本质上也是c/s架构 OSI七层协议 应用层 表示层 会话层 传输层 网络层 数据链路层 物理连接层 物理连接层 传输二进制的数据 数据链路层(以太网协议) 1.规定了二进制数据的分组依据 2.规定了每台计算机都必须有一块网…

计算机科学家证明,为什么更大的神经网络可以做得更好

来源&#xff1a;ScienceAI编辑&#xff1a;萝卜皮我们的物种很大程度上归功于对生的拇指。但如果进化给了我们额外的拇指&#xff0c;事情可能不会有太大改善。每只手一个拇指就足够了。神经网络并非如此&#xff0c;这是执行类人任务的领先人工智能系统。随着他们变得更大&am…

解决安装IIS时提示找不到zClientm.exe文件的问题

今天在安装IIS出现找不到zClientm.exe文件&#xff0c;还以为是下载IIS有问题&#xff0c;头大了。以下是解决方案。在组件安装向导中顺着[附件和工具]--[游戏]一路点击下去,惊喜地发现里面有一栏[Internet游戏]&#xff0c;把勾去掉&#xff0c;重新安装IIS就OK。但是有网友提…

生命,到底是什么?

来源&#xff1a;腾讯研究院作者&#xff1a;Mark A. Bedua译者&#xff1a;宋词、范星辰令人着迷的生命地球表面布满了生命&#xff0c;而且通常很容易辨认。猫、胡萝卜、细菌都是活的&#xff0c;桥、肥皂泡、沙粒都是死的。但众所周知&#xff0c;生物学家们却没有关于生命的…

MyBatis中SQL语句相关内容

MyBatis模糊查询 使用 ${...} 代替 #{...} SELECT * FROM tableName WHERE name LIKE %${text}%; 在MyBatis中写SQL语句时不等于用 <> 代替 <> 多个条件中的模糊查询 SELECT * FROM 表名 WHERE (字段1 <> "" 字段2 <> "") and (字…

2022图机器学习必读的11大研究趋势和方向: 微分方程/子图表示/图谱理论/非对称/动态性/鲁棒性/通用性/强化学习/图量子等...

来源&#xff1a;机器学习研究组订阅作者&#xff1a;Michael Bronstein 牛津大学DeepMind人工智能教授、Twitter图机器学习负责人编译&#xff1a;熊宇轩一、要点概述几何在机器学习中变得越来越重要。微分几何和同源场为机器学习研究引入了新的思想&#xff0c;包括利用了对…

day31 线程

01 进程间通信 """ 队列:先进先出 堆栈:先进后出 """ from multiprocessing import Queue q Queue(5) # 括号内可以传参数 表示的是这个队列的最大存储数 # 往队列中添加数据 q.put(1) q.put(2) print(q.full()) # 判断队列是否满了 q.put(3)…

06.动态SQL和foreach

动态sql: 映射文件代码: 1 <!-- 动态sql,根据名字和年龄查询,where标签会处理第一个and&#xff0c;其他位置的and不会自动处理 -->2 <select id"queryStudentByNameAndAge" parameterType"student" resultMap"student1">3 s…

机器学习理论基础到底有多可靠?

来源&#xff1a;机器学习算法与Python实战选自&#xff1a;aidancooper.co.uk 作者&#xff1a;Aidan Cooper编译&#xff1a;机器之心 知其然&#xff0c;知其所以然。机器学习领域近年的发展非常迅速&#xff0c;然而我们对机器学习理论的理解还很有限&#xff0c;有些模型…