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;「为了分享…

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

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

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

来源&#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;的研究团队在硅中开发…

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

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

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

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

生命,到底是什么?

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

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)…

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

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

07.MyBatis中的关联查询

关联查询&#xff1a; 一对一&#xff1a; 两种方式实现: 1.通过业务扩展的方式进行一对一查询&#xff0c;新建一个实体类&#xff0c;继承其中属性多的一个&#xff0c;然后写上另一个类中的属性&#xff1a; 实体类: 映射文件: 1 <!-- 业务扩展的方式进行一对一查询&…

黄仁勋回应放弃收购Arm:公司战略并没有太大改变

来源&#xff1a;网易智能2月21日消息&#xff0c;芯片巨头英伟达不久前公布了2022财年第四财季财报&#xff0c;显示其营收较上年同期猛增53%&#xff0c;游戏、数据中心和专业可视化市场平台也都实现了创纪录的收入。财报发布后&#xff0c;该公司首席执行官黄仁勋接受美国科…

无生命的AI算不上「智能」

来源&#xff1a;AI前线作者&#xff1a;Ben Dickson译者&#xff1a;王强策划&#xff1a;刘燕什么是智能&#xff1f;以非常快的速度解决复杂的数学问题就算智能吗&#xff1f;在国际象棋中击败世界冠军的力量算智能吗&#xff1f;分辨图像中数千个不同对象的能力算智能吗&am…

MySQL 练习 创建表格2

|--需求说明 #实践课&#xff0c;使用SQL语句创建成绩表#要求&#xff1a;在数据库myschool中&#xff0c;使用SQL语句创建成绩表result&#xff0c;result的结构表见书上 |--实现思路 采用创建表的语句完成 |--代码内容 #实践课&#xff0c;使用SQL语句创建成绩表 #要求&#…

前沿速递:因果涌现在多种因果衡量标准下普遍存在

来源&#xff1a; 集智俱乐部作者&#xff1a;陈昊编辑&#xff1a;邓一雪导语因果涌现理论指出&#xff0c;在宏观尺度下观察复杂系统可以减少因果关系中的噪声&#xff0c;从而得到具有更强因果关联的系统。目前该理论已经在有效信息和整合信息的因果度量标准下得到的验证&am…

类脑计算的一大突破 BrainScaleS-2

来源&#xff1a;混沌巡洋舰今天最成功的人工智能算法&#xff0c;人工神经网络&#xff0c;是基于我们大脑中错综复杂的真实神经网络。但与我们高效的大脑不同的是&#xff0c;在计算机上运行这些算法消耗了惊人的能量: 最大型的模型在训练全过程中消耗的能量几乎相当于五辆汽…

委托、Lambda表达式、事件系列07,使用EventHandler委托

谈到事件注册&#xff0c;EventHandler是最常用的。 EventHandler是一个委托&#xff0c;接收2个形参。sender是指事件的发起者&#xff0c;e代表事件参数。 □ 使用EventHandler实现猜拳游戏 使用EventHandler实现一个猜拳游戏&#xff0c;每次出拳&#xff0c;出剪刀、石头、…

2022年国家自然科学基金指南发布情况

来源&#xff1a;锐动源编辑部近日&#xff0c;2022年国家自然科学基金部分项目申报指南已陆续发布。据不完全统计&#xff0c;截至目前2022年国家自然科学基金已发布32个项目的申报指南&#xff0c;其中“国家自然科学基金委员会与日本学术振兴会合作与交流项目”已发布获资助…