mybatis 常见问题

本文详细探讨了MyBatis的各个方面,包括与ORM的区别、分页功能、#{}与${}的区别、接口绑定方式、动态SQL与OGNL语法、Like模糊查询、DAO接口重载、映射文件标签引用、ID重复问题、枚举映射、获取自增主键、多参数传递、缓存机制以及时间戳查询。通过实例解析,展示了MyBatis的灵活运用和最佳实践。
摘要由CSDN通过智能技术生成

目录

mybatis和ORM

mybatis分页功能

#{}  和  ${}区别

接口绑定的几种方式

mybatis里的动态SQL语句,用的ognl语法

Like 模糊查询

 通常一个mapper.XML对应一个DAO接口,DAO是否可以重载?

映射文件中A标签引用B标签,如果B标签在A的后面定义,可以吗?

不同映射文件中的id是否可以重复?

MyBatis可以映射到枚举类

如何获取自动生成的主键id

传递多个参数

缓存机制


mybatis和ORM

 

mybatis属于半orm,因为sql语句需要自己写。自己写sql语句的好处是,可以根据自己的需求,写出最优的sql语句。灵活性高。但是,由于是自己写sql语句,导致平台可移植性不高。mysql语句和Oracle语句不同

mybatis分页功能

方法1:

    通过自己写SQL语句进行分页。limit

方法2:

    mybatis使用RowBounds对象进行分页。

      创建RowBounds对象,设置起始记录offset为第0条,查询条数limit为2条。从第0条开始,取两条数据

      RowBounds rowBounds = new RowBounds(offset,limit);

方法3:

    使用mybatis分页插件PageHelper

pom依赖

<!--
https://mvnrepository.com/artifact/com.github.pagehelper/pagehelper-spring-boot-starter
-->
<dependency>
   <groupId>com.github.pagehelper</groupId>
   <artifactId>pagehelper-spring-boot-starter</artifactId>
   <version>1.2.3</version>
   <exclusions>
      <exclusion>
         <artifactId>mybatis-spring-boot-starter</artifactId>
         <groupId>org.mybatis.spring.boot</groupId>
      </exclusion>
   </exclusions>
</dependency>

 使用 Page<> page = PageHelper.startPage(pageNum,pageSize);pageNum 页数,pageSize每页条数

会返回这样一套json数据,包括了 total 总条数 8条,开始页数2,每页条数2,从第几条开始取的3,到第几条结束的4,总页数4页,具体的数据 ,分页页码的数组也有了

以上为三种分页方式

#{}  和  ${}区别

最经典的问题了

#{}是预编译处理,像传进来的数据会加个" "(#将传入的数据都当成一个字符串,会对自动传入的数据加一个双引号),${}就是字符串替换。直接替换掉占位符。$方式一般用于传入数据库对象,例如传入表名.

使用${}的话会导致sql注入。什么是SQL注入呢?比如 select * from user where id = ${value}

value应该是一个数值吧。然后如果对方传过来的是 001  and name = tom。这样不就相当于多加了一个条件嘛?把SQL语句直接写进来了。如果是攻击性的语句呢?001;drop table user,直接把表给删了

所以为了防止SQL注入,能用#{}的不要去用 ${}

如果非要用${}的话,那要注意防止SQL注入问题,可以手动判定传入的变量,进行过滤,一般SQL注入会输入很长的一条SQL语句

接口绑定的几种方式

接口绑定有两种方式

1、使用注解,在接口的方法上面添加@Select@Update等注解,里面写上对应的SQL语句进行SQL语句的绑定。

2、通过映射文件xml方式进行绑定,指定xml映射文件中的namespace对应的接口的全路径名

 

什么时候用注解绑定?什么时候用xml绑定?

当SQL语句比较简单的时候,使用注解绑定就可以了,当SQL语句比较复杂的话,使用xml方式绑定,一般用xml方式绑定比较多

mybatis里的动态SQL语句,用的ognl语法

1、if

<select id="select"
     resultType="Blog">
  SELECT * FROM BLOG
  WHERE state = ‘ACTIVE’
  <if test="title != null">
    AND title like #{title}
  <
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值