(Java)Mybatis学习笔记(一)

前言

知道要学习SSM框架,于是假期便开始了准备,把Maven、JDK动态代理、反射机制学完了,然后Mybatis当时只学完了一半,可惜到现在mybatis忘的差不多了,便下定决心,用8天时间把mybatis学完,因为有了Spring框架的学习,在加上有所基础,料想应该不难,既如此,那就开干

框架概述

三层架构

三层架构包含的三层:界面层、业务逻辑层、数据访问层

三层的职责

  • 界面层(表示层、视图层):主要功能是接收用户的数据,显示请求处理结果。使用web页面和用户交互,手机app也就是表示层,用户在app中操作,业务逻辑在服务器端处理
  • 业务逻辑层:接收表示层传递过来的数据,检查数据,计算业务逻辑,调用数据访问层获取数据
  • 数据访问层:与数据库打交道,主要实现对数据的增删改查。将存储在数据库中的数据提交给业务层,同时将业务层处理的数据保存到数据库

三层对应的包

  • 界面层:controller包(servlet)
  • 业务逻辑层:service包(XXXService类)
  • 数据访问层:dao包(XXXDao类)

三层对应的处理框架

  • 界面层—servlet—springmvc(框架)
  • 业务逻辑层—service类—spring(框架)
  • 数据访问层—dao类—mybatis(框架)

框架释义

  • 框架是一个舞台,一个模板

  • 模板:已经规定好了一些条款、内容,可以加入自己所写的功能,这些功能可以利用框架中写好的功能

  • 框架是整个或部分系统的可重用设计

  • 框架是一个软件,半成品的软件,定义好了一些基础功能,需要加入你的功能 才是完整的,基础功能可重复用的,可升级的

  • 框架的特点:

    • 框架一般不是全能的,不能做所有事情
    • 框架是针对某一个领域有效,特长在某一方面,比如mybatis做数据库操作强,但是不能做其他的
    • 框架就是一个软件

JDBC缺陷

  • 代码比较多,开发效率低
  • 需要关注Connection,Statement,ResultSet对象创建和销毁
  • 对ResultSet查询结构,需要自己封装为List
  • 重复的代码比较多
  • 业务代码和数据库的操作混在一起
  • 初级解决办法是写好工具类,进行调用

mybatis介绍

  • mybatis是一个sql映射框架(SQL Mapper Framework for Java)
  • 可以把数据库中的一行数据,映射为一个java对象
  • 一行数据可以看作是一个java对象,操作这个对象,相当于操作表中的数据
  • Data Access Objects(DAOs):数据访问,对数据库执行增删改查

mybatis提供的功能

  • 提供了Connection,Statement,ResultSet的能力,不用开发人员创建这些对象了
  • 提供了执行sql语句的能力,不用你执行sql
  • 提供了循环sql,把sql结果转为Java对象,List集合的能力
  • 提供了关闭资源的能力,不用你关闭Connection,Statement,ResultSet
  • 最后,开发人员提供了sql语句,mybatis处理sql,开发人员得到List集合或java对象(表中的数据)

**小结:**mybatis是一个sql映射框架,提供数据库的操作能力,增强的JDBC,使用mybatis让开发人员集中精神写sql就可以了,不必关注Connection、Statement、ResultSet的创建,销毁,sql的执行

以上为假期的简单回顾


MyBatis

跟着尚硅谷的视频进行自学

历史

MyBatis最初是Apache的一个开源项目iBatis

特性

1️⃣MyBatis是支持定制化SQL、存储过程以及高级映射的优秀的持久层框架

2️⃣MyBatis避免了几乎所有的JDBC代码和手动设置参数以及获取结果集

3️⃣MyBatis可以使用简单的XML或注解用于配置和原始映射,将接口和Java的POJO(Plain Old Java Objects,普通的Java对象)映射成数据库中的信息

4️⃣MyBatis是一个 半自动的ORM(Object Relation Mapping)框架

下载

来到MyBatis官方提供的下载源

在这里插入图片描述
解压后可以看到官方对于MyBatis所写的文档

在这里插入图片描述

比较

  • JDBC

    • SQL夹杂在Java代码中耦合度高,导致硬编码内伤(硬编码把代码写死)
    • 维护不易且实际开发需求中SQL有变化,频繁修改的情况多见
      -代码冗余,开发效率低
  • Hibernate和JPA

    • 操作简单,开发效率低
    • 程序中的长难度复杂 SQL需要绕过框架
    • 内部自动产生的SQL,不容易做特殊优化
    • 基于全映射的全自动框架,大量的字段的POJO进行部分映射时比较困难
    • 反射操作太多,导致数据库性能下降
  • MyBatis

    • 轻量级,性能出色
    • SQL 和 Java编码分开,功能边界清晰。Java代码专注业务、SQL语句专注数据
    • 开发效率略逊于Hibernate,但是完全能够接收

搭建MyBatis

开发环境

IDE: IDEA 2020.3.4(Ultimate Edition)

