MyBatis ——在java层面对MySQL数据库进行操作

目录

MyBatis 是一款优秀的 持久层框架,用于简化JDBC(java操作数据库)的开发;

使用MyBatis 查询所有用户数据的过程

Lombok是一个实用的]ava类库,能通过注解的形式 简化 JavaBean的代码

注解:

引入Mybatis的相关依赖,配置Mybatis(数据库连接信息)

编写SQL语句(注解/XML)使用注解的方式编写SQL语句 使用XML映射文件编写SQL语句

使用注解的方式编写SQL语句

1. 编写SQL语句的类 注解

2.测试类 注解

数据库连接池重复使用 一个现有的 数据库连接

预编译 SQL语句

使用XML映射文件编写SQL语句

规范

MyBatisX是一款基于IDEA的快速开发MyBatis 的插件,为效率而生,

使用过程可以通过点击红蓝小鸟实现两个文件之间的切换

动态SQL:随着用户的输入或外部条件的变化而变化的SQL语句,我们称为 动态SQL。

抽取重复的SQL片段


 

  • MyBatis 是一款优秀的 持久层框架,用于简化JDBC(java操作数据库)的开发;


    MyBatis官网 : https://mybatis.org/mybatis-3/zh/index.html
    JDBC:Java语言操作关系型数据库的一套 API,我们可以使用这套接口(JDBC)编程,真正执行的代码是驱动数据库jar包中的实现类
    • 使用MyBatis 查询所有用户数据的过程

      • 准备工作(创建springboot工程、数据库表user、JavaBean类 User)
        简化JavaBean的代码——Lombok是一个实用的]ava类库,能通过注解的形式 简化 JavaBean的代码
        • Lombok是一个实用的]ava类库,能通过注解的形式 简化 JavaBean的代码


          注意事项:Lombok会在编译时,自动生成对应的java代码。我们使用lombok时,还需要安装一个lombok的插件(idea自带)
           
          • 注解:

            • 为了方便,系统将常用的注解合并在一起 ——> @Data —>Data
              包含的注解
              @Getter —> getXxx、@Setter—>setXxx 、@ToString —> tostring()、@EqualsAndHashCode —>equals() + hashcode()
            • @NoArgsConstructor —>无参构造 @AllArgsConstructor —>全参构造
      • 引入Mybatis的相关依赖,配置Mybatis(数据库连接信息)


        application.properties文件配置数据库连接信息
      • 编写SQL语句(注解/XML)
        使用注解的方式编写SQL语句 使用XML映射文件编写SQL语句

        • 使用注解的方式编写SQL语句
          • 1. 编写SQL语句的类 注解

            • 类名前——@Mapper
            • SQL语句——@Select(查找)、@delect(删除)、@update(修改);
          • 2.测试类 注解

            • 类名前——@SpringBootTest
              告诉程序这个是测试类
            • 依赖注入——@Autowired
              得到IOC容器中的对应实现类
            • 测试方法——@Test
              告诉程序这个是测试方法
          • 数据库连接池
            重复使用 一个现有的 数据库连接
            • 特点:
              • 数据库连接池是个容器,负责分配、管理数据库连接(Connection)
              • 它允许应用程序重复使用 一个现有的 数据库连接,而不是 再重新建立一个
              • 释放空闲时间 超过最大空闲时间 的 连接,来避免 因为没有释放连接 而引起的数据库 连接遗漏
            • 数据库连接池和普通连接的区别

              • 1.普通连接:使用时创建,不用时销毁
              • 2.数据库连接池(相当于线程池):使用时,从连接池中获取,用完了再放回连接池; 当用户获得连接,却不使用时,连接池会去检测这个连接,当空闲时间超过最大空闲时间,就会直接释放。
            • 优势:资源重用、 提升系统响应速度、 避免数据库连接遗漏。
            • 标准接口 :DataSource ,由第三方组织实现此接口——Hikari 、Druid


              Hikari (追光者): Springtboot默认使用的数据库连接项目
              ​Druid (德鲁伊): 阿里巴巴开源的数据库连接项目
              • IDEA中新建Springboot工程,默认使用的是Hikari 数据库连接池,如果要使用Druid,需要切换

          • 预编译 SQL语句
            • 1. 设置 SQL中的 参数—— #{...}
              • 参数占位符——#{...}、concat(#{...})、${...}


                常用 #{...} 需要字符串拼接时候使用: concat(#{...}) ${...}:用于参数拼接,但是会存在SQL注入问题,不常用
                • #{...} : 执行SQL时,会将#{...)替换为?,生成预编译SQL,会自动设置参数值。
                  使用时机:参数传递,都使用#{...}
                • concat(#{...}):执行SQL时,会将#{...)替换为?,concat()方法,将参数输入的值作为字符串和左右拼接到一起
                • ${...} : 拼接SQL。直接将参数拼接在SQL语句中,存在SQL注入问题。
                  使用时机:如果对表名、列表进行动态设置时使用,
              • 如果mapper接口方法形参只有一个普通类型的参数,{#..}里面的属性名可以随便写,如: #{id)、#{value}。


                可以在application.properties中,配置“打开mybatis的日志”的代码,并指定输出到控制台,在控制台查看本次数据的转换
                • 优势:性能更高、更安全(防止SQL注入)


                  如果不用参数,每一次都需要创建新的删除语句;使用参数只需要创建一次删除语句
                  • 缓存:SQL语法解析检查+优化SQL+编译SQL 三合一
                    执行过程:
                    ​1.执行第一条语句,按顺序依次执行;
                    ​2.执行第二条时候,会先检查 缓存 里面是否包含这条语句,
                    ​ 2.1如果包含,直接执行;
                    2.2如果不包含,再次按顺序依次执行
                  • SQL注入是通过操作输入的数据来修改事先定义好的SQL语句,以达到执行代码对服务器进行攻击的方法。

              • 如果mapper接口方法形参 有多个普通类型的 参数,{#..}里面的属性名需要一一对应,一般会封装成一个JavaBean对象,这就需要参数跟JavaBean中的变量名一一对应。


                属性值也是针对数据库中数据表的命名进行定义,将带下划线的写成小驼峰形式
                 
              • 主键返回——@Options(keyProperty="id",useGeneratedkeys = true);


                会自动生成主键值,并赋值给 emp对象的 id变量
            • 2.数据封装——判断JavaBean类中的变量名和数据库是否一致,一致就将数据赋值到数据库(也叫映射)。


              这也是为什么要将JavaBean类中的变量和数据库表头变量名一致,但是多个单词语句,在SQL语句通过“_”下划线连接,java中设置为小驼峰模式。所以两个变量名不一样,这就需要在 application.properties配置文件中 开启 mybatis的驼峰命名自动映射开关
              • 实体类属性名 和 数据库表查询返回的字段名一致,mybatis会自动封装
              • 如果实体类属性名 和 数据库表查询返回的字段名不一致,不能自动封装,
              • 开启mybatis的驼峰命名自动映射开关a_column —>aCloumn
                application.properties文件中:mybatis.configuration.map-underscore-to-camel-case-true
        • 使用XML映射文件编写SQL语句
          • 规范

            • XML映射文件的名称与Mapper接口名称一致,并且将XML映射文件和Mapper接口放置在相同包下(同包同名)
            • XML映射文件的namespace属性为Mapper接口全限定名一致。
            • XML映射文件中sql语句的id与Mapper接口中的方法名一致,并保持返回类型一致。
          • MyBatisX是一款基于IDEA的快速开发MyBatis 的插件,为效率而生,

            • 使用过程
              可以通过点击红蓝小鸟实现两个文件之间的切换
              • 第一步:在java文件中设置 方法,传递参数,确定返回值

              • 第一步:创建同包同名的xml文件。

              • 第二步:设置namespace属性

              • 第三步:设置sql语句的id与Mapper 接口中的方法名一致,并保持返回类型一致。
                id 设为方法名 list; resultType设置为 方法的返回值——单条记录所封装的类型
            • 动态SQL:随着用户的输入或外部条件的变化而变化的SQL语句,我们称为 动态SQL。
              • if : 判断条件,成立就会拼接SQL语句

              • <where> 标签:子元素有内容情况下,在行首插入 where语句,自动去除 子句的开头 and 或者 or


                where 语句 替换成 <where> 标签
              • <set> 标签:子元素有内容情况下,在行首插入 set语句,自动省略额外的 符号(例如 “ ,”),用于update 语句中


                set语句 替换成 <set> 标签
              • <foreach>标签 : 遍历集合。


                collection :集合名称; item :遍历出来的元素/项; separator:元素之间的分隔符 open:遍历开始前拼接 close:遍历结束后拼接
            • 抽取重复的SQL片段


              相当于java中抽取重复的代码定义一个方法一样
              • <sql>:定义可重用的 SQL片段。
              • <include>:通过属性refid,指定包含的sql片段。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值