mybatis

Posted xsh726

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mybatis相关的知识,希望对你有一定的参考价值。

1.为什么学习mybatis

   jdbc有缺点:

  • 加载驱动,获取链接,操作数据库,关闭连接 、
  • 封装:经常修改的内容放到配置文件中,不经常修改的放到Java文件中
  • 占位符?,占位符的位置,以及赋值的时候要注意序号
  • 关联关系:一对一,一对多,多对一,多对多
  • 缓存:访问数据量多时,可以重复使用查询的数据,减少数据库的访问

  介绍mybatis

  • Mybatis是一个半自动的框架  ORM O:Object(java就是一个面向对象的编程语言)  R:Relation(数据库)  M:Mapping(映射)  ORM的口号时不准再项目中写sql

  Junit

  • Junit测试类使用方法
  • 引入jar包
  • 第一个方法修饰符必须是public,返回值,和参数不能有,只需要在需要测试的方法上加@Test
  • @Before是在@test之前运行
  • @After实在@test之后运行

  Log4j

  • Log4j是java日志,日记
  • String.out.println()  没有日期,没写是哪个类打印是哪一行,没有级别,
  • Log4j:一天一个文本,一天的文本会按照大小记录两个本

  使用方法

  • 引入jar包
  • 配置文件

基本版本

 



<?xml version="1.0" encoding="UTF-8"?> <!-- 配置文件的名字必须叫做log4j2.xml 配置文件的位置必须放到classpath的根目录 classpath: class的路径呗; --> <Configuration status="WARN"> <Appenders> <Console name="Console" target="SYSTEM_OUT"> <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" /> </Console> </Appenders> <Loggers> <Root level="error"> <AppenderRef ref="Console" /> </Root> </Loggers> </Configuration>

 高级版本



