Mybatis介绍

    科技2025-10-26  14

    1、Mybatis是什么?

    mybatis就是一个封装来jdbc的持久层框架,它和hibernate都属于ORM框架,但是具体的说,hibernate是一个完全的orm框架,而mybatis是一个不完全的orm框架。

    Mybatis让程序员只关注sql本身,而不需要去关注如连接的创建、statement的创建等操作。

    Mybatis会将输入参数、输出结果进行映射。

     

    Mybatis的框架原理

     

     

    2、为什么要用Mybatis?

    mybatis与hibernate的区别及各自应用场景

    (1)Mybatis技术特点:

    通过直接编写SQL语句,可以直接对SQL进行性能的优化。

    学习门槛低,学习成本低。只要有SQL基础,就可以学习mybatis,而且很容易上手。

    由于直接编写SQL语句,所以灵活多变,代码维护性更好。

    不能支持数据库无关性,即数据库发生变更,要写多套代码进行支持,移植性不好。

    (2)Hibernate技术特点:

    标准的orm框架,程序员不需要编写SQL语句。

    具有良好的数据库无关性,即数据库发生变化的话,代码无需再次编写。

    学习门槛高,需要对数据关系模型有良好的基础,而且在设置OR映射的时候,需要考虑好性能和对象模型的权衡。

    程序员不能自主的去进行SQL性能优化。

    (3)Mybatis应用场景:

    需求多变的互联网项目,例如电商项目。

    (4)Hibernate应用场景:

    需求明确、业务固定的项目,例如OA项目、ERP项目等。

     

    3、Mybatis怎么用??

    笔记03_P188

    例题:mybatis_day01

     

    入门程序:

    3.1、需求

    对订单商品案例中的用户表进行增删改查操作

    根据用户ID查询用户信息

    根据用户名称模糊查询用户列表

    添加用户

    删除用户

    修改用户

     

    3.2、环境准备

    Jdk:1.7

    Ide:idea xxxx

    Mybatis:3.2.7

    数据库:MySQL 5X

     

    mybaits的代码由github.com管理,下载地址:https://github.com/mybatis/mybatis-3/releases

    mybatis-3.2.7

     

    数据库和用户表:

     

     

    3.3、工程搭建

    第一步:创建java工程

     

    第二步:加入jar包

    加入以下四部分jar包,其中junit的jar包,是非必须的。

    Mybatis核心包

     

    Mybatis依赖包

     

    MySQL驱动包

     

    Junit单元测试包(单元测试需要的包)

     

     

    第三步:添加log4j.properties文件

    Mybatis使用的日志包是log4j的,所以需要添加log4j.properties。

    日志级别在开发阶段设置成DEBUG在生产阶段设置成INFO或者ERROR

     

    3.4、编程步骤

    (1)创建PO类,根据需求创建;

    (2)创建全局配置文件SqlMapConfig.xml;

    (3)编写映射文件;

    (4)加载映射文件,在SqlMapConfig.xml中进行加载;

    (5)编写测试程序,即编写Java代码,连接并操作数据库。

    思路:

    ①读取配置文件;

    ②通过SqlSessionFactoryBuilder创建SqlSessionFactory会话工厂。

    ③通过SqlSessionFactory创建SqlSession。l

    ④调用SqlSession的操作数据库方法。

    ⑤关闭SqlSession。

     

    3.5、代码实现

    (1)创建po类

     

    (2)创建全局配置文件

    在config目录下,创建SqlMapConfig.xml文件,该名称不是固定不变的。

     

    (3)需求开发

    需求一、根据用户ID查询用户信息

    映射文件

    在config目录下,创建User.xml(这种命名规范是由ibatis遗留下来)

     

    在全局配置文件中加载映射文件

     

    测试代码

    MybatisFirst.class类中:

     

    需求二、根据用户名称模糊查询用户列表

    需求三、添加用户

    需求四、删除用户

    需求五、修改用户

     

    3.6、小结

    (1)#{}和${}

    #{}表示占位符?,#{}接收简单类型的参数时,里面的名称可以任意

    ${}表示拼接符,${}接收简单类型的参数时,里面的名称必须是value

    ${}里面的值会原样输出,不加解析(如果该参数值是字符串,有不会添加引号)

    ${}存在sql注入的风险,但是有些场景下必须使用,比如排序后面会动态传入排序的列名

    (2)parameterType和resultType

    parameterType指定输入参数的java类型,parameterType只有一个,也就是说入参只有一个。

    resultType指定输出结果的java类型(是单条记录的java类型)

    (3)selectOne和selectList

    selectOne查询单个对象

    selectList查询集合对象

    Processed: 0.013, SQL: 8