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