Mybatis学习笔记

Mybatis是一款优秀的持久层框架,用于简化JDBC开发,它解决了JDBC的硬编码问题。文章介绍了Mybatis的概念、JDBC的缺点以及Mybatis的优化,然后逐步指导读者进行Mybatis的快速入门,包括创建数据库表、导入坐标、编写配置文件和SQL映射文件,最后展示了Mapper代理开发的基本步骤和要求。
摘要由CSDN通过智能技术生成

目录

1. Mybatis概述

        1.1 Mybatis概念

        1.2 JDBC 缺点(例子)

        1.3 优化

 2. Mybatis快速入门

        2.1 创建user表,添加数据  

         2.2 创建模块,导入坐标

         2.3 编写MyBatis核心配置文件

        2.4  编写SQl映射文件

        2.5 编码

3. Mapper代理开发

        3.1Mapper代理开发概述

         3.2 使用Mapper代理要求  

4. Mybatis核心配置文件

         4.1 多环境配置

        4.2 类型别名 


1. Mybatis概述

        1.1 Mybatis概念

                MyBatis 是一款优秀的持久层框架,用于简化 JDBC 开发

                MyBatis 本是 Apache 的一个开源项目iBatis, 2010年这个项目由apache software                 foundation 迁移到了google code,并且改名为MyBatis 。2013年11月迁移到Github

                官网:mybatis – MyBatis 3 | 简介https://mybatis.org/mybatis-3/zh/index.html

                持久层

                负责将数据到保存到数据库的那一层代码。

                以后开发我们会将操作数据库的Java代码作为持久层。而Mybatis就是对jdbc代码进行了封装。

                JavaEE三层架构:表现层(页面层)、业务层(逻辑层)、持久层

                三层架构在后期会给大家进行讲解,今天先简单的了解下即可

                框架:

                框架就是一个半成品软件,是一套可重用的、通用的、软件基础代码模型

                在框架的基础之上构建软件编写更加高效、规范、通用、可扩展

        1.2 JDBC 缺点(例子)

        1.3 优化

                硬编码写在配置文件中,操作繁琐的自动完成

                 

 2. Mybatis快速入门

    查询user表中所有数据

  1. 创建user表,添加数据(把数据库导入)
  2. 创建模块,导入坐标
  3. 编写MyBatis核心配置文件—>替换连接信息,解决硬编码问题
  4. 编写SQl映射文件—>统一管理SQL语句,解决硬编码问题
  5. 编码

                (1)定义POJD类

                (2)加载核心配置文件,获取SqlSessionFactory对象(工厂的设计模式)

                (3)获取SqlSession对象,执行SQL语句

                (4)释放资源

        2.1 创建user表,添加数据  

create database mybatis;
use mybatis;
drop table if exists tb_user;
create table tb_user(
id int primary key auto_increment,
username varchar(20),
password varchar(20),
gender char(1),
addr varchar(30)
);
INSERT INTO tb_user VALUES (1, 'zhangsan', '123', '男', '北京');
INSERT INTO tb_user VALUES (2, '李四', '234', '女', '天津');
INSERT INTO tb_user VALUES (3, '王五', '11', '男', '西安');

         2.2 创建模块,导入坐标

            创建模块

                Ctrl+Alt+ S + shift打开设置

                Ctrl+Alt+ shift + S打开Project Stricture

                在创建好的模块中的 pom.xml 配置文件中添加依赖的坐标

                导入坐标:可以去官网去查看mybatis – MyBatis 3 | Getting startedhttps://mybatis.org/mybatis-3/getting-started.html                

    <dependencies>
        <!--mybatis依赖-->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.3</version>
        </dependency>

        <!--mysql驱动-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.46</version>
        </dependency>

        <!--junit单元测试-->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.13</version>
            <scope>test</scope>
        </dependency>

        <!-- 添加slf4j日志api -->
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>1.7.20</version>
        </dependency>
        <!-- 添加logback-classic依赖 -->
        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-classic</artifactId>
            <version>1.2.3</version>
        </dependency>
        <!-- 添加logback-core依赖 -->
        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-core</artifactId>
            <version>1.2.3</version>
        </dependency>
    </dependencies>

                 注意:需要在项目的 resources 目录下创建logback的配置文件

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <!--
        CONSOLE :表示当前的日志信息是可以输出到控制台的。
    -->
    <appender name="Console" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>[%level] %blue(%d{HH:mm:ss.SSS}) %cyan([%thread]) %boldGreen(%logger{15}) - %msg %n</pattern>
        </encoder>
    </appender>

    <logger name="com.itheima" level="DEBUG" additivity="false">
        <appender-ref ref="Console"/>
    </logger>


    <!--

      level:用来设置打印级别,大小写无关:TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF
     , 默认debug
      <root>可以包含零个或多个<appender-ref>元素,标识这个输出位置将会被本日志级别控制。
      -->
    <root level="DEBUG">
        <appender-ref ref="Console"/>
    </root>
</configuration>

         2.3 编写MyBatis核心配置文件

                编写MyBatis核心配置文件—>替换连接信息,解决硬编码问题

                可以去官网写配置文件       

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "https://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    
    <typeAliases>
        <package name="com.itheima.pojo"/>
    </typeAliases>
    
    
    <!--
        environments:配置数据库连接环境信息,可以配置多个environment,通过default属性切换不同的environment
    -->
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <!--数据库的连接信息-->
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql:///mybatis?useSSL=false"/>
                <property name="username" value="root"/>
                <property name="password" value="Lwq020330"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <!--指定当前SQL映射文件的路径,要修改-->
       <mapper resource="com/itheima/mapper/UserMapper.xml"/>
