mybatis--映射器

37 篇文章 1 订阅
35 篇文章 0 订阅

定义:映射器由一个接口加上xml文件(或者注解)组成,是mybatis最重要且最复杂的组件。

映射器配置元素  
元素名称 描述 备注
select 查询语句 可以自定义参数,返回结果集等
insert 插入语句 返回一个整数,代表插入的条数
update 更新语句(修改语句) 返回一个整数,代表更新的条数
delete 删除语句 返回一个整数,代表删除的条数
parameterMap 定义参数映射集 不推荐使用
sql 允许定义一部分sql,然后在各个地方引用它 一次定义,多次引用
resultMap 描述从数据库结果集中来加载对象,最复杂、最强大的元素 提供映射规则
cache 给命名空间的缓存配置 --
cache-ref 其他命名空间缓存配置的引用 --
select元素--查询
select元素配置  
元素 说明 备注
id 与mapper的命名空间组合,是唯一的 mapper接口方法和id一致,否则会抛出异常
parameterType 可以输全类名,也可以是别名,但是别名必须是mybatis内部定义或者自定义 一般为bean或者map等类型
parameterMap -- --
resultType entity的全路径,在允许自动匹配的情况下,结果集通过规范映射到bean;或者定义int、double、map等参数;或者使用别名,但是要符合规范,且不可以和resultMap同时使用。 常用参数
resultMap 映射集的引用,能提供自定义映射规则 最复杂的元素
flushCache 调用sql后是否清空本地和二级查询缓存。 取布尔值,默认值是false。
useCache 启动二级缓存 去布尔值,默认true
timeout 设置超时参数,单位是秒 默认值是厂商规定值
fetchSize 获取记录的总条数设定 默认值是厂商规定值
statementType 通知mybatis哪个statement在工作,statement、preparedStatement、callableStatement 默认是prepared
resultSetType forward_only(游标允许向前访问)、scroll_sensitive(双向滚动,但是不及时更新,就是修改值不在resultMap中显示出来)、scroll_insensitive(双向滚动,并及时跟踪数据库的更新,以便修改resultSet的数据) 默认值是厂商规定值
databaseId 数据库厂商id 支持多种数据库
resultOrdered 适用于过个结果集的情况,它将列出执行后 每个结果集的名称,每个名称之间用逗号分隔 很少使用
自动映射和驼峰映射
自动映射通过pojo中的属性名保持一致,一般会在select语句只用as关键字(别名)使用一致化完成映射。驼峰映射则是使用在setting元素中配置mapUnderscoreToCameCase为true。系统将会按照role_name配对pojo中的roleName。
传递多个参数:
1、使用map接口传递参数:
定义为:public List<Role> find (Map<String, String> param);
此时传递给映射器的使用一个map对象。然后在对应的语句中使用parameterType="map",配置,但是注意参数中的name和note都是map的键,而不是值。不推荐使用。
<select id="find" parameterType="map" resultType="role">
    select id, name, note from role
    where name like concat('%', #{name}, '%')
    and note like concat('%', #{note}, '%')
</select>

2、使用注解传递多个参数:
就是在接口中使用@Param注解。这样在sql语句中就不需要写parameterType了。
3、使用bean传递参数:
<select id="find" parameterType="beanName" resultType="role">
    select id, name, note from role
    where name like concat('%', #{name}, '%')
    and note like concat('%', #{note}, '%')
</select>

4、混合使用
在mapper中使用多种方式传递参数,不用在sql语句中使用parameterType,Mybaits也是成立的。而且Mybaits为java准备了EL(中间语言),更是提高了编码效率。
5、总结
使用map传递参数导致了业务可读性的丧失,导致后续扩展和维护的困难。不推荐使用。
使用注解@Param传递,更直观,但是参数过多不利于使用,不赞成使用。
建议使用java Bean方式。
混喝使用的时候,要明确参数的合理性。
分页参数RowBounds:
mybatis中专门进行分页的类。只需要重写这个类,然后再mapper中传递这个类的参数既可,不需要进行xml中的操作。
insert语句
属性 描述 备注
useGenerateKeys 是否取出主键 默认值是false
keyProperty 仅对insert和update有效唯一标示,设置键值 默认值是unset。不能和keyColumn共用
keyColumn 仅对insert和update有效,通过生成的键值设置表中的的 列名 --
以上只是insert语句中的特殊属性,其余的参考select语句的属性。
使用useGenerateKeys实现主键回填,实现插入后调用本条数据的主键。
update元素和delete元素
比较简单,参考insert即可,没有较为特殊的属性。
sql元素
作用是定义一条sql的一部分,方便后面的sql引用它,比如列名。
<!--一个例子-->
<sql id="role">
 ${alias}.id, ${alias}.name
 </sql>
 
 <select id="getRole">
     select
     <include refid="role">
         <property name="alias" value="r"/>
         <!--对应sql元素的值,修改alias的意义-->
     </include>
     from role r where id = #{id}
</select>         

字符串处理和替换
#和$两种识别符。其中#是将传入的值当做字符串的形式;$是将传入的数据直接显示生成sql语句。
#方式能够很大程度防止sql注入。
一般能用#的就别用$.
使用resultMap映射结果集
<!--元素及其子元素-->
<resultMap>
    <constructor>
        <idArg/>
        <arg/>
    </constructor>
    <association/>
    <collection/>
    <discriminator>
        <case/>  
   </discriminator>
</resultMap>         

constructor元素用于配置构造方法。当没有无参构造器的时候就使用结果集配置。  <idArg/> <arg/>分别匹配id和其他值。
resultMap和idArg的属性  
名称 说明 备注
property 映射到列结果的字段或者属性。即类的属性和sql列名对应 可以使用导航式字段。例如product.category.categoryName
column 对应的SQL的列 --
JavaTpye 配置java类型 特定的类完全限定名或者mybatis上下文别名。
jdbcType 配置数据库类型 jdbc类型
typeHandler 类型处理器 允许使用特定的处理器来覆盖默认的处理器。限制jdbcType和JavaType的转化规则。
可以使用map返回结果集。
级联
也就是一对一,一对多,多对多。

mybatis的级联有三种。
鉴别器(discriminator):根据某些条件决定采用具体的实现类级联的方案。比如体检表根据性别区分。
一对一(association):一对一级联
一对多(Collection):一对多级联。
特别的:mybatis没有多对多级联。因为多对多比较复杂,使用困难,优先考虑使用多个一对多进行退换。
mybatis其他常用标签:
一、foreach标签属性解读

MyBatis的foreach标签应用于多参数的交互如:多参数(相同参数)查询、循环插入数据等,foreach标签包含collection、item、open、close、index、separator,MyBatis的foreach标签与jstl标签的使用非常相似,以下为几个属性的意思解释:

collection:参数名称,根据Mapper接口的参数名确定,也可以使用@Param注解指定参数名

item:参数调用名称,通过此属性来获取集合单项的值

open:相当于prefix,即在循环前添加前缀

close:相当于suffix,即在循环后添加后缀

index:索引、下标

separator:分隔符,每次循环完成后添加此分隔符。

在使用foreach的时候最关键的也是最容易出错的就是collection属性,该属性是必须指定的,但是在不同情况 下,该属性的值是不一样的,主要有一下3种情况:

1. 如果传入的是单参数且参数类型是一个List的时候,collection属性值为list
2. 如果传入的是单参数且参数类型是一个array数组的时候,collection的属性值为array
3. 如果传入的参数是多个的时候,我们就需要把它们封装成一个Map了,当然单参数也可。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
MyBatis-Plus(简称MP)是一个基于MyBatis的增强工具,它简化了MyBatis的开发流程,提供了更多的便捷功能和增强特性。下面是对MyBatis-Plus的介绍: 1. 代码生成器:MyBatis-Plus提供了一个代码生成器,可以根据数据库表结构自动生成实体类、Mapper接口以及XML映射文件,大大减少了手动编写这些代码的工作量。 2. 通用CRUD操作:MyBatis-Plus内置了通用的CRUD操作方法,包括插入、更新、删除和查询等,可以通过简单的方法调用完成数据库操作,无需编写SQL语句。 3. 条件构造器:MyBatis-Plus提供了强大的条件构造器,可以通过链式调用的方式构建复杂的查询条件,支持动态条件拼接和查询。 4. 分页查询:MyBatis-Plus支持分页查询,可以方便地进行分页操作,提供了多种分页插件和方法。 5. 逻辑删除:MyBatis-Plus支持逻辑删除功能,可以通过配置实现逻辑删除而不是物理删除数据。 6. 自动填充:MyBatis-Plus提供了自动填充功能,可以在插入或更新数据时自动填充指定字段的值,例如创建时间、更新时间等。 7. 性能分析:MyBatis-Plus内置了性能分析插件,可以方便地查看SQL执行时间、慢查询等信息,帮助优化数据库操作性能。 8. 多租户支持:MyBatis-Plus支持多租户的数据隔离,可以根据不同的租户ID自动切换数据源或者添加租户ID条件。 以上是对MyBatis-Plus的简要介绍,它是一个功能强大且易于使用的MyBatis增强工具,可以提高开发效率和代码质量。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

matthew_leung

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值