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的写法 也是可以的