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


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

     将Mybatis进行封装

    SqlSessionUtil工具类

    注意:这里封装的SqlSessionUtil在事务处理时候封装的不是太好

    详细的SqlSessionUtil见 Mybatis学习笔记3 在Web中应用Mybatis_biubiubiu0706的博客-CSDN博客

    1. package com.example.util;
    2. import org.apache.ibatis.io.Resources;
    3. import org.apache.ibatis.session.SqlSession;
    4. import org.apache.ibatis.session.SqlSessionFactory;
    5. import org.apache.ibatis.session.SqlSessionFactoryBuilder;
    6. import java.io.IOException;
    7. /**
    8. * @author hrui
    9. * @date 2023/9/8 14:55
    10. */
    11. public class SqlSessionUtil {
    12. //工具类的构造方法一般都是私有化
    13. //方法都是静态的
    14. //为了防止new对象,构造方法私有化
    15. private SqlSessionUtil(){
    16. }
    17. private static SqlSessionFactory sqlSessionFactory;
    18. //类加载时候执行
    19. //SqlSessionUtil工具类在被加载的时候,解析mybatis-config1.xml.创建sqlSessionFactory对象
    20. static{
    21. try {
    22. SqlSessionFactoryBuilder sqlSessionFactoryBuilder=new SqlSessionFactoryBuilder();
    23. //一个sqlSessionFactory对应一个数据库
    24. sqlSessionFactory= sqlSessionFactoryBuilder.build(Resources.getResourceAsStream("mybatis-config1.xml"));
    25. } catch (IOException e) {
    26. e.printStackTrace();
    27. }
    28. }
    29. //获取会话对象 返回会话对象
    30. public static SqlSession openSession(){
    31. SqlSession sqlSession = sqlSessionFactory.openSession();
    32. return sqlSession;
    33. }
    34. }

    这样测试就方便很多了

    新建一个模块  mybatis-02-crud

    maven项目

    引入依赖

    1. <!--引入mybatis依赖和mysql依赖-->
    2. <dependencies>
    3. <dependency>
    4. <groupId>org.mybatis</groupId>
    5. <artifactId>mybatis</artifactId>
    6. <version>3.5.10</version>
    7. </dependency>
    8. <dependency>
    9. <groupId>mysql</groupId>
    10. <artifactId>mysql-connector-java</artifactId>
    11. <version>8.0.30</version>
    12. </dependency>
    13. <!--引入logback依赖-->
    14. <dependency>
    15. <groupId>ch.qos.logback</groupId>
    16. <artifactId>logback-classic</artifactId>
    17. <version>1.2.11</version>
    18. </dependency>
    19. <dependency>
    20. <groupId>junit</groupId>
    21. <artifactId>junit</artifactId>
    22. <version>4.13.2</version>
    23. <scope>test</scope>
    24. </dependency>
    25. </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的写法  也是可以的

  • 相关阅读:
    聚乙烯基吡啶阳离子功能化聚苯乙烯微球/二氧化锆/聚苯乙烯阳离子微球研究步骤
    【Kyuubi】Apache Kyuubi 1.8 特性解读
    Eclipse 实现 Java 编辑器【一】(制作GUI界面)
    Kubernetes PDB
    3Dmax建模教程详细步骤3D建模速成入门到高级教程
    Redis缓存设计与性能优化【缓存穿透、缓存击穿、缓存雪崩】
    Springboot毕设项目律师事务所管理系统g6i8v(java+VUE+Mybatis+Maven+Mysql)
    06 估计量的评优准则
    unity unityWebRequest 通过http下载服务器资源
    kafka 动态扩容现有 topic 的分区数和副本数
  • 原文地址:https://blog.csdn.net/tiantiantbtb/article/details/132760315