1.回顾1-8
1.1 什么是mybatis
是一个持久层框架
怎么将mybatis引入自己的项目——引入jar包即可
学习主要查看官方文档
1.2 什么是持久化
2.1 第一个mybatis程序
2.2 CRUD
2.3 mybatis配置文件解析
step1(可以直接复制现成的,然后修改对应位置即可使用)
①编写mybatis核心配置文件
②编写数据库的资源文件(driver、url、username、password)
step2(可以直接复制现成的,基本都不需要修改)
①编写MyBatisUtils工具类,用于获取SqlSession对象
step3
①编写实体类
step4
①编写DAO/MAPPER接口定义
②编写DAO/MAPPER的实现MAPPER.XML
2.日志
1.日志工厂
在学习javaweb的时候,对于数据库的操作很多时候都是我们的SQL语句出了问题,所以我们采用的是在指定SQL语句之前将SQL语句打印出来,但是现在我们的SQL语句写在mapper.xml文件中,要怎么打印?
这个时候就需要使用到日志工厂来解决问题
以前排错手段:sout、debug
新增手段:使用日志工厂
link
- SLF4J
- LOG4J 【掌握】
- LOG4J2
- JDK_LOGGING
- COMMONS_LOGGING
- STDOUT_LOGGING 【掌握】
- NO_LOGGING
一个配置完整的 settings 元素的示例如下:
<settings>
<setting name="cacheEnabled" value="true"/>
<setting name="lazyLoadingEnabled" value="true"/>
<setting name="multipleResultSetsEnabled" value="true"/>
<setting name="useColumnLabel" value="true"/>
<setting name="useGeneratedKeys" value="false"/>
<setting name="autoMappingBehavior" value="PARTIAL"/>
<setting name="autoMappingUnknownColumnBehavior" value="WARNING"/>
<setting name="defaultExecutorType" value="SIMPLE"/>
<setting name="defaultStatementTimeout" value="25"/>
<setting name="defaultFetchSize" value="100"/>
<setting name="safeRowBoundsEnabled" value="false"/>
<setting name="mapUnderscoreToCamelCase" value="false"/>
<setting name="localCacheScope" value="SESSION"/>
<setting name="jdbcTypeForNull" value="OTHER"/>
<setting name="lazyLoadTriggerMethods" value="equals,clone,hashCode,toString"/>
</settings>
可见setting节点需要写在properties和typeAliases之间
mybatis中具体使用哪个日志实现,在mybatis的setting节点中设定
- STDOUT_LOGGING:标准日志工厂输出
<?xml version="1.0" encoding="UTF8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<!--引入外部配置文件-->
<properties resource="db.properties">
<property name="username" value="root"/>
<property name="password" value="123"/>
</properties>
<settings>
<setting name="logImpl" value="STDOUT_LOGGING"/>
</settings>
<typeAliases>
<package name="com.thhh.pojo"/>
</typeAliases>
<!--数据库环境节点-->
<environments default="development"><!--environments节点的default属性指定配置的众多环境中默认使用哪一个数据库环境-->
<!--环境1,我们还可以配置其他很多的环境节点-->
<environment id="development">
<transactionManager type="JDBC"/><!--事务管理,这里使用的就是JDBC中的事务管理-->
<dataSource type="POOLED">
<!--属性节点,name设置属性名称,value设置属性值-->
<!--这里配置的就是JDBC4大参数-->
<property name="driver" value="${driver}"/><!--驱动-->
<!--注意:在XML中使不能直接使用&连接参数,我们需要转义,使用&代替&-->
<property name="url" value="${url}"/><!--数据库的URL-->
<property name="username" value="${username}"/><!--连接数据库的账号-->
<property name="password" value="${password}"/><!--连接数据库的密码-->
</dataSource>
</environment>
</environments>
<mappers>
<mapper class="com.thhh.dao.UserMapper"/>
</mappers>
</configuration>
打开日志之后我们在去测试一次按照ID查询数据
- LOG4J
- 什么是log4j
- Log4j是Apache的一个开源项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台、文件、GUI组件
- 我们可以控制每一条日志的输出格式
- 通过定义每一条日志信息的级别,我们能够更加细致地控制日志的生成过程
- 可以通过一个配置文件来灵活地进行配置,而不需要修改应用的代码
2.怎么使用
- 导入jar包
<!-- https://mvnrepository.com/artifact/log4j/log4j --> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.17</version> </dependency>
- 在MAVEN项目的resources文件夹下创建log4j.properties配置文件
#将等级为DEBUG的日志信息输出到console和file这两个目的地,console和file的定义在下面的代码 log4j.rootLogger=DEBUG,console,file #控制台输出的相关设置 log4j.appender.console = org.apache.log4j.ConsoleAppender log4j.appender.console.Target = System.out log4j.appender.console.Threshold=DEBUG log4j.appender.console.layout = org.apache.log4j.PatternLayout log4j.appender.console.layout.ConversionPattern=【%c】-%m%n #文件输出的相关设置 log4j.appender.file = org.apache.log4j.RollingFileAppender log4j.appender.file.File=./log/thhh.log log4j.appender.file.MaxFileSize=10mb log4j.appender.file.Threshold=DEBUG log4j.appender.file.layout=org.apache.log4j.PatternLayout log4j.appender.file.layout.ConversionPattern=【%p】【%d{yy-MM-dd}】【%c】%m%n #日志输出级别 log4j.logger.org.mybatis=DEBUG log4j.logger.java.sql=DEBUG log4j.logger.java.sql.Statement=DEBUG log4j.logger.java.sql.ResultSet=DEBUG log4j.logger.java.sql.PreparedStatement=DEBUG
- 修改mybatis核心配置文件
<?xml version="1.0" encoding="UTF8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<!--引入外部配置文件-->
<properties resource="db.properties">
<property name="username" value="root"/>
<property name="password" value="123"/>
</properties>
<settings>
<setting name="logImpl" value="LOG4J"/>
</settings>
<typeAliases>
<package name="com.thhh.pojo"/>
</typeAliases>
<!--数据库环境节点-->
<environments default="development"><!--environments节点的default属性指定配置的众多环境中默认使用哪一个数据库环境-->
<!--环境1,我们还可以配置其他很多的环境节点-->
<environment id="development">
<transactionManager type="JDBC"/><!--事务管理,这里使用的就是JDBC中的事务管理-->
<dataSource type="POOLED">
<!--属性节点,name设置属性名称,value设置属性值-->
<!--这里配置的就是JDBC4大参数-->
<property name="driver" value="${driver}"/><!--驱动-->
<!--注意:在XML中使不能直接使用&连接参数,我们需要转义,使用&代替&-->
<property name="url" value="${url}"/><!--数据库的URL-->
<property name="username" value="${username}"/><!--连接数据库的账号-->
<property name="password" value="${password}"/><!--连接数据库的密码-->
</dataSource>
</environment>
</environments>
<mappers>
<mapper class="com.thhh.dao.UserMapper"/>
</mappers>
</configuration>
- 测试输出
- 既然引入的log4j,我们当然不会把它当作STDOUT_LOGGING一样使用,引入log4j当然是要发挥它定制输出的功能
①在要输出日志的*.java文件中导入包"org.apache.log4j.Logger"
②实例化Logger对象,Logger.getLogger()中传入的参数为当前 *.java文件的名称——即指定输出这个文件的日志
③在调用日志输出的地方设置Logger对象的输出的日志级别package com.thhh.dao; import com.thhh.pojo.User; import com.thhh.utils.MyBatisUtils; import org.apache.ibatis.session.SqlSession; import org.apache.log4j.Logger; import org.junit.Test; public class UserDaoTest { static Logger logger = Logger.getLogger(UserDaoTest.class); @Test public void test1(){ //1、获取SqlSession对象 SqlSession sqlSession = MyBatisUtils.getSqlSession(); //2、获取执行SQL的对象,获取的方法就是通过sqlSession.getMapper(),去获取User.class的mapper映射器 UserMapper mapper = sqlSession.getMapper(UserMapper.class); User user = mapper.getUserById(2); System.out.println(user); sqlSession.close(); } @Test public void testLog4j(){ //1、获取SqlSession对象 SqlSession sqlSession = MyBatisUtils.getSqlSession(); logger.info("info:进入testLog4j成功,logger.info作用等同于sout"); logger.debug("debug:进入testLog4j成功,logger.debug为默认的日志输出级别,我们不设置的时候输出的日志都是这个级别的"); logger.error("error:进入testLog4j成功,logger.error为出现错误的时候的输出,我们一般将这个输出放在catch中"); //2、获取执行SQL的对象,获取的方法就是通过sqlSession.getMapper(),去获取User.class的mapper映射器 UserMapper mapper = sqlSession.getMapper(UserMapper.class); User user = mapper.getUserById(2); System.out.println(user); sqlSession.close(); } }