MyBatis学习笔记p16-p25

news/2024/11/23 0:48:15/

MyBatis 映射文件

映射文件指导着MyBatis如何进行数据库增删改查,
有着非常重要的意义;
•cache –命名空间的二级缓存配置
•cache-ref – 其他命名空间缓存配置的引用。
•resultMap – 自定义结果集映射
•parameterMap – 已废弃!老式风格的参数映射
•sql –抽取可重用语句块。
•insert – 映射插入语句
•update – 映射更新语句
•delete – 映射删除语句
•select – 映射查询语句
测试增删改
* 1、mybatis允许增删改直接定义以下类型返回值
* Integer、Long、Boolean、void
* 2、我们需要手动提交数据
* sqlSessionFactory.openSession();=》手动提交
* sqlSessionFactory.openSession(true);
=》自动提交

自增主键

parameterType:参数类型,可以省略,
获取自增主键的值:
mysql支持自增主键,自增主键值的获取,mybatis也是利用statement.getGenreatedKeys();
useGeneratedKeys=“true”;使用自增主键获取主键值策略
keyProperty;指定对应的主键属性,也就是mybatis获取到主键值以后,将这个值封装给javaBean的哪个属性

<insert id="addEmp" parameterType="com.atguigu.mybatis.bean.Employee"useGeneratedKeys="true" keyProperty="id" databaseId="mysql">insert into tbl_employee(last_name,email,gender) values(#{lastName},#{email},#{gender})</insert>

参数处理

单个参数:

mybatis不会做出特殊处理
#{参数名},取出参数值

多个参数值

mybatis会做出特殊处理。
多个参数会被封装成一个map
key param1…paramN,或者参数的索引也可以
value,传入的参数值
#{}就是从map中获取指定的key值

异常:

异常:org.apache.ibatis.binding.BindingException: Parameter 'id' not found. Available parameters are [1, 0, param1, param2]

操作:
方法:

public Employee getEmpByIdAndLastName(Integer id,String lastname)

取值:#{id},#{lastName} 会出现异常

命名参数

明确指定封装参数时map的key;@Param(“id”)
多个参数会被封装成一个map
key:使用@Param注解指定的值
value:参数值
#{指定的key}取出对应的参数值

pojo

如果多个参数正好是我们业务逻辑的数据模型,我们就只可以直接传入pojo
#{属性名},取出传入的pojo的属性值

map

如果多个参数不是业务模型中的数据,没有对应的pojo,不经常使用,为了方便,我们也可以传入map
#{key},取出map中对应的值

TO

如果多个参数不是业务模型中的数据,但是经常使用,推荐编写一个TO(Transfer Object)数据传输对象
Page{
int index;
int size;
}
思考:

public Employee getEmp(@Param("id") Integer id,String lastName);

取值:id==>#{id/param1} lastName==>#{param2}

public Employee getEmp(Integer id,@Param("e")Employee emp);

取值:id==》#{param1} lastName==》#{param2.lastName/e.lastName
}

特别注意:
如果是collection(List、Set)类型或者是数组,也会做特殊处理,也就是把传入的list或者数组封装在map中。
key:Collection

public Employee getEmpById(List<Integer> ids)

取值,取出第一个id值,#{list[0]}

参数值的获取

#{}可以获取map中的值或者pojo对象属性的值
${}可以获取map中的值或者pojo对象属性的值
区别:
#{}:是以预编译的形式,将参数设置到sql语句中;PreparedStatement;防止sql注入
${}:取出的值直接拼装在sql语句中,会有安全问题
大多数情况下,我们去参数的值都应该使用#{}

原生jdbc不支持占位符的地方我们就可以使用${}进行取值
比如分表:按照年份分表拆分
select * from ${year}_salary where xxx;
select *from tb1_employee order by ${f_name} ${order}
#{}:更丰富的用法
指定参数的一些规则
javaType、jdbcType、mode、numericScale、
resultMap、typeHandler、jdbcTypeName、expression(未来准备支持的功能)
jdbcType通常需要在某种特定的条件下被设置,
在我们数据为null的时候,有些数据库可能不能识别mybatis对null的默认处理。比如Oracle(报错)
jdbcType OTHER:无效类型;因为mybatis对所有的null都映射的是原生jdbc的OTHER类型,oracle(报错)
由于全局配置中,jdbcTypeForNull=OTHER;oracle不支持,两种方法:
1、#{email,jdbcType=OTHER};
2、jdbcTypeForNull=NULL


