名作之壁吧网站建设,iis7 多个网站 80端口,网站制作公司上海,永州网站推广1.MyBatis中的日志
1.1 什么是日志
在我们编写应用的时候#xff0c;有一些信息需要及时查看#xff0c;查看的时候有时需要输出到控制台#xff0c;有时需要输出到文件。MyBatis也需要日志#xff0c;一般情况下#xff0c;使用log4j进行日志管理。
1.2 在MyBatis中…1.MyBatis中的日志
1.1 什么是日志
在我们编写应用的时候有一些信息需要及时查看查看的时候有时需要输出到控制台有时需要输出到文件。MyBatis也需要日志一般情况下使用log4j进行日志管理。
1.2 在MyBatis中使用日志的步骤
1、引入日志的依赖
MyBatis默认要引入日志如果不引入日志就会产生错误如果引入了日志但是不对日志进行配置就会出现警告。
!-- https://mvnrepository.com/artifact/log4j/log4j --dependencygroupIdlog4j/groupIdartifactIdlog4j/artifactIdversion1.2.17/version/dependency2、日志的级别
log4j在使用的时候需要进行配置配置的时候一般对日志分为6个级别
级别从低到高描述适用场景TRACE提供最详细的程序执行跟踪信息用于细粒度调试。开发阶段深度排查问题生产环境通常关闭。DEBUG记录调试信息帮助开发者了解程序运行细节如变量值、流程节点。开发和测试环境用于定位问题。INFO输出程序运行的关键状态信息如启动完成、重要操作记录。生产环境监控运行状态记录关键流程。WARN提示潜在问题或非预期情况但不会导致程序中断如配置缺失、性能下降警告。需关注但非紧急的问题提醒运维排查。ERROR记录错误事件可能导致部分功能失效但程序仍可运行如数据库连接超时、外部接口异常。生产环境错误监控需及时处理。FATAL记录致命错误导致程序无法继续运行如内存溢出、系统崩溃。需立即终止程序并紧急修复的严重问题。
输出目标一般是控制台和文件 console控制台file文件 3、对日志进行配置 1.log4j.appender.console是相关的设置的名字后面的参数是真正的配置 2.org.apache.log4j.ConsoleAppender日志的实现类该类输出到控制台 3.org.apache.log4j.PatternLayout:日志输出布局的实现类 4. [%c]-%m%n:日志输出的格式化 配置代码配置文件名必须使用log4j.properties,位置放在resources包下
#将等级为DEBUG的日志信息输出到console和file这两个目的地console和file的定义在下面的代码
log4j.rootLoggerDEBUG,console,file#控制台输出的相关设置
log4j.appender.console org.apache.log4j.ConsoleAppender
log4j.appender.console.Target System.out
log4j.appender.console.ThresholdDEBUG
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/mybatis.log
log4j.appender.file.MaxFileSize10mb
log4j.appender.file.ThresholdDEBUG
log4j.appender.file.layoutorg.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern[%p][%d{yy-MM-dd}][%c]%m%n#日志输出级别
log4j.logger.org.mybatisDEBUG
log4j.logger.java.sqlDEBUG
log4j.logger.java.sql.StatementDEBUG
log4j.logger.java.sql.ResultSetDEBUG
log4j.logger.java.sql.PreparedStatementDEBUG2.MyBatis映射器说明
2.1 简介
映射器是 MyBatis 中最重要的文件文件中包含一组 SQL 语句例如查询、添加、删除、修改这些语句称为映射语句或映射 SQL 语句。
映射器由 Java 接口和 XML 文件或注解共同组成它的作用如下。 定义参数类型配置缓存提供 SQL 语句和动态 SQL定义查询结果和 POJO 的映射关系 映射器有以下两种实现方式。 通过 XML 文件方式实现比如我们在 mybatis-config.xml 文件中描述的 XML 文件用来生成 mapper。通过注解的方式实现使用 Configuration 对象注册 Mapper 接口 如果 SQL 语句存在动态 SQL 或者比较复杂使用注解写在 Java 文件里可读性差且增加了维护的成本。所以一般建议使用 XML 文件配置的方式避免重复编写 SQL 语句。
2.2 XML实现映射器
XML 定义映射器分为两个部分接口和XML。利用映射器实现增删改查会在下文详细介绍后续会贴上链接地址
mapper文件标签顺序说明
!ELEMENT mapper (cache-ref | cache | resultMap* | parameterMap* | sql* | insert* | update* | delete* | select* )!ELEMENT mapper声明了一个节点该节点是xml的根节点。 ( )代表节点里应该有哪些子节点。 |:代表子节点没有前后顺序也可以有或者没有。 *代表子节点可以没有也可以有多个 代表最多只能有一个。 namespace 用来定义命名空间该命名空间和定义接口的全限定名一致。
select 元素表明这是一条查询语句属性 id 用来标识这条 SQL。resultType 表示返回的是一个 Student 类型的值。namespace的前缀必须是包名后面的命名必须和接口的命名一样。
在 MyBatis 配置文件中添加以下代码。 package nameorg.example.mapper/ 该语句用来引入 XML 文件MyBatis 会读取对应 XxxMapper.xml 文件生成映射器。
2.3 注解实现映射器
使用注解的方式实现映射器只需要在接口中使用 Java 注解注入 SQL 即可。如下所示。
public interface StudentMapper {Select(value select * from Student)public ListWebsite select();
} 这里我们使用了 Select 注解并且注入了和 XML 中相同的 select 语句。
注意
1.如果使用注解和 XML 文件两种方式同时定义会报id重复的异常。
2.虽然这里注解的方式看起来比 XML 简单但是现实中我们遇到的 SQL 会比该例子复杂得多。如果 SQL 语句中有多个表的关联、多个查询条件、级联、条件分支等显然这条 SQL 就会复杂的多所以并不建议读者使用这种方式。比如下面这条 SQL。
select * from t_user u
left join t_user_role ur on u.id ur.user_id
left join t_role r on ur.role_id r.id
left join t_user_info ui on u.id ui.user_id
left join t_female_health fh on u.id fh.user_id
left join t_male_health mh on u.id mh.user_id
where u.user_name like concat(%, ${userName},%)
and r.role_name like concat(%, ${roleName},%)
and u.sex 1
and ui.head_image is not null; 如果把以上 SQL 放到 Select 注解中无疑会大大降低代码的可读性。如果同时还要考虑使用动态 SQL 或需要加入其他的逻辑这样就使得这个注解更加复杂了不利于日后的维护和修改。
此外XML 可以相互引入而注解是不可以的所以在一些比较复杂的场景下使用 XML 方式会更加灵活和方便。因此大部分的企业都以 XML 为主本教程也会保持一致以 XML 方式来创建映射器。当然在一些简单的表和应用中使用注解方式也会比较简单。
这个接口可以在 XML 中定义将在 mybatis-config.xml 中配置 XML 的语句修改为以下语句即可。
mapper resourcecom/mybatis/mapper/WebsiteMapper2 / 也可以使用 configuration 对象注册这个接口比如
configuration.addMapper(WebsiteMapper2.class);2.4 MyBatis 映射器的主要元素
下面介绍在映射器中可以定义哪些元素以及它们的作用。
元素名称描述备注mapper映射文件的根节点只有 namescape 一个属性namescape 作用如下①用于区分不同的 mapper全局唯一②绑定DAO接口即面向接口编程。当 namescape 绑定某一接口后可以不用写该接口的实现类MyBatis 会通过接口的完整限定名查找到对应的 mapper 配置来执行 SQL 语句。因此 namescape 的命名必须要跟接口同名。select查询语句最常用、最复杂的元素之一可以自定义参数返回结果集等insert插入语句执行后返回一个整数代表插入的条数update更新语句执行后返回一个整数代表更新的条数delete删除语句执行后返回一个整数代表删除的条数parameterMap定义参数映射关系即将被删除的元素不建议使用sql允许定义一部分的 SQL然后在各个地方引用它例如一张表列名我们可以一次定义在多个 SQL 语句中使用resultMap用来描述数据库结果集与对象的对应关系它是最复杂、最强大的元素提供映射规则cache配置给定命名空间的缓存-cache-ref其它命名空间缓存配置的引用-
拓展
关于 MyBatis 的 SQL 映射文件中的 mapper 元素的 namescape 属性有如下要求。 namescape 的命名必须跟某个 DAO 接口同名同属于 DAO 层因此代码结构上映射文件与该接口应放置在同一 package 下如org.example.mapper并且习惯上是以 Mapper 结尾如StudentMapper.java、TeacherMapper.xml。不同的 mapper 文件中子元素的 id 可以相同MyBatis 通过 namescape 和子元素的 id 联合区分。接口中的方法与映射文件中的 SQL 语句 id 应一 一对应。