Mybatis

Mybatis

  • Mybatis在本质是对JDBC的一层包装,属于持久层框架

  • ORM思想:

在这里插入图片描述

  • 在ORM思想中,一个Java类对应数据库中一个表,Java类中的属性对应数据库表中的字段,该Java类实例化出来的对象对应数据库表中的一条记录,Java对象的属性对应数据库表中相应记录的字段值,其中Java对象到数据库表中每条记录的对应关系为映射。

  • Mybatis框架特点:

    • ⽀持定制化 SQL、存储过程、基本映射以及⾼级映射
    • 避免了⼏乎所有的 JDBC 代码中⼿动设置参数以及获取结果集
    • ⽀持XML开发,也⽀持注解式开发。【为了保证sql语句的灵活,所以mybatis⼤部分是采⽤XML⽅式开发。】
    • 将接⼝和 Java 的 POJOs(Plain Ordinary Java Object,简单普通的Java对象)映射成数据库中的记录
    • 体积⼩好学:两个jar包,两个XML配置⽂件。
    • 完全做到sql解耦合。
    • 提供了基本映射标签。
    • 提供了⾼级映射标签。
    • 提供了XML标签,⽀持动态SQL的编写。
  • Mybatis使用步骤:

    • 先引入Mybatis和mysql驱动依赖
      • <dependencies>
          <!-- MyBatis 依赖 -->
          <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.10</version>
          </dependency>
          <!-- MySQL 驱动依赖 -->
          <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.30</version>
          </dependency>
        </dependencies>
        
    • 再到Resource目录下去编写两个配置文件
      • 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">
                  <environment id="development">
                      <transactionManager type="JDBC"/>
                      <dataSource type="POOLED">
                      	<!-- 修改链接数据库的配置信息 -->
                          <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
                          <property name="url" value="jdbc:mysql://localhost:3306/mybatis_study"/>
                          <property name="username" value="root"/>
                          <property name="password" value="123456"/>
                      </dataSource>
                  </environment>
              </environments>
              <mappers>
                  <!--sql映射⽂件(XxxxMapper.xml)创建好之后,需要将该⽂件路径配置到这⾥-->
                  <mapper resource="XxxxMapper"/>
              </mappers>
          </configuration>
          
        • mybatis-config.xml详解:

          • <?xml version="1.0" encoding="UTF-8" ?>
            <!-- 文档类型说明中的 configuration,是根标签的名称,一个文档一个根标签 -->
            <!--
                http://mybatis.org/dtd/mybatis-3-config.dtd
                xml文档的dtd约束,约束文档中可以出现什么标签、标签能有什么子标签、标签中可以有什么属性以及标签出现的顺序
            -->
            <!DOCTYPE configuration
                    PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
                    "http://mybatis.org/dtd/mybatis-3-config.dtd">
            
            <!-- configuration:根标签,表示配置信息。 -->
            <configuration>
            
                <!--java.util.Properties类。是一个Map集合。key和value都是String类型-->
                <!-- property标签中的name属性为key,value属性为value -->
                <!--在properties标签中可以配置很多属性-->
                <!-- 在下面的标签中可以使用property配置的属性值,使用 ${property的name属性} 取出相应的值 -->
                <!--<properties>-->
                    <!--这是其中的一个属性-->
                    <!--<property name="属性名" value="属性值"/>-->
                    <!--<property name="jdbc.driver" value="com.mysql.cj.jdbc.Driver"/>
                    <property name="jdbc.url" value="jdbc:mysql://localhost:3306/powernode"/>
                    <property name="jdbc.username" value="root"/>
                    <property name="jdbc.password" value="root"/>-->
                <!--</properties>-->
            
                <!-- properties中的property可以配置到配置文件中 -->
                <!--resource,一定是从类路径下开始查找资源-->
                <properties resource="jdbc.properties" />
            
                <!--从绝对路径当中加载资源。绝对路径怎么写?file:///路径-->
                <!--<properties url="file:///d:/jdbc.properties" />-->
            
            
                <!-- environments:环境(多个),以“s”结尾表示复数,也就是说mybatis的环境可以配置多个数据源。 -->
                <!--default表示默认使用的环境。-->
                <!--默认环境什么意思?当你使用mybatis创建SqlSessionFactory对象的时候,没有指定环境的话,默认使用哪个环境。-->
                <environments default="powernodeDB">
            
                    <!--其中的一个环境。连接的数据库是powernode-->
                    <!--一般一个数据库会对应一个SqlSessionFactory对象。-->
                    <!--一个环境environment会对应一个SqlSessionFactory对象-->
                    <!-- 一个数据库对应一个环境 -->
                    <!--
                        // 这种方式就是获取的默认环境
                        SqlSessionFactory sqlSessionFactory =
                               sqlSessionFactoryBuilder.build(Resources.getResourceAsStream("mybatis-config.xml"));
                        // 这种方式就是通过环境id来使用指定的环境,第二个参数为环境id
                        SqlSessionFactory sqlSessionFactory1 =
                            sqlSessionFactoryBuilder.build(Resources.getResourceAsStream("mybatis-config.xml"), "powernodeDB");
                    -->
                    <environment id="powernodeDB">
                        <!--
                            transactionManager标签:
                                1.作用:配置事务管理器。指定mybatis具体使用什么方式去管理事务。
                                2.type属性有两个值:
                                    第一个:JDBC: 使用原生的JDBC代码来管理事务。
                                        conn.setAutoCommit(false);
                                        ....
                                        conn.commit();
                                    第二个:MANAGED:mybatis不再负责事务的管理,将事务管理交给其它的JEE(JavaEE)容器来管理。例如:spring
                                3. 大小写无所谓。不缺分大小写。但是不能写其他值。只能是二选一:
                                    jdbc、managed
                                4. 在mybatis中提供了一个事务管理器接口:Transaction
                                    该接口下有两个实现类:
                                        JdbcTransaction
                                        ManagedTransaction
                                    如果type="JDBC",那么底层会实例化JdbcTransaction对象。
                                    如果type="MANAGED",那么底层会实例化ManagedTransaction
                        -->
                        <transactionManager type="JDBC"/>
                        <!--
                            dataSource配置:
                                1.dataSource被称为数据源。
                                2.dataSource作用是什么?为程序提供Connection对象。(但凡是给程序提供Connection对象的,都叫做数据源。)
                                3.数据源实际上是一套规范。JDK中有这套规范:javax.sql.DataSource(这个数据源的规范,这套接口实际上是JDK规定的。)
                                4.我们自己也可以编写数据源组件,只要实现javax.sql.DataSource接口就行了。实现接口当中所有的方法。这样就有了自己的数据源。
                                比如你可以写一个属于自己的数据库连接池(数据库连接池是提供连接对象的,所以数据库连接池就是一个数据源)。
                                5.常见的数据源组件有哪些呢【常见的数据库连接池有哪些呢】?
                                    阿里巴巴的德鲁伊连接池:druid
                                    c3p0
                                    dbcp
                                    ....
                                6. type属性用来指定数据源的类型,就是指定具体使用什么方式来获取Connection对象:
                                    type属性有三个值:必须是三选一。
                                    type="[UNPOOLED|POOLED|JNDI]"
                                    UNPOOLED:不使用数据库连接池技术。每一次请求过来之后,都是创建新的Connection对象。
                                    POOLED:使用mybatis自己实现的数据库连接池。
                                    JNDI:集成其它第三方的数据库连接池。
            
                                    JNDI是一套规范。谁实现了这套规范呢?大部分的web容器都实现了JNDI规范:
                                        例如:Tomcat、Jetty、WebLogic、WebSphere,这些服务器(容器)都实现了JNDI规范。
                                    JNDI是:java命名目录接口。Tomcat服务器实现了这个规范。
                        -->
                        <!-- 数据源的type属性指定不同的值,需要配置不太的属性 https://mybatis.net.cn/configuration.html#environments -->
                        <dataSource type="POOLED">
                            <property name="driver" value="${jdbc.driver}"/>
                            <property name="url" value="${jdbc.url}"/>
                            <property name="username" value="${jdbc.username}"/>
                            <property name="password" value="${jdbc.password}"/>
                            <!-- 以下配置数据库连接池的参数 -->
                            <!--提醒:正常使用连接池的话,池中有很多参数是需要设置的。设置好参数,可以让连接池发挥的更好。事半功倍的效果。-->
                            <!--具体连接池当中的参数如何配置呢?需要反复的根据当前业务情况进行测试。-->
                            <!--poolMaximumActiveConnections:连接池当中最多的正在使用的连接对象的数量上限。最多有多少个连接可以活动。默认值10-->
                            <property name="poolMaximumActiveConnections" value="10"/>
                            <!--每隔2秒打印日志,并且尝试获取连接对象-->
                            <property name="poolTimeToWait" value
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值