mybatis ——xml方式与动态sql
mybatis的真正强大之处在于它的映射语句,所以映射器的xml方式就显得相对简单
为啥子Mapper接口没有实现类,却可以被调用那?
mybatis使用java动态代理可以直接调用接口来调用相应的方法,不需要提供接口的实现类。当调用一个接口的方法时,会调用接口的全限定名称和当前调用方法的名称组成一个方法id,这个id就是xml映射文件中的namespace和具体方法的id,这样接口和xml就关联了。当调用mapper接口,通过代理转化成对xml里对应方法的调用。
mybatis使用预编译参数的一种方式。
select用法注意
resultMap标签用于配置java对象属性和查询结果列的对应关系,通过property和column来进行映射。
接口中定义方法的返回值必须和xml中resultType的类型一致。
数据库中,下划线命名很常见。java中,一般使用驼峰命名。可以通过设置全局属性mapUnderscoreToCamelCase为true可以自动将下划线方式的数据库列映射到驼峰命名的属性中。
多表进行关联查询时,若返回的结果不止一个表的信息咋办?例如:用户表和角色表关联查询,返回的既要role,还要user的一些,返回类型为role
1.可以在role实体类增加用户表要返回列对应的属性
2.若返回角色表中的信息多了,那1的就显得麻烦了。我们可以在role定义user类的属性。修改xml中的方法
<select id="" resultType="role">
select
...
u.user_name as "user.userName",
u.user_email as "user.userEmail"
from sys_user u
...
</select>
通过user.属性名来设置别名,user是在role里增加的属性,属性名是user的,这样就可以将值赋给user的属性
3.还可以通过在role实体类里定义user,修改xml,使用resultMap来进行映射
insert注意:
如何获取主键自增的值?
1.使用jdbc方式(支持主键自增的数据库):通过在insert标签设置userGeneratedKeys="true" keyProperty="id" ,mybatis会根据jdbc的getGeneratedKeys的方法来取出数据库内部生成的主键,将主键赋给keyProperty配置的id属性。多个属性,使用逗号隔开,这时还需设置keyColumn属性按顺序指定列,和设置的属性一一对应。
2.使用selectKey返回主键的值(主键自增不自增都适合):
mysql:
<insert id="">
...
<!--因为主键值是在insert执行成功后获得,所以order为after-->
<selectKey keyColumn="" resultType="" keyProperty="" order="AFTER">
select LAST_INSERT_ID()
</selectKey>
</insert>
oracle
<insert id="">
<!--从序列获取值作为主键插入数据库中,所以order为before-->
<selectKey keyColumn="" resultType="" keyProperty="" order="BEFORE">
select SEQ_ID.nextval from dual
</selectKey>
...
</insert>
update注意:
批量更新:结合foreach实现,在下方动态sql那块
delete注意:
批量删除(侯的博客:)https://blog.csdn.net/benxiaohai888/article/details/78564751
多个接口参数的用法:
基本参数,javaBean,Map类型,@param
注解方式:通过注解将sql语句直接写在接口上
优点:需求简单的系统,效率高。
缺点:sql变化时,需要重新编译代码,不方便维护。不推荐使用.
动态sql
if标签:通过判断参数值来决定是否使用某个查询条件
与where标签配合:where标签:该标签包含的元素内有返回值,就插入一个where。如果where后面的字符串是以and和or开头,就将他们剔除
与set标签配合使用:set标签:该标签内有返回值,就插入一个set,如果set后面的字符串是以逗号结尾,就剔除
trim标签:替换where和set的功能
<trim prefix="where" prefixOverrides="AND | OR">
...
</trim>or<trim prefix="set" suffixOverrides=",">
...
</trim>
choose when otherwise 标签:if ..else.. if..else
foreach:主要用在构建in条件中.
入参为数组类型的foreach迭代:
<select id="" resultType="">
select * from . where . in
<foreach collection="array" item="item"open="(" separator="," close=")">#{item}
</foreach>
</select>
collection取值决定于接口中方法的参数类型:入参为List类型:取值为list。为Map类型:取值为map的key
foreach实现批量插入:
<insert id="">
insert into sys_user(user_name)
values<!--入参为list-->
<foreach collection="list" item="it" separator=",">
(#{it.userName})
</foreach>
</insert>
foreach实现批量更新
<update id="">
update sys_user
set
<!--item为从迭代取出的值。index为索引的属性名当迭代对象为map,则该值是map的key,key写表的字段名-->
<foreach collection="_parameter" item="it" index="key" separator=",">
${key}=#{it},
</foreach>
</update>
转载于:https://www.cnblogs.com/lslshuo/p/9121295.html
mybatis ——xml方式与动态sql相关推荐
- Mybatis的CRUD之XML方式以及动态SQL
MyBatis 接口代理方式实现 Dao 层 传统方式实现 Dao 层,我们既要写接口,还要写实现类.而 MyBatis 框架可以帮助我们省略编写 Dao 层接口实现类的步骤.程序员只需要编写接口,由 ...
- MyBatis-02 MyBatis XML方式概述及配置步骤
概述 一个简单的权限控制需求 创建数据库表 创建实体类 XML方式概述及步骤 1. 首先在src/main/resources下com.artisan.mybatis.xml.mapper目录下创建5 ...
- Mybatis系列全解(八):Mybatis的9大动态SQL标签你知道几个?提前致女神!
封面:洛小汐 作者:潘潘 2021年,仰望天空,脚踏实地. 这算是春节后首篇 Mybatis 文了~ 跨了个年感觉写了有半个世纪 - 借着女神节 ヾ(◍°∇°◍)ノ゙ 提前祝男神女神们越靓越富越嗨森! ...
- Java神鬼莫测之MyBatis注解开发之动态SQL语句(六)
1.Mybatis注解开发之动态SQL语句 背景:使用mybatis的注解开发动态Sql会比较麻烦, 很不方便, 所以不太推荐使用,该文章以查询作为案例,演示动态sql语句. 注意:Mybatis的动 ...
- MyBatis-04 MyBatis XML方式之insert元素
insert概述 简单的insert用法 1. UserMapper中添加接口方法 2. UserMapper.xml 添加节点 3. 编写单元测试 使用JDCB方式返回主键自增的值 1.UserMa ...
- 【Java从0到架构师】MyBatis - 增删改、动态 SQL
MyBatis - 增删改.动态 SQL 动态 SQL if 标签 where 标签 sql 标签 foreach 标签 添加 主键设置 批量添加 - 利用 foreach 标签 更新 删除 批量删除 ...
- MyBatis:学习笔记(4)——动态SQL
MyBatis:学习笔记(4)--动态SQL 转载于:https://www.cnblogs.com/MrSaver/p/7453949.html
- 通用Mapper注解方式实现动态SQL
1.通用Mapper注解方式实现动态SQL 注意:使用动态SQL后,不能使用分页助手,需要手动写分页SQL 对应的mapper接口实现SelectMapper接口 在对应的mapper接口中的方法上
- Mybatis注解-注解方式的动态SQL语句
基于手写SQL语句的注解CRUD 把手写SQL语句的注解CRUD,修改为动态SQL语句方式. CategoryDynaSqlProvider 新增CategoryDynaSqlProvider,提供C ...
- Mybatis第三天动态Sql语句、XML中一对多、多对一、多对多该怎么写
Mybatis第三天 Mybatis中使用unpooled配置连接池原理分析 Mybatis中使用pooled配置连接的原理分析 Mybatis中的事务原理和自动提交设置 Mybatis中的动态sql ...
最新文章
- 2021年大数据ELK(十五):Elasticsearch SQL简单介绍
- 参观Speedy Cloud 有感
- python logging命令注入_整理后的手动注入脚本命令
- centos普通用户设置sudo权限
- shell脚本例子集锦
- camel 调用soap_使用Apache Camel通过soap添加WS-Security
- matlab——图像细化
- JDK源码学习笔记——Enum枚举使用及原理
- python库skimage 绘制直方图;绘制累计直方图;实现直方图匹配(histogram matching)
- 美赛论文格式基本要求
- Ingenuous Cubrency UVA 11137
- CV控制输出的图片大小
- 阿里云对象存储OSS
- 网易mumu模拟器去广告纯净版 v1.26.1.1
- 【愚人节小程序】Java Swing的简单使用
- 中职网络安全操作系统渗透
- 计算机开机其他用户,Win8.1系统下取消开机显示“其他用户”的方法
- Win10 如何开启 Administrator 账户
- 2019年学习java还有前途吗?
- html5seo优化,HTML 5会如何影响我们的SEO优化
热门文章
- 敏捷开发一千零一夜读书笔记之敏捷初探
- 栈(操作受限的线性表)---C语言版
- angular语言前端开发_详解使用angular-cli发布i18n多国语言Angular应用_唇印_前端开发者...
- python解释器在语法上不支持什么编程_python解释器和编辑器的区别 - CSDN
- Linux Frp内网穿透
- C++模版类List实现
- 使用Opencv获取每个像素点的RGB颜色分量/HSV颜色分量
- SDNU 1072.我们爱递归(水题)
- Ogre3D的GOOF的场景编辑器截图
- _beginThreadex创建多线程解读