Mybatis学习笔记2 增删改查及核心配置文件详解

Mybatis学习笔记1 Mybatis入门_biubiubiu0706的博客-CSDN博客

 将Mybatis进行封装

SqlSessionUtil工具类

package com.example.util;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import java.io.IOException;

/**
 * @author hrui
 * @date 2023/9/8 14:55
 */
public class SqlSessionUtil {

    //工具类的构造方法一般都是私有化
    //方法都是静态的
    //为了防止new对象,构造方法私有化
    private SqlSessionUtil(){

    }
    private static SqlSessionFactory sqlSessionFactory;

    //类加载时候执行
    //SqlSessionUtil工具类在被加载的时候,解析mybatis-config1.xml.创建sqlSessionFactory对象
    static{
        try {
            SqlSessionFactoryBuilder sqlSessionFactoryBuilder=new SqlSessionFactoryBuilder();
            //一个sqlSessionFactory对应一个数据库
            sqlSessionFactory= sqlSessionFactoryBuilder.build(Resources.getResourceAsStream("mybatis-config1.xml"));
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    //获取会话对象 返回会话对象
    public static SqlSession openSession(){
        SqlSession sqlSession = sqlSessionFactory.openSession();
        return sqlSession;
    }
}

这样测试就方便很多了

新建一个模块  mybatis-02-crud

maven项目

引入依赖

<!--引入mybatis依赖和mysql依赖-->
    <dependencies>
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.10</version>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.30</version>
        </dependency>
        <!--引入logback依赖-->
        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-classic</artifactId>
            <version>1.2.11</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.13.2</version>
            <scope>test</scope>
        </dependency>
    </dependencies>

把工具类和mybatis-config1.xml,logback.xml(日志配置文件),xxxMapper.xml都复制过来

下面这种写法,实际开发中是不存在的,值是写死的

传入的这个对象就是封装数据的 和sql里的#{xxx}形成映射关系

用Map封装试下     #{}内写Map集合的key  如果key不存咋子  #{key不存在} 就是个null值

插入成功

一般来说,我们会把key最为对应关系

上面是通过Map传值

下面通过POJO类传值 提供set get  无参  全参  toString equal  hashCode

此时#{}里就是POJO的属性名(严格来说是get方法后面XXX转小写?我认为是忽略大小写   形成一种映射关系 此时如果属性名写错,Map的话会插入null,但是pojo的话会报错,并且提示 There is no getter for property named 'xxxx' in class xxxxxxxx

就报错说找不到该属性的get方法

完成delete操作

如果直接传个常量值的话   #{随便写什么都可以}

完成update操作

查询  查一个

下图id写错了  selectCarById

这里注意下  查询不用commit

解决办法

1.加别名

2.用resultMap

3.配置成使用驼峰标识

1.加别名方式:

2.使用resultMap

3.使用驼峰

在mybatis核心配置文件里

.XML

测试

select查所有

关于映射文件中namespace的作用

原先上面测试都是只有一个xxxMapper.xml映射文件

当我有两个.XML映射文件的时候且里面的id一样的时候

这种方式就会出错

测试

这种情况下

Mybatis核心配置文件中的多环境配置

关于Mybatis核心配置文件中的事务管理

关于DataSource------->DataSource是JDK的规范  DataSource简单理解,放的就是数据库连接

不同类型的DataSource下的不同属性

JNDI作用:让Mybatis使用容器的连接池    容器实现了JNDI规范

关于数据源 类型  UNPOOLED-->不适用数据库连接池--->每次创建新的Connection对象

和POOLED---->使用Mybatis自己实现的数据库连接池

关于上述亮着的具体区别是什么?

在自己本地数据库新建库和表

核心配置文件  默认的数据库使用连接池   本地不适用连接池,看下具体区别

测试  用连接池的话,会重用连接对象

测试另外一个不用连接池的数据库

关于数据库连接池的一些配置

当连接用完,会怎么办???????

它会等待20秒   20秒到了之后,会强制拿出连接继续执行

关于最大空闲数量

关于核心配置文件里的preoperties标签

properties的另外一种用法

properties还有一种写法  url的写法  也是可以的

猜你喜欢

转载自blog.csdn.net/tiantiantbtb/article/details/132760315