<!--后面用Mapper代理就不用写那么多-->
       
    </mappers>
</configuration>

        2.4  编写SQl映射文件

               编写SQl映射文件—>统一管理SQL语句,解决硬编码问题 

                 在模块的 resources 目录下创建映射配置文件 UserMapper.xml ,内容如下:

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

<!--namspace:名称空间,后面会讲-->
<mapper namespace="test">
    <select id="selectAll" resultType="com.itheima.pojo.User">
        select * from tb_user;
    </select>
<!--    <select id="selectAll" resultType="User"></select>-->
</mapper>

        2.5 编码

                (1)定义POJD类:实体类:

                后面是写geter和Tostring

         (2)加载核心配置文件,获取SqlSessionFactory对象(工厂的设计模式)

                把官网上的代码复制过去。      

        (3) 获取SqlSession对象,执行SQL语句

        (4) 释放资源

                 完整代码:

/**
 * Mybatis 快速入门
 */
public class MbatisDemo {
    public static void main(String[] args) throws IOException {
        //1.加载Mybatis的核心配置文件,获取SqlSessionFactory
        String resource = "mybatis-config.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);   //通过resources对象的一个静态方法来获取inputStream(返回字节输入流)
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);             //

        //2.获取sqlSession对象,用他来执行sql
        SqlSession sqlSession = sqlSessionFactory.openSession();

        //3.执行SQL语句
        List<Object> users = sqlSession.selectList("test.selectAll");       //在UserMapper中的namespace和id来对应

        System.out.println(users);

        //4.释放资源
        sqlSession.close();

    }
}

                运行:

                SQL映射文件警告 

                

                产生的原因:Idea和数据库没有建立连接,不识别表信息。但是大家一定要记住,它并不影响程序的执行。

                解决方式:在Idea中配置MySQL数据库连接。

                IDEA中配置MySQL数据库连接

                解决:(主要是在idea中配好数据库信息)

                点击IDEA右边框的 Database ,在展开的界面点击 + 选择 Data Source ,再选择 MySQL

                在弹出的界面进行基本信息的填写 

                在下面可以写SQL语句 

3. Mapper代理开发

        3.1Mapper代理开发概述

                 之前我们写的代码是基本使用方式,它也存在硬编码的问题,如下:

                 这里调用 selectList() 方法传递的参数是映射配置文件中的 namespace.id值。这样写也不便于后期的维护。如果使用Mapper 代理方式(如下图)则不存在硬编码问题。

                通过上面的描述可以看出 Mapper 代理方式的目的:

                解决原生方式中的硬编码

                简化后期执行SQL

                Mybatis 官网也是推荐使用 Mapper 代理的方式。下图是截止官网的图片

         3.2 使用Mapper代理要求  

                使用Mapper代理方式,必须满足以下要求:

                (1)定义与SQL映射文件同名的Mapper接口,并且将Mapper接口和SQL映射文件放置在同一目录下

                (2)设置SQL映射文件的namespace属性为Mapper接口全限定名

                (3)在 Mapper 接口中定义方法,方法名就是SQL映射文件中sql语句的id,并保持参数类型和返回值类型一致

                (4)编码:

                              1.通过SqlSession的getMapper方法获取Mapper接口的代理对象

                              2.调用对应方法完成sql的执行

           (1)定义与SQL映射文件同名的Mapper接口,并且将Mapper接口和SQL映射文件放置在同一目录下

 

                创建一个UserMapper的接口

                注意:在resources中新建没有Package只有Directory,在Directory中新建多层文件夹时不可以用.(点)来表示,要用/(斜杠)。

                这样弄完后,在打包后UserMapper.class和UserMapper.xml会在同一个目录下。

                 (2)设置SQL映射文件的namespace属性为Mapper接口全限定名

                 之前是”test”随便取的,现在要接口全限定名

                 (3)在 Mapper 接口中定义方法,方法名就是SQL映射文件中sql语句的id,并保持参数类型和返回值类型一致

                对应id

                 还有配置文件的路径需要更改

                (4)编码:

                              1.通过SqlSession的getMapper方法获取Mapper接口的代理对象

                              2.调用对应方法完成sql的执行

                把MbatisDemo复制新建MbatisDemo2修改下面内容

                结果:

                 细节: 如果Mapper接口名称和SQL映射文件名称相同,并在同一目录下,则可以使用包扫描的方式简化SQL映射文件的加载。也就是将核心配置文件的加载映射配置文件的配置修改为

        用包的方式来扫描,会减少工作,不用以后新建一个mapper都要加路径。就只用一行代码。 

4. Mybatis核心配置文件

        官网:https://mybatis.org/mybatis-3/configuration.htmlicon-default.png?t=N176https://mybatis.org/mybatis-3/configuration.html

         4.1 多环境配置

                在核心配置文件的 environments 标签中其实是可以配置多个 environment ,使用 id 给每段环境起名,在

                environments 中使用 default='环境id' 来指定使用哪儿段配置。我们一般就配置一个 environment 即可。

                若到时要换成test环境,就只用更改default=” ” 就可以了。

        4.2 类型别名 

                这一个可以不用带包的名称。             

                 在Mybatis-config.xml中加入下面的包,他就会自动扫描这个包的所有实体。

                UserMapper.xml可以这样写,并且不区分大小写 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值