http://www.ppmy.cn/news/429821.html

相关文章

P25 线程状态

P25 线程状态 1.线程状态概述2.TIMED_WAITING&#xff08;计时等待&#xff09;3.BLOCKED&#xff08;锁阻塞&#xff09;4.WAITING&#xff08;无限等待&#xff09;5.补充知识点 系统&#xff1a;Win10 Java&#xff1a;1.8.0_333 IDEA&#xff1a;2020.3.4 1.线程状态概述 …

阿里巴巴开源Chat2DB v1.0.11 初体验

阿里巴巴开源Chat2DB v1.0.11 初体验 前言什么是Chat2DB下载安装安装配置Chat2DB初体验配置数据源准备测试数据认识几个功能菜单开始测试自然语言转SQLSQL解释SQL优化 使用总结后续功能结语 前言 作为一名阿里巴巴开源项目的拥护者&#xff0c;从Chat2DB开源至今都有关注这个开…

ios10怎么设置电池颜色_苹果手机电池颜色变黄了怎么调

大家好&#xff0c;我是时间财富网智能客服时间君&#xff0c;上述问题将由我为大家进行解答。 苹果手机电池颜色变黄了的调整方法是&#xff1a; 1、打开手机&#xff0c;点击设置。 2、在设置界面点击“电池”一栏&#xff0c;进入后关闭“低电量模式”右边滑块&#xff0c;电…

用什么方法可以远程恢复苹果手机丢失的数据呢

苹果手机不小心误删了照片怎么办 今天小编在视频网站上看到了一段iphone 6概念机的设计视频&#xff0c;这也让很多的果粉又燃起了攒钱的动力。不得不说&#xff0c;苹果手机在细节方面确实有自己的一套。特别是很瘦女孩子喜欢。就单拿照相功能来说&#xff0c;苹果相机拍出来的…

苹果手机上网很慢_手机信号满格,但网速却很慢?无非是这4种原因,看完你就知道了...

众所周知&#xff0c;互联网信息时代&#xff0c;人们的生活已然离不开网络了&#xff0c;而连接网络的方式分为两种&#xff0c;一种是连接WiFi上网&#xff0c;一种是使用移动数据上网。虽然说&#xff0c;5G网络已经在国内展开普及&#xff0c;但是面对高昂的5G套餐资费&…

苹果xr如何截屏_iphone敲两下截屏如何操作 苹果手机触控截屏方法【教程步骤】...

iphone敲两下截屏如何操作?相信小伙伴们一定很好奇,下面小编为大家带来了苹果手机触控截屏方法教程详解,感兴趣的小伙伴赶紧跟着小编一起来看看吧 iphone敲两下截屏怎么设置 轻点两下进行截屏其实是苹果手机利用辅助触控功能实现的,这个功能使用前是需要提前进行设置的,如…

苹果库乐队怎么玩_学会这个,自己给苹果手机换来电铃声

苹果手机较早之前就可以在手机上制作铃声了,但是还是不少朋友都不知道怎么操作,今天来一套利用库乐队制作铃声的教程,收藏码住再看防止忘记哦。 首先我们要在苹果手机上下载‘’库乐队‘’这个软件,软件是免费的,APP STORE搜索就行。制作铃声以QQ音乐为例,因为现在大部分…

多开分身苹果版_【教程】苹果手机居然可以微信分身?全套教程,进来领取

微信分身版下载后,是可以同一个手机登陆多个微信号的,如果你不知道苹果手机微信分身怎么用?苹果手机怎么下载微信分身版的话,一起来看看wed114结婚网小编为大家提供的详细介绍吧。 苹果手机微信分身怎么用 1、点击“下载微信分身版”; 应用名称:微信多开分身版6.2.6下载v6…