Mybatis学习总结
跟着bilibili上的秦疆老师经过三天的时间,把Mybatis系统的学习了一下。今天是第三天,课程结束了,来做个简单的回顾和总结。进入正题。Mybatis作为持久层的一个框架,整体学下来,学到了很多对数据的不一样的操作。真切的感觉到了这个框架的强大和便利。环境使用的是IDea,Maven项目。首先创建了一个主程序,在配置文件中加入引用,Maven自动下载引用jar包,不得不说很舒服。不像之前使用的环境需要自己手动导包,buildPath...

紧接着就是需要进行主配置(Mybatis-config.xml)的编写:
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 <configuration> 6 <properties resource="db.properties"/> 7 <typeAliases> 8 <typeAlias type="com.coolzhu.domain.User" alias="User"/> <!--给实体类起别名,在resultType需要返回对象的时候使用。--> 9 </typeAliases> 10 <environments default="mysql"> 11 <environment id="mysql"> 12 <transactionManager type="JDBC" /> 13 <dataSource type="POOLED"> 14 <property name="driver" value="${driver}" /> 15 <property name="url" value="${url}" /> 16 <property name="username" value="${username}" /> 17 <property name="password" value="${password}" /> 18 </dataSource> 19 </environment> 20 </environments> 21 <mappers><!--映射器--> 22 <mapper resource="com/coolzhu/Mapper/UserMapper.xml"/>
<!--映射器 有三种使用 "resource"算第一种
2.class="com.coolzhu.Mapper.UserMapper"
3.package="com.coolzhu.Mapper"
其中,resource不要求配置文件存放位置,后两者要求配置文件要存放在同一文件夹下--> 23 </mappers> 24 </configuration>
工具类的编写:
1 package com.coolzhu.Utils; 2 3 import org.apache.ibatis.io.Resources; 4 import org.apache.ibatis.session.SqlSession; 5 import org.apache.ibatis.session.SqlSessionFactory; 6 import org.apache.ibatis.session.SqlSessionFactoryBuilder; 7 8 import java.io.IOException; 9 import java.io.InputStream; 10 11 //sqlSessionFactory -->sqlSession 12 public class MybatisUtils { 13 private static SqlSessionFactory sqlSessionFactory; 14 static { 15 try { 16 String resource="Mybatis-config.xml"; 17 InputStream inputStream= Resources.getResourceAsStream(resource); 18 sqlSessionFactory=new SqlSessionFactoryBuilder().build(inputStream); 19 } catch (IOException e) { 20 e.printStackTrace(); 21 } 22 } 23 public static SqlSession getSqlSession(){ 24 return sqlSessionFactory.openSession(true);//自动提交事务(t/f) 25 } 26 }
Mybatis-config.xml配置完毕之后,写实体类(domain/pojo/entity),“alt+ins”自动生成构造函数,GETTER/SETTER。
CRUD的实现:
再写dao/Mapper包,其中包含(***Mapper接口,***Mapper.xml配置文件)


***Mapper是一个传统的接口,写具体实现就好。至于同名xml文件,需要注意的是,namespace:用作与接口进行联系,做出具体实现。要实现CRUD只需要在<mapper></mapper>中写入相应的标签,然后再写具体的SQL行了。这时,老师讲了个万能Map,事实证明,确实好用。
在增删改的时候,需要注意的是,这个时候没有resultMap选项,此时给出parameterType=map,在具体实现的时候就可以愉快的使用map了。而在做查找操作的时候,需要给出returnMap。

注解开发:
注解开发,对于简单的CRUD来说,又省去了很多步骤。当然前提是(简单的CRUD...)

注解开发的时候,要注意在Mybatis-config.xml中把映射器中的.xml文件(class模式时)换成.Mapper,因为注解开发的时候,是不需要.xml配置文件进行连接的。

日志:
日志如果是引用标准的日志,只需要在Mybatis-config.xml中加入setting,就可以了。

但是如果使用log4j的话,当然还需要做导包,配置,引入才可以正常使用。
导包:
1 <!-- https://mvnrepository.com/artifact/log4j/log4j --> 2 <dependency> 3 <groupId>log4j</groupId> 4 <artifactId>log4j</artifactId> 5 <version>1.2.17</version> 6 </dependency>
配置:
1 ### set log levels ### 2 log4j.rootLogger = DEBUG , C , D , E 3 4 ### console ### 5 log4j.appender.C = org.apache.log4j.ConsoleAppender 6 log4j.appender.C.Target = System.out 7 log4j.appender.C.layout = org.apache.log4j.PatternLayout 8 log4j.appender.C.layout.ConversionPattern = [mybatis_study][%p] [%-d{yyyy-MM-dd HH\:mm\:ss}] %C.%M(%L) | %m%n 9 10 ### log file ### 11 log4j.appender.D = org.apache.log4j.DailyRollingFileAppender 12 log4j.appender.D.File = ../logs/mybatis_study.log 13 log4j.appender.D.Append = true 14 log4j.appender.D.Threshold = INFO 15 log4j.appender.D.layout = org.apache.log4j.PatternLayout 16 log4j.appender.D.layout.ConversionPattern = [mybatis_study][%p] [%-d{yyyy-MM-dd HH\:mm\:ss}] %C.%M(%L) | %m%n 17 18 ### exception ### 19 log4j.appender.E = org.apache.log4j.DailyRollingFileAppender 20 log4j.appender.E.File = ../logs/mybatis_study_error.log 21 log4j.appender.E.Append = true 22 log4j.appender.E.Threshold = ERROR 23 log4j.appender.E.layout = org.apache.log4j.PatternLayout 24 log4j.appender.E.layout.ConversionPattern = [mybatis_study][%p] [%-d{yyyy-MM-dd HH\:mm\:ss}] %C.%M(%L) | %m%n 25 26 ###mybatis show sql### 27 log4j.logger.com.ibatis=debug 28 log4j.logger.com.ibatis.common.jdbc.SimpleDataSource=debug 29 log4j.logger.com.ibatis.common.jdbc.ScriptRunner=debug 30 log4j.logger.com.ibatis.sqlmap.engine.impl.SqlMapClientDelegate=debug 31 32 log4j.logger.java.sql.Connection=debug 33 log4j.logger.java.sql.Statement=debug 34 log4j.logger.java.sql.PreparedStatement=debug
引用:

这样的话,log4j就可以使用了。
动态SQL:
动态SQL是为了解决SQL拼接的问题。提供了基于 OGNL 的表达式if,choose,foreach,when...再结合map一起使用,很强大。

一级缓存和二级缓存:
缓存是为了解决大量用户访问统一数据库造成的诸多(类似高并发)问题。引用秦老师上课的时候,讲的两张表。

图、缓存出现的必要性
用户访问数据库顺序:二级缓存---一级缓存---数据库
一级缓存存在场景:SqlSession(一级缓存,自动开启,且无法关闭);
二级缓存存在场景:namespace(二级缓存,手动开启,首先在setting中设置:cacheEnable=true,之后再Mybatis-config.xml中加入“<cache/>”,就完成了二级缓存的开启)

图、用户访问数据的顺序
当然因为是初学,所以也很多遇到了一些常见的坑。
下次再一 一写出来吧。这点东西居然写了一个多小时。。睡了睡了。晚安。
-------仅用于回忆自己学习Mybatis的内容以及方便日后复习。

浙公网安备 33010602011771号