MyBatis超详细学习笔记(黑马)

目录

一、MyBatis快速入门

(一)打开MyBatis中文官网

(二)在工程中(pom.xml)导入MyBatis依赖

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

(四)创建SQL映射文件——统一管理SQL语句

(五)编写实现类

二、Mapper代理开发

(一)定义与SQL映射文件同名的Mapper接口

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

(三)在Mapper接口中定义方法

(四)编码实现

(五)SQL映射小技巧

三、MyBatis总结

四、MyBatis中sql语句的处理

(一)MyBatisX插件

(二)SQL映射文件中的sql片段

(三)结果集映射resultMap

(四)SQL传值

(五)sql语句中特殊字符处理

(六)自动提交事务

(七)返回添加数据的主键

(八)动态批量删除

(九)注解开发


一、MyBatis快速入门

(一)打开MyBatis中文官网

https://mybatis.net.cn/getting-started.htmlhttps://mybatis.net.cn/getting-started.html

(二)在工程中(pom.xml)导入MyBatis依赖

👇👇👇从官网导入:

<dependency>
  <groupId>org.mybatis</groupId>
  <artifactId>mybatis</artifactId>
  <version>x.x.x</version>
</dependency>

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

👇👇👇从官网导入:

<?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:///mybatis"/>
                <property name="username" value="root"/>
                <property name="password" value="✅✅✅"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <!-- 加载sql的映射文件 -->
        <mapper resource="org/mybatis/example/BlogMapper.xml"/>
    </mappers>
</configuration>

注意:1. 数据库的连接信息需要自己修改

           2. 加载SQL映射文件见后文

(四)创建SQL映射文件——统一管理SQL语句

👇👇👇从官网导入:

 例如,我们要操作user表,则创建对应的SQL映射文件UserMapper.xml,代码如下:

(注意:先创建对应的实体类Uesr)

<?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">

<!-- namespace名称空间 -->
<mapper namespace="test">

    <!-- id是唯一标识,resultType是返回类型 -->
    <select id="selectAll" resultType="com.itheima.pojo.User">
        select *
        from tb_user;
    </select>

</mapper>

修改mybatis-config.xml文件的内容:

<mappers>
     <!-- 加载sql的映射文件 -->
     <mapper resource="userMapper.xml"/>
</mappers>

(五)编写实现类

创建MyBatisDemo类,代码如下:

/**
 * MyBatis快速入门
 */
public class MyBatisDemo {
    public static void main(String[] args) throws Exception {

        //1.加载mybatis的核心配置文件,获取SqlSessionFactory
        String resource = "mybatis-config.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

        //2.获取SqlSession对象,用它执行SQL
        SqlSession sqlSession = sqlSessionFactory.openSession();

        //3.执行SQL
        List<User> users = sqlSession.selectList("test.selectAll");
        System.out.println("users = " + users);

        //4.释放 SqlSession
        sqlSession.close();

    }
}

结果:

二、Mapper代理开发

(一)定义与SQL映射文件同名的Mapper接口

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

1. 新建Mapper接口:UserMapper

 2. 将该接口与SQL映射文件放在同一目录

        初始的项目结构如图:

         但xml文件一般默认放在resources文件夹中,不建议直接将其移动到接口UserMapper所在的文件夹中,我们可以这样做:

  • 在resources文件夹中新建文件夹(没有包),输入:com/itheima/mapper
    (注意:不要写成com.itheima.mapper,资源文件夹中不识别句点)
  • 将userMapper.xml移入该文件夹中,如下图:

        (同时记得修改mybatis-config配置文件中的sql映射文件路径)

 <mapper resource="com/itheima/mapper/userMapper.xml"/>

        Maven执行编译compile后,就会看到两个文件在同一目录下了:

 🎉🎉🎉在一起,在一起!!!🎉🎉🎉

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

        在SQL映射文件UserMapper.xml文件中部分修改为:

<mapper namespace="com.itheima.mapper.UserMapper">

(三)在Mapper接口中定义方法

        方法名就是SQL映射文件中sql语句的id,并保持参数类型和返回值的类型一致。

        UserMapper接口中代码为:

public interface UserMapper {
    List<User> selectAll();
}

(四)编码实现

        新建一个实现类:MyBatisDemo2,代码如下:

public class MyBatisDemo2 {
    public static void main(String[] args) throws Exception {

        //1.加载mybatis的核心配置文件,获取SqlSessionFactory
        String resource = "mybatis-config.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

        //2.获取SqlSession对象,用它执行SQL
        SqlSession sqlSession = sqlSessionFactory.openSession();

        //3.执行SQL
        //List<User> users = sqlSession.selectList("test.selectAll");
        //3.获取UserMapper接口的代理对象
        UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
        List<User> users = userMapper.selectAll();

        System.out.println("users = " + users);

        //4.释放 SqlSession
        sqlSession.close();
    }
}

结果:

(五)SQL映射小技巧

        假如数据库的实体类有很多,那么mybatis-config文件中加载sql映射文件的语句就会很长,类似这样:

<mappers>
        <!-- 加载sql的映射文件 -->
        <mapper resource="com/itheima/mapper/userMapper.xml"/>
        <mapper resource="com/itheima/mapper/orderMapper.xml"/>
        <mapper resource="com/itheima/mapper/detailsMapper.xml"/>
        <mapper resource="com/itheima/mapper/foodMapper.xml"/>
        ...
        ...
</mappers>

        如果我们的Mapper接口和SQL映射文件名称相同,并在同一目录下,则可以使用包扫描的方式简化SQL映射文件的加载。

