mybatis知识点总结

mybatis知识点总结



前言

以下是本篇文章正文内容,如有表达不全的问题还请指出,本文中插入的图片部分由网上下载,如涉及版权问题联系我删除。

一、持久层技术区别

在这里插入图片描述

二、ssm项目开发准备及步骤

在这里插入图片描述

1.mybatis下载

下载网址:https://github.com/mybatis/mybatis-3,点击Download Latest
在这里插入图片描述
在这里插入图片描述

github地址:https://github.com/JTanga/MybatisTest

2.新建maven项目,添加pom依赖

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>org.tangjingjing.example</groupId>
    <artifactId>MySSMTest</artifactId>
    <version>1.0-SNAPSHOT</version>

    <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>5.1.49</version>
        </dependency>
        <!--junit-->
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-engine</artifactId>
            <version>5.6.2</version>
        </dependency>
        <dependency>
            <groupId>org.junit.platform</groupId>
            <artifactId>junit-platform-runner</artifactId>
            <version>1.6.2</version>
        </dependency>
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-api</artifactId>
            <version>RELEASE</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.junit.platform</groupId>
            <artifactId>junit-platform-launcher</artifactId>
            <version>1.6.2</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-engine</artifactId>
            <version>5.6.2</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.junit.vintage</groupId>
            <artifactId>junit-vintage-engine</artifactId>
            <version>5.6.2</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-params</artifactId>
            <version>5.6.2</version>
            <scope>test</scope>
        </dependency>
    </dependencies>

</project>

3.新建数据库,创建usertest表

在这里插入图片描述

4.添加User类

package com.test.pojo;

public class User {
    private String userName;
    private String password;
    private Integer id;
    private Integer age;
    private String gender;
    private String email;

    public User(String userName,String password,Integer id,Integer age,String gender,String email){
        this.userName = userName;
        this.id = id;
        this.password = password;
        this.age = age;
        this.gender = gender;
        this.email = email;
    }

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public String getGender() {
        return gender;
    }

    public void setGender(String gender) {
        this.gender = gender;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    @Override
    public String toString() {
        return "User{" +
                "userName='" + userName + '\'' +
                ", password='" + password + '\'' +
                ", id=" + id +
                ", age=" + age +
                ", gender='" + gender + '\'' +
                ", email='" + email + '\'' +
                '}';
    }
}

5.添加mybatis-config.xml

xml文件中配置数据库连接信息、mapper文件路径

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

    <!-- 默认使用的环境 ID(比如:default="development")
    也就是说我们可以配置多套<environment>环境-->
    <environments default="development">
        <!--
           每个 environment 元素定义的环境 ID
           -->
        <environment id="development">
            <!--
                transactionManager 事务管理器
                type的值有JDBCMANAGED
                    JDBC – 这个配置直接使用了 JDBC 的提交和回滚设施,它依赖从数据源获得的连接来管理事务作用域。
            -->
            <transactionManager type="JDBC"/>
            <!--
              dataSourcedataSource 数据源 dbcp c3p0 druid
              type="[UNPOOLED|POOLED|JNDI]"
              POOLED意思有连接池的连接
              UNPOOLED意思没有连接池的连接
              -->
            <dataSource type="POOLED">
                <!-- JDBC 驱动 mysql8.**com.mysql.cj.jdbc.Driver-->
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <!-- url数据库的 JDBC URL地址。-->
                <property name="url" value="jdbc:mysql://localhost:3306/clouddisk"/>
                <property name="username" value="root"/>
                <property name="password" value="root"/>

                <!-- defaultTransactionIsolationLevel – 默认的连接事务隔离级别。&ndash;&gt;-->
                <!-- <property name="defaultTransactionIsolationLevel" value=""/>-->

                <!--  defaultNetworkTimeout – 等待数据库操作完成的默认网络超时时间(单位:毫秒)&ndash;&gt;-->
                <!--   <property name="efaultNetworkTimeout" value=""/>-->
            </dataSource>
        </environment>
    </environments>

    <mappers>
        <!-- 使用相对于类路径的资源引用 -->
        <!--        <mapper resource="asia/xiaojiang/mybatis03/dao/UserMapper.xml"/>-->
        <!-- 使用完全限定资源定位符(URL)
        不推荐使用
        <mapper url="E:\JetBrains\mybatis学习\Mybatis-study\Mybatis-03\src\main\java\asia\xiaojiang\mybatis03\dao\UserMapper.xml"/>
        -->