<?xml version="1.0" encoding="UTF-8"?> <!-- status=debug 可以查看log4j的装配过程 --> <configuration status="off" monitorInterval="1800"> <appenders> <!-- 定义控制台输出 --> <Console name="Console" target="SYSTEM_OUT" follow="true"> <PatternLayout pattern="%date{yyyy-MM-dd HH:mm:ss.SSS} %level [%thread][%file:%line] - %msg%n" /> </Console> <!-- 系统打印日志 fileName:文件的名字 filePattern:文件名字的格式; --> <RollingRandomAccessFile name="System" fileName="logs/mvchain/system.log" filePattern="logs/mvchain/system_%d{yyyy-MM-dd}_%i.log"> <PatternLayout pattern="%date{yyyy-MM-dd HH:mm:ss.SSS} %level [%thread][%file:%line] - %msg%n" /> <Policies> <!-- 多长时间生成一个文件;默认1天 --> <TimeBasedTriggeringPolicy interval="1" modulate="true" /> <!-- 多大的文件要切分 --> <SizeBasedTriggeringPolicy size="5K" /> </Policies> </RollingRandomAccessFile> <!-- 外部打印日志 --> <RollingRandomAccessFile name="Outer" fileName="logs/mvchain/outer.log" filePattern="logs/mvchain/outer_%d{yyyy-MM-dd}_%i.log"> <PatternLayout pattern="%date{yyyy-MM-dd HH:mm:ss.SSS} %level [%thread][%file:%line] - %msg%n" /> <Policies> <TimeBasedTriggeringPolicy interval="1" modulate="true" /> <SizeBasedTriggeringPolicy size="100M" /> </Policies> </RollingRandomAccessFile> <!-- 线程打印日志 --> <RollingRandomAccessFile name="Timer" fileName="logs/mvchain/timer.log" filePattern="logs/mvchain/timer_%d{yyyy-MM-dd}_%i.log"> <PatternLayout pattern="%date{yyyy-MM-dd HH:mm:ss.SSS} %level [%thread][%file:%line] - %msg%n" /> <Policies> <TimeBasedTriggeringPolicy interval="1" modulate="true" /> <SizeBasedTriggeringPolicy size="100M" /> </Policies> </RollingRandomAccessFile> </appenders> <loggers> <!-- Root Logger(这个是整个配置文件的入口 --> <root level="info"> <!-- 调用定义的log4j配置 console:指的是名字;(在这个标签中定义configuration==>appenders这下面标签的name属性 ) --> <appender-ref ref="Console" /> <appender-ref ref="System" /> </root> <!-- 外部日志,分开日志,name为getLogger() console:指的是名字;(在这个标签中定义configuration==>appenders这下面标签的name属性 ) 下面定义的多个组合,logger标签中任意组合 --> <logger name="SystemLog" level="info" additivity="false"> <appender-ref ref="Console" /> <appender-ref ref="System" /> </logger> <!-- 外部日志,分开日志,name为getLogger() --> <logger name="OuterLog" level="info" additivity="false"> <!-- 日志文件要输出到三个地方,控制台,系统文件,外部文件 --> <appender-ref ref="Console" /> <appender-ref ref="System" /> <appender-ref ref="Outer" /> </logger> <!-- 线程日志,分开日志,name为getLogger() --> <logger name="TimerLog" level="info" additivity="false"> <!-- 日志文件要输出到三个地方,控制台,系统文件,外部文件 --> <appender-ref ref="Console" /> <appender-ref ref="System" /> <appender-ref ref="Outer" /> </logger> </loggers> </configuration>

 

  • java代码
日志的笔
Logger logger = LogManager.getLogger() ;
级别从上到下是从低到高

 logger.trace("====trace(跟踪)====");

  logger.debug("====debug(断点调试)====");

logger.info("====info(信息)(蓝色)====");

logger.warn("====warn(警告)(黄色)====");

logger.error("====error(错误)(红色)====");

 

想用变量时可以用大括号{},类似于占位符?

赋值时,第二个参数为2-1的{}赋值,第三个参数为第二个{}赋值,如果方法的参数小于占位符的个数则保持原样

 

报错时 e 存储了报错信息,必须放到最后一个位置,报错时使用的级别是error

logger.error("报错了{},{},",name,score,e);

 


 

2. Mybatis-hw

  • 导入jar包
  • 添加junit
  • 添加log4j
  • java连接mysql数据库的jar包
  • 去重复,删旧留新
  • 拷贝配置文件
 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <!DOCTYPE configuration
 3   PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
 4   "http://mybatis.org/dtd/mybatis-3-config.dtd">
 5 <!-- 
 6     xml是一个配置文件,
 7     标签三要素:
 8         标签名
 9         属性名
10         开始标签和结束标签中间的内容
11     这里面的标签随便写;
12     mybatis要求标签不能随便写,得需要一个dtd,或者schema
13  -->
14 <configuration>
15     <!-- 配置了一堆环境;jdbc的环境
16         default:默认的环境,配置environment的id
17      -->
18     <environments default="my">
19         <!-- 配置一个单数 -->
20         <environment id="my">
21             <!-- 事务管理器:专门用来管理事务的 -->
22             <transactionManager type="JDBC"/>
23             <!-- 数据源
24                 pooled:连接池;放的是一个一个的Connection;
25                 数据源包含了java连接数据库的各种信息
26              -->
27             <dataSource type="POOLED">
28                 <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
29                 <property name="url" value="jdbc:mysql://127.0.0.1:3306/mybatis"/>
30                 <property name="username" value="root"/>
31                 <property name="password" value="123456"/>
32             </dataSource>
33         </environment>
34     </environments>
35 </configuration>

 

3.Crud

  • 容器三要素(数组,集合,map,连接线,线程池,tomcat)
    • 大小  
    • 容器里的的东西
    • crud

 

 

4.常见错误

  • 没有找到@test,或者junit的方法不标准

5.log4j

  • 看到以下红字,说明使用的是log4j1.x;需要一个配置文件叫:log4j.properties;我们已经使用的是log4j2;log4j1.xjar包删除掉

  • Mybatis:自己可以指定日志;(log4j,slf4j;)删除所有的log4j,只留下log4j2;

  •  删除的jar包有:

  •  log4j-1.2.17.jar   

  • slf4j-api-1.7.26.jar

  •  slf4j-log4j12-1.7.26.jar
  • commons-logging-1.2.jar

 

 

 

 

 

    

以上是关于mybatis的主要内容,如果未能解决你的问题,请参考以下文章

SSM-MyBatis-05:Mybatis中别名,sql片段和模糊查询加getMapper

mybatis动态sql片段与分页,排序,传参的使用

MyBatis动态SQL标签用法

MYBATIS05_ifwherechoosewhentrimsetforEach标签sql片段

mybatis动态sql之利用sql标签抽取可重用的sql片段

[mybatis]动态sql_sql_抽取可重用的sql片段