<mappers>
        <!-- 加载sql的映射文件 -->
        <package name ="com.itheima.mapper"/>
</mappers>

三、MyBatis总结

【一般步骤】

  1. 编写接口方法:Mapper接口(xxxMapper.java)
    (分析是否有参数,分析语句的返回结果类型)
  2. 编写SQL语句:SQL映射文件(xxxMapper.xml)
  3. 执行方法,测试

四、MyBatis中sql语句的处理

(一)MyBatisX插件

1.自动识别Mapper接口文件和与之对应的SQL映射文件,会显示为两个不同颜色的小鸟

2.点击小鸟会自动跳转到另一个文件的对应代码处

3.会对代码做进一步的智能化提示

(二)SQL映射文件中的sql片段

        如果sql语句中某一句太长,且经常用到,可以将其写为sql片段,然后每次引用sql片段即可实现相同的功能。
例如:

(三)结果集映射resultMap

        解决实体类属性名和数据库表字段列名不对应的情况,比如数据库某列名为brand_name,实体类中为brandName,这是可以用resultMap实现映射。

(四)SQL传值

参数占位符:#{ }——会将其替换为?,为了防止sql注入

一、单值传递


1.brandMapper.xml

 2.测试类.java

二、多值传递


1.bandMapper.xml

 2.brandMapper.java接口

    三种方法:

 3.测试类.java

三、动态SQL


        即SQL语句写死了3个参数,但用户提供的参数个数会随时变化,有可能只输入一个参数就要查询,这就会涉及动态SQL

        详见官网👇👇👇

 1.brandMapper.xml

 注意:如果只有companyName,sql会出现语法错误从而报错,myBatis这样处理:加入<where>字段(<set>同理),并且每一个条件语句都写入and。

(五)sql语句中特殊字符处理

在xml中,sql语句的小于号<会出现报错,要这样处理,输入CDATA,在CDATA区域输入<

(六)自动提交事务

   实现添加、修改sql语句时,默认自动提交事务是关闭的,需要我们手动提交一下,也可以直接在sqlSession中设置为true

(七)返回添加数据的主键

(八)动态批量删除

   使用foreach

(九)注解开发

【适用于简单的SQL语句】

可以不在xml中写SQL语句,直接在Mapper接口中通过注解写明SQL语句,例如:

  • 5
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MyBatis是一种开源持久层框架,它可以帮助我们实现将Java对象映射到关系型数据库中的数据。下面是MyBatis详细笔记: 1. MyBatis的介绍 MyBatis是一种Java持久层框架,它可以帮助我们实现将Java对象映射到关系型数据库中的数据。MyBatis是一种比较灵活的框架,它不会对应用程序中的Java对象进行任何修改,而是直接使用对象。 2. MyBatis的核心组件 MyBatis的核心组件包括SqlSessionFactory、SqlSession、Mapper和XML映射文件。 SqlSessionFactory:SqlSessionFactory是MyBatis的核心组件之一,它负责创建SqlSession对象。它是线程安全的,因此可以被多个线程共享。 SqlSession:SqlSession是MyBatis的另一个核心组件,它提供了与数据库交互的方法,包括查询、插入、更新和删除。SqlSession是非线程安全的,因此每个线程都应该有自己的SqlSession对象。 Mapper:Mapper是一个接口,它定义了与数据库交互的方法。MyBatis可以根据Mapper接口创建代理对象,从而实现对数据库的访问。 XML映射文件:XML映射文件定义了Java对象与数据库表之间的映射关系。它包含了SQL语句、参数映射和结果映射等信息。 3. MyBatis的配置 MyBatis的配置文件包括以下几个部分: 数据源配置:数据源是与数据库建立连接的入口。MyBatis支持多种数据源,包括JDBC、C3P0和Druid等。 事务管理器配置:MyBatis支持事务管理,可以通过配置事务管理器来实现事务控制。 Mapper配置:Mapper接口与XML映射文件的配置。 4. MyBatis的使用 MyBatis的使用可以分为以下几个步骤: 创建SqlSessionFactory对象:SqlSessionFactory是MyBatis的核心组件之一,它负责创建SqlSession对象。 创建SqlSession对象:SqlSession是MyBatis的另一个核心组件,它提供了与数据库交互的方法,包括查询、插入、更新和删除。 执行SQL语句:MyBatis支持多种SQL语句,包括查询、插入、更新和删除等。 关闭SqlSession对象:SqlSession是非线程安全的,因此每个线程都应该有自己的SqlSession对象。使用完SqlSession对象后应该将其关闭,以释放资源。 5. MyBatis的优点 MyBatis具有以下优点: 灵活性:MyBatis是一种比较灵活的框架,它不会对应用程序中的Java对象进行任何修改,而是直接使用对象。 易于使用:MyBatis的使用非常容易,可以通过简单的配置文件和Mapper接口来实现对数据库的访问。 高效性:MyBatis的性能非常高,它可以通过SQL语句的优化来提高查询的效率。 6. MyBatis的缺点 MyBatis的缺点包括以下几个方面: 学习曲线较陡峭:MyBatis学习曲线比较陡峭,需要一定的Java和SQL知识才能使用。 XML映射文件较复杂:MyBatis的XML映射文件比较复杂,需要深入了解其语法和规则才能编写正确的映射文件。 7. 总结 MyBatis是一种开源持久层框架,它可以帮助我们实现将Java对象映射到关系型数据库中的数据。MyBatis具有灵活、易于使用和高效等优点,但学习曲线较陡峭,XML映射文件较复杂。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值