MyBatis入坑之HelloWorld

232 阅读4分钟

这是我参与11月更文挑战的第1天,活动详情查看:2021最后一次更文挑战

框架阶段

个人理解:框架就是别人为我们提供的一个工具类的集合(提高个人开发效率), 当我们要使用该框架的时候,那么你就需要遵循框架的使用规则(约定),规则的基础下完成自己想完成事情(相对自由)

大工具类集合:拿来主义(只是关系class文件),就需要框架开发者提供给我们对应jar

jar包:class文件的jar包、java源文件的jar包、html的API文件的jar包

1.为什么时候框架?

  • 一阶段的时候有老师封装了一个工具类,那么他使用范围只能局限在几个人当中(如果新近人员,会不了解)
  • 在没有框架的时候,每个开发人员根据自己的需求去构建自己的工具类,当该开发人员离职之后,对新来开发人员增加了使用成本,从而造成企业开发效率低下
  • 当公司开始使用框架之后,就算某个员工离职,再招聘只是去招聘会使用该框架开发人员即可,降低公司时间成本,从而提高公司的开发效率
  • 个人角度:学习框架是为了使用公司的招聘要求,我们学习使用框架应用(不涉及底层的实现),当你开发一段时间想提高自己的开发能力,那么就需求学习别人源代码(借鉴)

先应用,后底层

2.如何学习框架?

从Hello World开始,能运行最简单的使用即可,有一个简单的套路流程:

(1)框架提供对应jar包(Bulid Path)

(2)好的框架,必须有完成帮助文档(入门手册),例如:commons-fileupload的时候Apache提供文件上传的入门手册(代码步骤都是文档中提供的)

(3)可选:遵循框架规则,一般情况下框架都需要提供对应的核心配置XML文件(或者核心配置类JavaConfig.java)

核心配置文件:web.xml(部署描述JavaWeb的核心配置文件)、注解方式可以替换web.xml的而配置

(4)读文档,构建一个"Hello World",可以运行简单项目

MyBatis框架

image-20211030191737832.png

使用手册:mybatis.org/mybatis-3/z…

源码地址:github.com中搜索mybatis,找到star

MyBatis有大版本:iBatis(2.0)/iBatis3.0(MyBatis)

1.MyBatis简介

MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录

  • 了解持久化:

    • 狭义说:将数据永久性的保存到某个介质当中(数据库、硬盘、光盘等等)
    • 广泛说:针对于数据的操作,持久化操作(CreateRetrieveUpdateDelete)
  • 持久层:跟数据库进行“打交道”层次(讲MVC思想的时候,DataAccessObject-DAO层[持久化层])

  • 自定义SQL:提供了专门写SQL语句文件(或者类),称为映射文件

  • 映射:表和类,字段和属性

ORM框架.png

  • Mybatis封装了JDBC的操作(1.加载驱动类,2.获取数据连接,默认情况JDBC的事务是自动提交,3.获取执行SQL语句对象,4.查询结果集ResultSet[处理结果转换为Java对象],5.关闭资源)

  • ORM框架:MyBatis框架、Hibernate框架(JPA标准)、JFinal框架

2.MyBatis的环境搭建

(1)下载Jar包,构建Maven的Java项目,父类维护MyBatis的版本和其他Jar包信息

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>maven-javaee</artifactId>
        <groupId>org.example</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.hanpang.mybatis</groupId>
    <artifactId>01-MyBatis-HelloWorld</artifactId>
    <dependencies>
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>

    </dependencies>

</project>

(2)配置MyBatis的入口文件呢(核心配置文件-资源文件),才能给每个基于 MyBatis 的应用都是以一个 SqlSessionFactory 的实例为核心的

  • XML 配置文件中包含了对 MyBatis 系统的核心设置,包括获取数据库连接实例的数据源(DataSource)以及决定事务作用域和控制方式的事务管理器(TransactionManager)。
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
<!-- http://mybatis.org/dtd/mybatis-3-config.dtd 定义该XML中可以使用标签的名称和出现的规则 -->
<!--
<!ELEMENT configuration (properties?, settings?, typeAliases?, typeHandlers?, objectFactory?, objectWrapperFactory?, reflectorFactory?, plugins?, environments?, databaseIdProvider?, mappers?)>
-->
<configuration>
    <environments default="development">
        <environment id="development">
            <!--  默认使用JDBC事务管理并且将其设置connection.setAutoCommit(false) -->
            <!--  当执行变更操作(CUD),需要手动提交事务-->
            <transactionManager type="JDBC"/>
            <!-- 数据源的使用,MyBatis自己实现的连接池 POOLED-->
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://127.0.0.1:3306/antu_mybatis"/>
                <property name="username" value="root"/>
                <property name="password" value=""/>
            </dataSource>
        </environment>
    </environments>

    <!-- 自定义SQL语句的映射文件,构建记录和Java对象关系的映射文件 -->
    <!-- 映射文件的默认的约定名称:XXXXMapper.xml类似于XXXXServlet.java-->
    <mappers>
        <mapper resource="mapper/SysUserMapper.xml"/>
    </mappers>
</configuration>

(3)映射的 SQL 语句:映射文件,MyBatis执行映射文件中的SQL语句是通过定位完成(如何才知道你执行的是哪条SQL语句),namespace命名空间(可以重复),但是定位的规则组合之后必须唯一(com.hanpang.mapper.SysUserMapper.add)

执行SQL定位规则:namespace+"."+id

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<!-- http://mybatis.org/dtd/mybatis-3-mapper.dtd定义该XML中可以使用标签的名称和出现的规则 -->
<!-- <!ELEMENT mapper (cache-ref | cache | resultMap* | parameterMap* | sql* | insert* | update* | delete* | select* )+>
 -->
<!-- MyBatis ,必须设置命名空间-->
<mapper namespace="com.hanpang.mapper.SysUserMapper">
    <insert id="add">
        INSERT INTO sys_user (username,password,nick_name,sex,age) 
        VALUES ('admin',MD5('123456'),'管理员',1,18)
    </insert>
</mapper>

(4)熟悉的配方,一套路(跟JDBC的过程类似):代码就不帖了,太烂了,参考官方文档