• Mybatis学习笔记1 Mybatis入门


    差不多根据mybatis中文文档:创建第一个mybatismaven项目,将它跑起来

    入门_MyBatis中文网

    新建库

    建表

    创建项目

    重启之后

    配置下Maven与encoding  成习惯了

    新建模块

    注意:这个GroupId和ArtifactId  version是之后,你用Maven install时候后存放的包路径和包名

    目录结构:虽然换了JDK17但是编译器版本好像不行,IDEA版本可能低了

    突然发现maven不见了

    输入

    Maven projects

    选中对应的pom.xml

    maven回来了

    我还是把JDK换成8算了

    官网意思,从XML中构建SqlSessionFactory

    也就是说,这个XML其实是在配置SqlSessionFactory

      也讲了不使用XML配置的方式

    先按XML进行配置

    在Resources下新建mybatis-config.xml文件名无所谓

    这里讲下:有些配置文件好比一个模板,经常要使用,可以通过idea配置一下一些常用文件的模板

    以便下次使用时候,可以直接创建,具体方式

    IDEA常用模板文件配置_biubiubiu0706的博客-CSDN博客

    这里我就按Mybatis入门复制了

    把JDBC连接的驱动,URL,用户名,密码先整上



    接下来

    下面编写Mybatis程序 执行之后发现数据库没插入

    原因是Mybatis默认获取的sqlSession对象是不支持默认提交的

    看下SqlSessionFactory和sqlSession的实现类是哪个   -------->DefaultSqlSessionFactory和DefaultSqlSession  对源码有兴趣的可以看看

    一般情况下都是一个数据库对应一个SqlSessionFactory对象

    几个细节:

    mybatis核心配置文件命名可以随自己,放的位置也可以随自己(出于程序健壮性,可移植性,最好放在resources目录下)

    mybatis的xxxMaper.xml里的sql语句可以;(分号结尾)也可以省略不写

    通过同一个SqlSessionFactory对象可以获得多个不同sqlSession对象

    Resources.getResourceAsStream("mybatis-config.xml");这个是mybatis封装的API,一般遇到Resources说明都是resources目录下的,加入你的mybatis配置文件在resources下的xxx包下yyy.xml

    那么

    InputStream inputStream = Resources.getResourceAsStream("xxx/yyy.xml");

    获取到一个输入流

    然后将输入流放到build方法内

    SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(inputStream);

    那么能不能自己new个流呢?也是可以的,比如将配置文件放在D盘某目录下

    InputStream in=new FileInputStream("d:\\mybatis-config.xml")

    或者InputStream in=new FileInputStream("d:/mybatis-config.xml")

    但是这样的缺点是就是移植性差,放到苹果电脑就不行了

    指定resouces目录下,到哪里都可以用.

    另外加载mybatis核心配置文件还有一种方式用类加载器去获得系统类加载器调用getResourceAsStream("文件名")的方式

    InputStream in=ClassLoader.getSystemClassLoad().getResourceAsStream("mybatis-config.xml");

    其实也可以直接这样InputStream in=ClassLoader.getSystemResourceAsStream("mybatis-config.xml");

    
    
    
    
        
    

    关于Mybatis的事务管理机制

     
     
     

    如果使用的事务管理器类型是JDBC的话

    SqlSession sqlSession = sqlSessionFactory.openSession();

    这句代码底层会执行conn.setAutoCommit(false);

    如果使用的事务管理器类型是MANAGED的话,交给容器管理.比如交给Spring管理了.一般就是没有事务了,自动提交了

    openSession有个重载方法:

    SqlSession sqlSession = sqlSessionFactory.openSession(true);意思是自动提交

    在JDBC事务中,如果没有设置conn.setAutoCommit(false);的话conn.getAutoConmmit()本身就是true;

     经过上面介绍,写一个差不多完整版本的Mybatis入门程序

    为了以后测试方便,不需要测试一个就写个main方法,引入JUnit(单元测试)

    新建个模块测试Junit

    Maven项目

    引入依赖

    比如说需要对该业务方法进行测试

    在test包下建测试类     这个断言挺好用

    Mybatis中引入junit

    在单元测试中编写Mybatis程序

    可以看到现在没有日志输出

    关于Mybatis集成日志框架logback.可以让调试更加方便

    下面记录是以前的学习记录

    另外说一下 在配置文件里  点进去  有个标签的顺序问题,需要按顺序来

    关于在配置文件里Mybatis集成日志框架logback.

    在官方文档设置里

    这样就有日志输出了

    但是详细时间,线程名称,如果想使用更加丰富的日志,可以集成第三方依赖

    SLF4(沙拉风):沙拉风是一个日志标准,其中有一个框架叫做logback,它实现了沙拉风规范

    LOG4J:

    LOG4J2:

    STDOUT_LOGGING:Mybatis内置标准日志实现

    ....

    注意:SLF4,LOG4J,LOG4J2作者是同一个人

    修改Mybatis配置文件     注意如果用第三方依赖  这个settings可以不配置   这里不配置也是可以的

    其实不需要配置   除非用内置

    引入jar包

    然后引入logback所必须的xml配置文件

    这个配置文件必须叫做:logback.xml或者logback-test.xml,不能是其它的名字.

    这个配置文件必须放在类的根目录下.不能是其他位置

    logback.xml代码

    1. <?xml version="1.0" encoding="UTF-8"?>
    2. <configuration debug="false">
    3. <!--定义⽇志⽂件的存储地址-->
    4. <property name="LOG_HOME" value="/home"/>
    5. <!-- 控制台输出 -->
    6. <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
    7. <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
    8. <!--格式化输出:%d表示⽇期,%thread表示线程名,%-5level:级别从左显示5
    9. 个字符宽度%msg:⽇志消息,%n是换⾏符-->
    10. <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
    11. </encoder>
    12. </appender>
    13. <!-- 按照每天⽣成⽇志⽂件 -->
    14. <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
    15. <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
    16. <!--⽇志⽂件输出的⽂件名-->
    17. <FileNamePattern>${LOG_HOME}/TestWeb.log.%d{yyyy-MM-dd}.log</FileNamePattern>
    18. <!--⽇志⽂件保留天数-->
    19. <MaxHistory>30</MaxHistory>
    20. </rollingPolicy>
    21. <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
    22. <!--格式化输出:%d表示⽇期,%thread表示线程名,%-5level:级别从左显示5
    23. 个字符宽度%msg:⽇志消息,%n是换⾏符-->
    24. <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logge
    25. r{50} - %msg%n</pattern>
    26. </encoder>
    27. <!--⽇志⽂件最⼤的⼤⼩-->
    28. <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
    29. <MaxFileSize>100MB</MaxFileSize>
    30. </triggeringPolicy>
    31. </appender>
    32. <!--mybatis log configure-->
    33. <logger name="com.apache.ibatis" level="TRACE"/>
    34. <logger name="java.sql.Connection" level="DEBUG"/>
    35. <logger name="java.sql.Statement" level="DEBUG"/>
    36. <logger name="java.sql.PreparedStatement" level="DEBUG"/>
    37. <!-- ⽇志输出级别,logback⽇志级别包括五个:TRACE < DEBUG < INFO < WARN < ERROR -->
    38. <root level="DEBUG">
    39. <appender-ref ref="STDOUT"/>
    40. <appender-ref ref="FILE"/>
    41. </root>
    42. </configuration>

    测试

     

  • 相关阅读:
    C# OpenCvSharp 利用Lab空间把春天的场景改为秋天
    I²C通信协议
    第三十二节——组合式API计算属性+watch
    SpringMVC的视图
    48. 旋转图像
    深入解析 qsort 函数(下),用冒泡排序模拟实现 qsort 函数
    前端 WebSocket 的一些使用
    【模型训练】YOLOv7道路交通标志检测
    BEVFormer代码跑通
    将字符串中的数据按指定分隔符分割依次存入一维数组中 numpy.fromstring()
  • 原文地址:https://blog.csdn.net/tiantiantbtb/article/details/132741802