【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中文官网

入门_MyBatis中文网icon-default.png?t=O83Ahttps://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语句,例如:

原文链:https://blog.csdn.net/qq_45832961/article/details/128781026

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值