MyBatis

MyBatis

1.什么是MyBatis

  • MyBatis是一款优秀的持久层框架, 用于简化JDBC开发

  • MyBa本是Apache的一个开源项目iBatis, 2010年这个项目由Apache software foundation迁移到了google code, 并且改名为MyBatis. 2013年11月迁移到Github

  • 持久层是负责将数据保存到数据库的那一层代码

  • javaEE三层架构 : 表现层, 业务层, 持久层

  • 框架是一个半成品软件, 是一套可重用的, 通用的, 软件基础代码模型

  • 在框架的基础智商构建软件编写更加高效, 规范, 通用, 可扩展

2.JDBC的缺点

 

3.MyBatis简化

 

4.MyBatis快速入门

  1. 导入依赖坐标

  2. 编写MyBatis核心配置文件

  3. 编写SQL映射文件 --> 同意管理SQL语句, 解决硬编码问题

  4. 加载核心配置文件, 获取SqlSessionFactory对象

  5. 获取SqlSession对象, 执行SQL语句

  6. 释放资源

5.解决SQL映射文件的警告信息

  • 产生原因 : idea和数据库没有建立连接, 不识别表信息

  • 解决方式 : 在idea中配置MySQL数据库链接

6.使用Mapper代理方式完成入门案例

  1. 定义与SQL映射文件同名的Mapper接口, 并且将Mapper接口和SQL映射文件放置在同一目录下

  2. 设置SQL映射文件的namespace属性为Mapper接口全限定名

  3. 在Mapper接口中定义方法, 方法名就是SQL映射文件中sql语句的id, 并保持参数类型和返回值类型一致

  4. 编码

    1. 通过SqlSession的getMapper方法获取Mapper接口的代理对象

    2. 调用对应方法完成sql的执行

如果Mapper接口名称和SQL映射文件名称相同, 并在同一目录下, 则可以使用包扫描的方式简化SQL映射文件的加载

<mappers>

<! --加载sql的映射文件-->

<!--<mapper resource = "com/itheima/mapper2/UserMapper.xml">-->

<package name ="com.itheima.mapper">

</mappers>

7.MyBatis的核心配置文件详解

 

8.MyBatis代码步骤

 

9.数据库表的字段名和实体类的属性名不一样不能自动封装

  • 起别名 : 对不一样的列名起别名, 然别名和实体类的属性名一样

    • 缺点 : 每次查询都要定义一次别名, 不方便

    • 解决方式 : 使用SQL片段 :

       

    • 缺点 : 不灵活

  • resultMap : 两个标签 id标签是完成主键的映射 result是完成一般字段的映射 column是表的列名 property是实体类的属性名

  •  

10.参数占位符

/#{} : 会将参数替换为 ? 为了防止SQL注入 /没有意义 不用写

${} : 拼接SQL, 会存在SQL注入问题

使用时机 :

参数传递的时候 : #{}

表名或者列名不固定的情况下 : ${}

参数类型 : parameterType : 可以是省略

11.特殊字符处理

  1. 转义字符

  2. CDATA区

 

12.参数接受

  • 散装参数 : 如果方法中有多个参数, 需要使用@Pram("SQL参数占位符名称")

  • 对象参数 : 对象的属性名称要和参数占位符名称一致

  • Map集合参数 : 只需要保证SQL中的参数名和map集合的键的名称对应上, 即可设置成功

13.动态条件查询

  • if : 条件判断

  • test : 逻辑表达式

  • 问题 : 每个判断条件后面要加and 如果第一个判断条件不存在则where之后直接跟的就是and会语法报错

    • 使用恒等式 在where后面拼接 1=1

    • 使用<where>标签替换where关键字

14.多个条件中选一个

 

15.添加成功后主键返回

 

16.批量删除

mybatis会将数组参数封装成一个map集合

默认的key是array

使用@param注解改变map集合默认的key名称

 

 

16.参数封装

  • 多个参数 : 封装成map集合, 可以使用@param注解设置map集合的key 使用@param注解会替换arg 使用后不能再使用arg获取值 但是param不受影响

    • map.put("arg0", 参数值1);

    • map.put("param1", 参数值1);

    • map.put("arg1", 参数值2);

    • map.put("param2", 参数值2);

  • 单个参数

    • POJO类型 : 直接使用, 属性名和参数占位符名称一致

    • Map集合 : 直接使用, Map集合的key和参数占位符一致

    • Collection : 封装成Map集合 可以使用@param注解设置map集合的key

      • map.put("arg0", collection集合);

      • map.put("collection", collection集合);

    • List : 封装成Map集合 可以使用@param注解设置map集合的key

      • map.put("arg0", list集合);

      • map.put("collection", list集合);

      • map.put("list", list集合);

    • Array : 封装成Map集合 可以使用@param注解设置map集合的key

      • map.put("arg0", 数组);

      • map.put("array", 数组);

    • 其他类型 : 直接使用

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值