Mybatis框架

JDBC的缺点

JDBC步骤

在介绍Mybatis框架之前,我们先来回顾一下JDBC编程的步骤。首先我们通过maven引入jar包:mysql-connecto-java。
随后的步骤:

  • 1、加载MySQl驱动:com.mysql.jdbc.Driver
  • 2、连接数据库(url、name、passwd) 用DriverManager.getConnection获取Connectio对象实例
  • 3、获取Statement对象:Connection.createStatement
  • 4、可以进行CRUD操作
  • 5、查询操作:返回ResultSet结果集进行处理
  • 6、关闭资源

JDBC存在的问题

在这里插入图片描述

从上图我们可以看出,传统的JDBC编程存在以下问题

  • 1、在JDBC编程操作数据库前进行连接,操作后需关闭子连接,频繁的连接释放在高并发时会影响系统性能(使用连接池:连接复用)。
  • 2、SQL语句硬编码在Java代码中,需求改变进而会改变Java代码本身(将SQL和Java代码分离,将SQL语句放在xml配置文件,需求改变只需要修改配置文件即可)。
  • 3、返回结果集存在硬编码(将数据库中的数据映射成Java对象)。

需要同时解决以上问题,便引出了Mybatis框架,下面我们一起来学习一下。

Mybatis

mybatis简介

MyBatis 是一款优秀的持久层框架
特征:
1、支持自定义 SQL(非自定义SQL:hebineate)、存储过程以及高级映射。
2、MyBatis解决JDBC 代码以及设置参数和获取结果集的工作。
3、MyBatis通过XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。

mybatis原理

在这里插入图片描述
单看上面这张图,大家可能有些不理解,下面我们以数据库中的一张表为例来做一个实例。

mybatis应用demo

引入依赖

        <!--mybatis-->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.4.1</version>
        </dependency>

以存放在classtest库中的student表为例

mysql> SELECT * FROM student;
+-----+--------+------+------+
| SID | Sname  | Sage | Ssex |
+-----+--------+------+------+
|   1 | 赵雷   |   20 ||
|   2 | 钱电   |   20 ||
|   3 | 孙凤   |   21 ||
|   4 | 吴兰   |   18 ||
+-----+--------+------+------+
4 rows in set (0.24 sec)

全局配置文件(mybatis-config.xml)

<?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">
<!--根标签-->
<configuration>
    <!--配置数据源-->
    <environments default="development">
        <!--id:环境的唯一标识-->
        <environment id="development">
            <!--事务管理器-->
            <transactionManager type="JDBC"></transactionManager>
            <!--数据源类型-->
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/classtest?useSSL=false"/>
                <property name="username" value="root"/>
                <property name="password" value="z2001l0425"/>
            </dataSource>

        </environment>
    </environments>
</configuration>

pojo类(student.java)

/**
 * 和数据库中的Student表对应
 */
public class Student {
    private Integer SID;
    private String Sname;
    private String Ssex;
    private Integer Sage;
    //这里省略了getter和setter方法,需要自己加上去
    }

Mapper接口文件(studentMapper.java)

public interface StudentMapper {
    public Student selectStudentById(Integer id);
    public int deleteStudentById(Integer id);
}

配置mapper.xml文件(studentMapper.xml)

mapper.xml配置文件是用来配置SQL语句的,mapper接口文件中每一个方法在mapper.xml文件中对应唯一的Statement(sql)

<?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">
<!--mapper根标签 namespace,命令空间:保证命名空间唯一,一般是对应的mapper.java的包全路径-->
<mapper namespace="com.tulun.test.mapper.StudentMapper">

    <!--
    selectStudentById
    select * from Student where SID = XXX
    -->

    <!--
    select标签:查询操作
    id属性:statement的id,用于表示定义的SQL,在同一个命名空间中id是不允许重复的
     #{XXX}:输入参数的占位符,避免SQL注入
     parameterType:输入参数类型
     resultType:指定结果集类型
    -->
    <select id="selectStudentById" parameterType="int" resultType="com.tulun.test.pojo.Student" >
        select * from Student where SID = #{id}
    </select>

    <delete id="deleteStudentById" parameterType="int">
        delete from Student where SID = #{id}
    </delete>
