mybatis学习

一.初识mybatis框架

1.简单介绍

MyBatis是一个优秀的数据持久层框架,是一种半自动的ORM实现

前世今生:     Mybatis前身是iBatis,是Apache的一个开源项目 2010年由Apache迁移到了Google Code,改名为MyBatis 2013年又迁移到Github

Mybatis官网:http://mybatis.org Github:https://github.com/mybatis

2.搭建mybatis框架环境

(1)步骤如下:

  • 创建工程并添加Jar包(jar包下载地址:https://github.com/mybatis/mybatis-3/releases)
  • 添加MyBatis核心配置文件
  • 创建实体类
  • 创建SQL映射文件
  • 代码测试,输出结果

3.Mybaits框架的特点

开源的优秀持久层框架

面向配置编程

SQL语句与代码分离,方便维护

良好支持数据映射,结果处理方便

支持动态SQL语句

4.MyBatis框架配置扩展

(1)配置元素

  • configuration 根节点
  • properties    可以配置在Java 属性配置文件中
  • settings    修改 MyBatis 在运行时的行为方式
  • typeAliases   为 Java 类型命名一个别名(简称)
  • typeHandlers   类型处理器
  • objectFactory   对象工厂
  • plugins   插件
  • environments     环境
  • environment   环境变量
  • transactionManager  事务管理器
  • dataSource   数据源
  • mappers    映射器

(2)SQL映射文件

parameterType:

  • 表示查询语句传入参数的类型。
  • 支持基础数据类型和复杂数据类型
  • 如果SQL是单条件查询,则parameterType指定为基础数据类型
  • 如果是多条件查询,则parameterType指定为复杂数据类型
  • 对于常用的java类型,mybatis都定义了类型别名:

MyBatis传入参数类型(parameterType)总结:

resultType:

  • 来实现查询结果的自动映射
  • resultType的值可以指定为两种类型: 基本数据类型(int、string、long等等)
  • 复杂数据类型(Java实体类、map/hashmap)

MyBatis查询结果映射总结:

5.MyBatis动态SQL

动态SQL是MyBatis的一个强大特性,可以运用动态SQL语句标签方便我们在SQL中实现各种逻辑。

常用标签如下:

  • <if>:条件选择
  • <choose>:相当于Java中的switch,用于条件选择
  • <where>:简化SQL中的where
  • <set>:解决动态更新语句在

<set>标签中的每一个修改字段前面/后面尽量加上逗号

  • <trim>:灵活的去除多余的关键字

该标签有以下属性:

prefix:前缀

suffix:后缀

prefixOverrides:前缀覆盖,可用于智能的处理”and”,”or”关键字

suffixOverrides:后缀覆盖,可用于处理update语句中中多余的”,”

作用:可以利用trim来代替<where>或者<set>的功能

  • <foreach>:迭代遍历一个集合

foreach标签的属性主要有 item,index,collection,open,separator,close。

1)item表示对集合进行迭代时每一个对象的别名 index指定一个名字,用于表示在迭代过程中,每次迭代的位置

2)open是前缀,表示该语句以什么开始

3)separator表示在每次迭代元素之间以什么符号作为分隔符

4)close是后缀,表示以什么结束

5)collection指定需要遍历的集合

说明:

(1) 如果是单参数且参数类型是集合时,collection的值为list          

(2) 如果是单参数且参数类型是数组时,collection的值为array          

(3) 如果是多参数且参数类型是map或者实体类对象时,collection的值为对应map的键名或者对象的属性名

  • if+set标签组合可以实现在update语句中的动态更新

6.Mybatis注解方式:

  • @lnsert:实现新增
  • @Update:实现更新
  • @Delete:实现删除
  • @Select:实现查询
  • @Result:实现结果集封装
  • @Results:可以与@Result一起使用,封装多个结果集
  • @One:实现一对一结果集封装
  • @Many:实现一对多结果集封装

注解式开发可以减少Sql映射文件的配置,使代码变得更加简洁。但是使用注解式开发,sql语句的维护成本也会更高。

7.分页插件

limit index,pageSize

index:当前页的起始索引,index=(pageNum-1)*pageSize

pageSize:每页显示条数

pageNum:当前页的页码

count:总记录数

totalPage:总页数

if(count%pageSize !=0){

        totalPage+=1;

}

导入依赖:依赖可在官网(https://pagehelper.github.io/docs/howtouse/)复制

   <dependency>
            <groupId>com.github.pagehelper</groupId>
            <artifactId>pagehelper</artifactId>
            <version>版本号</version>
   </dependency>


同时还需要在核心配置文件中配置:

 <plugins>
        <plugin interceptor="com.github.pagehelper.PageInterceptor"></plugin>
 </plugins>


查询功能开启前要开启分页功能: 

Page<Object> page = PageHelper.startPage(1, 4);

分页数据:

PageInfo<Emp> pageInfo = new PageInfo<>(emps, 5);

分页相关数据:
pageNum:当前页的页码
pageSize:每页显示的条数
size:当前页显示的真实条数
total:总记录数
pages:总页数
prePage:上一页的页码
nextPage:下一页的页码
isFirstPage/isLastPage:是否为第一页/最后一页
hasPreviousPage/hasNextPage:是否存在上一页/下一页
navigatePages:导航分页的页码数
navigatepageNums:导航分页的页码,[1,2,3,4,5]

需要注意的是,查看SQL日志,可以看到分页插件的实现也是使用limit关键字,所以千万不要再StuMapper对应的select查询语句后面加分号(;),因为分号表示SQL语句结束,此时插件再在后面附加limit限制语句就会报错。

另外,在项目中经常会用到SQL语句的拼接,所以建议在项目的任何地方写SQL语句,末尾都不要加分号(;),不加分号不会报错,加了分号就存在报错的可能,不加比加好

Mapper.xml文件中定义SQL语句片段,里面的SQL语句也不能加分号,否则后面引用语句的方法都会报错

  • 16
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值