构建工具:Maven 3.3.9

MySQL版本:MySQL 5.7.37

MyBatis版本:MyBatis 3.5.7

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

补充两句: 通过maven管理依赖,需要导入依赖时,maven会先在本地仓库查询,如果有直接导入;如果没有,查看配置文件,看是否配有中央仓库的镜像仓库,如果没有在从中央仓库下载,只不过速度没有保证~

创建maven工程

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

MyBatis核心配置文件

  • 习惯上命名为mybatis-config.xml,这个文件名只是建议,并非强制要求

  • 将来整合Spring之后,这个配置文件可以省略……

核心配置文件主要用于 配置连接数据库的环境以及MyBatis的全局配置信息

核心配置文件存放的位置 src/main/resources目录下

配置文件中的内容直接来官方文档里复制粘贴

在这里插入图片描述

在这里插入图片描述
mybatis的配置文件中用来约束的是dtd文件,而spring的则是xsd文件

因为配置文件中http://mybatis.org/dtd/mybatis-3-config.dtd这句话爆红,所以先来解决这个问题
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

创建mapper接口

MyBatis中的mapper接口相当于以前的dao,但是区别在于,mapper仅仅是接口,不需要提供实现类

在这里插入图片描述

在这里插入图片描述

创建MyBatis的映射文件

相关概念:ORM(Object Relationship Mapping)对象关系映射

  • 对象:Java的实体类对象
  • 关系:关系型数据库
  • 映射:二者之间的对应关系
Java概念数据库概念
属性字段/列
对象记录/行

1、映射文件的命名规则:
表所对应的实体类的类名+Mapper.xml
例如:表t_user,映射的实体类为User,所对应的映射文件为UserMapper.xml
因此一个映射文件对应一个实体类,对应一张表的操作

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

测试添加功能

  • SqlSession:代表Java程序和数据库之间的会话(HttpSession是Java程序和浏览器之间的对话)
  • SqlSessionFactory:是"生产"SqlSession的"工厂"
  • 工厂模式:如果创建某一个对象,使用的过程基本固定,那么我们就可以把创建这个对象的相关代码封装到一个“工厂类”中,以后使用这个工厂类来“生产”我们需要的对象

sqlsession是mybatis提供的操作数据库的会话对象

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

优化功能

自动提交

查阅资料和观看视频了解到

  • openSession()方法有带参数为autoCommit的布尔值,即是否自动提交

但openSession(true),即括号内为true时,mybatis是可以自动提交修改后的数据

当openSession(),即括号内为空(默认是false),为手动提交,需要最后调用sqlsession.commit()来完成事务提交

在这里插入图片描述

不知什么原因,IDEA中方法参数提示只有带参数为b的布尔值,但是不影响

在这里插入图片描述
SqlSession默认不自动提交事务,若需要自动提交事务,可以使用SqlSessionFactory.openSession(true)

加入log4j的日志功能

1️⃣pom.xml中加入log4j依赖

		<!-- log4f日志 -->
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.17</version>
        </dependency>

2️⃣加入log4j的配置文件

log4j的配置文件名为log4j.xml,存放的位置是src/main/resources目录下

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
    <appender name="STDOUT" class="org.apache.log4j.ConsoleAppender">
        <param name="Encoding" value="UTF-8" />
        <layout class="org.apache.log4j.PatternLayout">
			<param name="ConversionPattern" value="%-5p %d{MM-dd HH:mm:ss,SSS} %m (%F:%L) \n" />
        </layout>
    </appender>
    <logger name="java.sql">
        <level value="debug" />
    </logger>
    <logger name="org.apache.ibatis">
        <level value="info" />
    </logger>
    <root>
        <level value="debug" />
        <appender-ref ref="STDOUT" />
    </root>
</log4j:configuration>

日志的级别
FATAL(致命)>ERROR(错误)>WRAN(警告)>INFO(信息)>DEBUG(调试)
从左到右打印的内容越来越详细

问题出现了:爆红(不影响运行,但控制台不输出日志)

在这里插入图片描述

注意两点:

  • log4j.xml存放的位置是src/main/resources目录下
  • 没有输出日志,需要重启IDEA

在这里插入图片描述

测试修改和删除功能

有了之前的基础,修改和删除就不难了

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

发现一个问题:mybatis保存到数据库的中文显示问号

解决方案:在mybatis核心配置文件的数据库连接处加上?useUnicode=true&amp;characterEncoding=UTF-8这句话

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

测试查询功能

  • 查询功能的标签必须设置resultType或resultMap

  • resultType:设置默认的映射关系(用于字段名和属性名保持一致的情况

  • resultMap:设置自定义的映射关系(用于一对多或多对一或字段名和属性名不一致情况

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
查询整张表

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

补充

关于集合、数组快速输出

在这里插入图片描述

小结

mybatis框架到此已经搭建完了,总的来说,不算难理解,只不过中间遇到了几个问题,但还不错,都解决了,接下来就是继续学习了

简单回顾

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值