每个基于 MyBatis 的应用都是以一个 SqlSessionFactory 的实例为核心的,SqlSessionFactory的实例可以通过 SqlSessionFactoryBuilder 获得,而 SqlSessionFactoryBuilder则可以从XML配置文件或一个预先配置的 Configuration实例来构建出SqlSessionFactory实例。
SqlSessionFactoryBuilder:
一旦创建了SqlSessionFactory,就不在需要它了
因此,SqlSessionFactoryBuilder 实例的最佳作用域是方法作用域(也就是局部方法变量)
SqlSessionFactory:
相当于数据库连接池
SqlSessionFactory一旦被创建就应该在应用的运行期间一直存在,没有任何理由丢弃它或重新创建另一个实例,因此 SqlSessionFactory 的最佳作用域是应用作用域
,很多方法可以做到,最简单的就是使用单例模式或者静态单例模式。
SqlSession:
连接到连接池的一个请求
SqlSession的实例不是线程安全的
,因此是不能被共享的,所以它的最佳的作用域是请求或方法作用域
,用完之后需要赶紧关闭,否则资源被占用
属性名和字段名不一致的问题:
我们可通过起别名或者使用resultType去解决,前者是我们不推荐的,因此我们这里只说后者的方法:
输出如下:
resultMap元素是mybatis中最重要最强大的元素,resultMap的设计思想是,对于简单的语句根本不需要配置显示的结果映射,而对于复杂一点的语句,只需要描述他们的关系就行了
日志:
日志工厂:如果一个数据库操作,出现了异常,我们需要对其进行排查,日志就是最好的助手
Mybatis 通过使用内置的日志工厂提供日志功能,内置日志工厂将会把日志工作委托给下面的实现之一:
SLF4J
COMMONS——LOGGING
STDOUT——LOGGING[掌握]
Apache Commons Logging
Log4j 2[]掌握
Log4j (3.5.9 起废弃)
JDK logging
在mybatis中具体使用哪个日志,可通过value值进行设置
在要使用Log4j的类中,导入包:
import org.apache.log4j.Logger;
static Logger logger=Logger.getLogger(test.class);
package dao.user;
import org.junit.Test;
import org.apache.log4j.Logger;
public class test {
static Logger logger=Logger.getLogger(test.class);
@Test
public void testLog4j(){
logger.info("info:进入了testLog4j");
logger.debug("debug:进入了testLog4j");
logger.error("error:进入了testLog4j");
}
}
输出:
点开左上角的.log文件: