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相关推荐

  1. Mybatis的CRUD之XML方式以及动态SQL

    MyBatis 接口代理方式实现 Dao 层 传统方式实现 Dao 层,我们既要写接口,还要写实现类.而 MyBatis 框架可以帮助我们省略编写 Dao 层接口实现类的步骤.程序员只需要编写接口,由 ...

  2. MyBatis-02 MyBatis XML方式概述及配置步骤

    概述 一个简单的权限控制需求 创建数据库表 创建实体类 XML方式概述及步骤 1. 首先在src/main/resources下com.artisan.mybatis.xml.mapper目录下创建5 ...

  3. Mybatis系列全解(八):Mybatis的9大动态SQL标签你知道几个?提前致女神!

    封面:洛小汐 作者:潘潘 2021年,仰望天空,脚踏实地. 这算是春节后首篇 Mybatis 文了~ 跨了个年感觉写了有半个世纪 - 借着女神节 ヾ(◍°∇°◍)ノ゙ 提前祝男神女神们越靓越富越嗨森! ...

  4. Java神鬼莫测之MyBatis注解开发之动态SQL语句(六)

    1.Mybatis注解开发之动态SQL语句 背景:使用mybatis的注解开发动态Sql会比较麻烦, 很不方便, 所以不太推荐使用,该文章以查询作为案例,演示动态sql语句. 注意:Mybatis的动 ...

  5. MyBatis-04 MyBatis XML方式之insert元素

    insert概述 简单的insert用法 1. UserMapper中添加接口方法 2. UserMapper.xml 添加节点 3. 编写单元测试 使用JDCB方式返回主键自增的值 1.UserMa ...

  6. 【Java从0到架构师】MyBatis - 增删改、动态 SQL

    MyBatis - 增删改.动态 SQL 动态 SQL if 标签 where 标签 sql 标签 foreach 标签 添加 主键设置 批量添加 - 利用 foreach 标签 更新 删除 批量删除 ...

  7. MyBatis:学习笔记(4)——动态SQL

    MyBatis:学习笔记(4)--动态SQL 转载于:https://www.cnblogs.com/MrSaver/p/7453949.html

  8. 通用Mapper注解方式实现动态SQL

    1.通用Mapper注解方式实现动态SQL 注意:使用动态SQL后,不能使用分页助手,需要手动写分页SQL 对应的mapper接口实现SelectMapper接口 在对应的mapper接口中的方法上

  9. Mybatis注解-注解方式的动态SQL语句

    基于手写SQL语句的注解CRUD 把手写SQL语句的注解CRUD,修改为动态SQL语句方式. CategoryDynaSqlProvider 新增CategoryDynaSqlProvider,提供C ...

  10. Mybatis第三天动态Sql语句、XML中一对多、多对一、多对多该怎么写

    Mybatis第三天 Mybatis中使用unpooled配置连接池原理分析 Mybatis中使用pooled配置连接的原理分析 Mybatis中的事务原理和自动提交设置 Mybatis中的动态sql ...

最新文章

  1. 2021年大数据ELK(十五):Elasticsearch SQL简单介绍
  2. 参观Speedy Cloud 有感
  3. python logging命令注入_整理后的手动注入脚本命令
  4. centos普通用户设置sudo权限
  5. shell脚本例子集锦
  6. camel 调用soap_使用Apache Camel通过soap添加WS-Security
  7. matlab——图像细化
  8. JDK源码学习笔记——Enum枚举使用及原理
  9. python库skimage 绘制直方图;绘制累计直方图;实现直方图匹配(histogram matching)
  10. 美赛论文格式基本要求
  11. Ingenuous Cubrency UVA 11137
  12. CV控制输出的图片大小
  13. 阿里云对象存储OSS
  14. 网易mumu模拟器去广告纯净版 v1.26.1.1
  15. 【愚人节小程序】Java Swing的简单使用
  16. 中职网络安全操作系统渗透
  17. 计算机开机其他用户,Win8.1系统下取消开机显示“其他用户”的方法
  18. Win10 如何开启 Administrator 账户
  19. 2019年学习java还有前途吗?
  20. html5seo优化,HTML 5会如何影响我们的SEO优化

热门文章

  1. 敏捷开发一千零一夜读书笔记之敏捷初探
  2. 栈(操作受限的线性表)---C语言版
  3. angular语言前端开发_详解使用angular-cli发布i18n多国语言Angular应用_唇印_前端开发者...
  4. python解释器在语法上不支持什么编程_python解释器和编辑器的区别 - CSDN
  5. Linux Frp内网穿透
  6. C++模版类List实现
  7. 使用Opencv获取每个像素点的RGB颜色分量/HSV颜色分量
  8. SDNU 1072.我们爱递归(水题)
  9. Ogre3D的GOOF的场景编辑器截图
  10. _beginThreadex创建多线程解读