</mapper>

修改全局配置文件

在创建好mapper.xm文件后,需要在全局配置文件中引入一下mapper配置文件。在environment标签之后添加。

<!--引入mapper配置文件-->
    <mappers>
        <mapper resource="mapper/StudentMapper.xml"/>
        <mapper resource="mapper/TeacherMapper.xml"/>
    </mappers>

执行查询操作

public static void select(){

        String resource = "mybatis-config.xml";

        try {
            //mybatis提供resource类来获取配置文件流
            InputStream resourceAsStream = Resources.getResourceAsStream(resource);

            //创建会话工厂
            SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);

            //获取会话
            SqlSession sqlSession = sqlSessionFactory.openSession();

            //通过反射机制来获取mapeer实例
            StudentMapper mapper = sqlSession.getMapper(StudentMapper.class);

            Student student = mapper.selectStudentById(1);
            System.out.println(student);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

mybatis的使用步骤:
1、配置mybatis-config.xml全局配置文件(数据源、外部mapper)
2、创建SQLSessionFactory
3、通过SQLSessionFactory来创建SQLSession
4、通过SQLSession进行CRUD操作
5、关闭会话 SQLSession.close()操作

显示日志

可以引入log4j日志框架

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

在资源路径下创建log4j.properties文件

## debug 级别
log4j.rootLogger=DEBUG,Console
log4j.appender.Console=org.apache.log4j.ConsoleAppender
log4j.appender.Console.Target=System.out
log4j.appender.Console.layout = org.apache.log4j.PatternLayout
log4j.appender.Console.layout.ConversionPattern=%d{yyyy-MM-dd-HH\:mm\:ss,SSS} [%t]  [%c] [%p] - %m%n
log4j.logger.com.tulun=DEBUG  /


##输出sql 语句
log4j.logger.java.sql.Connection=DEBUG
log4j.logger.java.sql.Statement=DEBUG
log4j.logger.java.sql.PreparedStatement=DEBUG</strong>

创建完成后会在程序执行过程中打印出日志,方便排查错误。
在这里插入图片描述

mybatis配置详解

全局配置文件:mybatis-config.xml

在这里插入图片描述

properties:读取配置属性

在这里插入图片描述
如果不止在一个地方进行了配置,那么mybatis会按照这样的顺序加载:

  • 1、首先读取在properties元素体内指定的属性
  • 2、根据properties元素中的resource属性读取类路径下属性文件,或根据url属性指定的路径读取属性文件,并会覆盖之前读取的同名的属性
  • 3、最后会读取作为方法参数传递的属性,并覆盖之前的同名属性。

因此,通过方法参数传递的属性具有最高优先级,resource/url属性中指定的配置文件次之,最低优先级的则是 properties 元素中指定的属性。

setting设置

这个暂时这里没有用到

    <!--settings:全局的设置信息-->
    <settings>
        <!--二级缓存/懒加载-->
        <!--二级缓存的配置信息-->
        <setting name="cacheEnabled " value="true"/>
    </settings>

设置配置信息,在mybatis运行时替换相关的配置或者是打开或关闭等相应操作
在这里插入图片描述

typeAliases:类型别名

    <typeAliases>
        <!--对于单个类取别名-->
        <typeAlias type="com.tulun.pojo.Student" alias="student"/>
        <!--批量取别名:student-->
        <package name="com.tulun.pojo"/>
    </typeAliases>

Mapper:映射

    <!--引入mapper配置文件:和spring整合时,可以省略-->
    <mappers>
        <!--resource:配置单个映射文件,mapper.java和mapper.xml配置文件可以不再同一路径下,且名称可以不同-->
        <mapper resource="mapper/StudentMapper.xml"/>
        <!--class:映射单个文件 ,指定的接口文件要遵循指定规则:mapper.xml和mapper.java必须是同一路径下,且名称保持相同-->
        <mapper class="com.tulun.mapper.StudentMapper"/>
        <!--package:批量的映射文件处理,遵循指定规则:mapper.xml和mapper.java必须是同一路径下,且名称保持相同-->
        <package name="com.tulun.mapper"/>
    </mappers>

这里是:mybatis的官方文档大家可以以参考。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

降温vae+

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值