        <!-- 使用映射器接口实现类的完全限定类名
         使用注意点:
            接口和其配置文件必须同名, 必须在同一个包下
         -->
        <mapper resource="mapper/UserMapper.xml"/>
        <!-- 将包内的映射器接口实现全部注册为映射器
        使用包扫描注意点:
            接口和其配置文件必须同名, 必须在同一个包下
        -->
        <!--        <package name="asia.xiaojiang.mybatis03.dao"/>-->
    </mappers>

</configuration>

6. 创建UserMapper接口

public interface UserMapper {
    int insertUser();
}

7.创建UserMapper.xml

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

<mapper namespace="com.test.mapper.UserMapper">
    <insert id="insertUser">
        insert into usertest values(1,'tangjingjing','123456',23,'fale','123@qq.com')
    </insert>
</mapper>

8.创建测试文件,测试添加一条记录

public class Test {

    @org.junit.Test
    public void test() throws IOException {
        // 获取配置文件的输入流
        InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
        // 获取SqlSessionFactoryBuilder对象
        SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
        // 获取SqlSessionFactory对象
        SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(inputStream);
        // 获取SqlSession会话对象
        SqlSession sqlSession = sqlSessionFactory.openSession();
        // 获取usermpper的代理实现类对象
        UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
        int result = userMapper.insertUser();
        System.out.println(result);
        // 提交事务才能起效
        sqlSession.commit();
        sqlSession.close();
    }

三、mybatis标签与注解

1.< typeAliases>定义别名

在这里插入图片描述

在这里插入图片描述

2.@Mapkey(“对象中某一属性名”)

比如查询功能,mapper接口中接收mapper.xml中返回的类型时,用@MapKey可以直接接收为map类型,而不是单纯的List列表。@Mapkey(“对象中某一属性名”)可以指定用该实体类中的哪个属性做返回值map的key,而每个key的对应value就是查询出来的对象。
参考http://t.csdn.cn/X2TPS

@MapKey("userName")
    Map<String, User> selectAll();

在这里插入图片描述
在这里插入图片描述

3.< resultMap>标签

解决数据库表字段和对象属性不一致的情况

<mapper namespace="com.test.mapper.UserMapper">
<!--    解决数据库表字段和User对象属性不一致的情况-->
<!--    并且type=User<typeAliases>起的别名-->
    <resultMap id="resultMap" type="User">
        <id column="id" property="id"></id>
        <result column="userName_test" property="userName"></result>
        <result column="password_test" property="password"></result>
        <result column="age_test" property="age"></result>
        <result column="gender" property="gender"></result>
        <result column="email" property="email"></result>
    </resultMap>
    <select id="select" resultMap="resultMap">
        select * from usertest where userName_test = #{userName}
    </select>

    <insert id="insertUser">
        insert into usertest values(null,'tangjingjing1','1234567',23,'fale','123@qq.com')
    </insert>
</mapper>

4.association、collection

association一对一和多对一人和身份证是一对一
collection一对多

association是用于一对一和多对一;
collection是用于一对多的关系;
在这里插入图片描述

5.动态sql标签

< if>
< where>解决where关键字以及出现的第一个and/or关键字导致sql语句错误
< trim>在条件判断完的SQL语句前后添加或者去掉指定的字符
< choose>
< when>
if-else
< foreach>循环数组、集合、map,比如批量添加删除
< set>去除update语句中的{,}逗号的问题
< include>引用sql片段

参考https://blog.csdn.net/m0_46570170/article/details/124256245

批量添加
在这里插入图片描述

6.mybatis一级二级缓存

一级缓存基于数据库会话(SqlSession 对象)的,默认开启。即通过同一个sqlSession查询的数据会被缓存。
二级缓存基于全局(nameSpace)的,开启需要配置。

一级缓存
在这里插入图片描述

在这里插入图片描述

一级缓存失效:(清空缓存:sqlSession.clearCache())
在这里插入图片描述
二级缓存
MyBatis 的二级缓存,实际上就是将数据放进了硬盘文件中去了(序列化)。
在这里插入图片描述
设置< cache>标签
在这里插入图片描述
关闭一级缓存进入二级缓存
在这里插入图片描述

二级缓存 命中率:
在这里插入图片描述

Cache Hit Ratio (缓冲命中率)
假设你将一段数据缓存至内存中
第一查询数据时:由于你是在从数据库中查询的数据,缓存命中率为了0,还没有进入缓存,关闭此数据库链接后
第二次再查询相同的数据时会直接从内存中去取这条相同的数据
缓存将命中,所以此时的缓存命中率为0.5
第三次查询相同的数据,则命中率为0.66666
以此类推…

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

参考https://blog.csdn.net/ChineseSoftware/article/details/122881217

6.mybatis整合第三方缓存ehcache/redis

在这里插入图片描述
参考https://blog.csdn.net/qq_34097912/article/details/122102106

7.MyBatis逆向工程代码生成

根据数据库表生成实体、mapper.java、mapper映射文件。
参考https://blog.csdn.net/qq_45829231/article/details/117263141


总结

以上就是今天要讲的内容,本文仅仅简单介绍了mybatis的一些基础内容,有描述错误的地方请指出,感谢观看。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值