Mybatis入門筆記
了解Mybatis——持久层框架
首先了解ibatis = “internet” + “abatis”
java中的对象分为两种:一种叫瞬态,一种叫持久态。前者就是说new了一个对象,然后垃圾回收了,对象中的属性和方法沒有保持住,就是瞬态。那么自然保存住了就交持久态对象。保存点有很多种,比如文件,比如数据库。如果保存在数据库中,就能用JDBC來操作它,於是为了方便,就产生了持久层框架。ibatis这个框架从apache托管到google code就改为了mybatis,然后又转到了Github上了。
mybatis有以下个优点:
- 一个是这个框架比较轻,也就是相对于hibernate,比较简单;
- 再就是它把SQL代码和java代码分离,这种分离的思想是面向配置编程(就是面向切片的编程AOP)的一种体现。使程序的可维护性,可扩展性大大增强;
- 良好的支持复杂数据库映射;
- 动态SQL,由于拼装的SQL语句不是很安全,mybatis框架就使用了动态SQL技术很好的解决这个问题。
Mybatis的jar包下载
Mybatis在Github上的jar包,现在最近的版本是3.4.1:
https://github.com/mybatis/mybatis-3/releases
在工程中需要导入一系列的jar包来进行程序的开发,有如下一些jar包:
日志文件的配置
hibernate中有一种功能叫做SQL语句的输出,用于调试和观察程序。在Mybatis中就是用日志来完成SQL语句输出这样的功能。
- 加入配置文件log4j.properties
- 修改日志输出级别(定义成DEBUG级),日志一定只能在DEBUG级别下才能输出。
日志输出文件标准范例:
log4j.rootLogger=DEBUG, Console
#Console
log4j.appender.Console=org.apache.log4j.ConsoleAppender
log4j.appender.Condole.layout=org.apache.log4j.PatternLayout
log4j.appender.Console.layout.ConversionPattern=%d[%t]%-5p[%c]-%m%n
log4j.logger.java.sql.ResultSet=INFO
log4j.logger.org.apache=INFO
log4j.logger.java.sql.Connection=DEBUG
log4j.logger.java.sql.Statement=DEBUG
log4j.logger.java.sql.preparedStatement=DEBUG
完成了配置
Mybatis的工作流程
用到了配置文件,一种是基本配置文件,一种是map配置文件(映射配置文件),通过配置文件可以建立SqlSessionFactory和SqlSession。
- 先读取基本配置文件,配置链接数据库相关信息
- 有了这些信息就能够生成SqlSessionFactory,用于建立跟数据库之间的会话
- 有了这个工厂之后会建立SqlSession,为了执行sql语句
- 调用Mybatis中提供的API函数,来执行sql语
- sql语句放在另一种配置文件当中叫做MAP配置文件,于是就查询MAP配置文
- 执行完sql语句后,返回结果
- 最后关闭SqlSession
基本配置文件包含连接数据库的信息和map配置文件的位置这两部分信息。SqlSessionFactory的生命周期是程序级的,随着程序的开始和结束而开始结束,因此一般只会有一个SqlSessionFactory。但是SqlSession是过程级的,就是一个方法执行会产生一个SqlSession,方法结束就会退出,也就是一个程序在进行当中可能会建立多个SqlSessin。
SqlSessionFactory sqlMapper = new SqlSessionFactoryBuilder().build(reader);
//reader是一个输入流,就是基本配置文件的路径
SqlSession session = sqlMapper.openSession();
map文件包含的是全部的sql代码,在基本配置文件(mybatisCnfig.xml)中引用,以下都只是例子。
//相对路径引用
<mappers>
<mapper resource="map/sqlcode.xml"/>
</mapprs>
//绝对路径引用
<mapper url="file:///SqlCode.xml"/>
//包路径引用
<package name="com.mybatis.mapper>
sqlcode. xml:
<select id="findById"
parameterType="int" resultTypr="com.Dao.User">
select * from User where id = #{id}
</select>ect>
//#{id}表示参数::
项目创建的过程