MyBatis特点:
- 开源的优秀持久层框架
- SQL语句与代码分离
- 面向配置的编程
- 良好支持复杂数据映射
- 动态SQL
MyBatis环境搭建:
导包:
- 导入mybatis-3.2.8.jar
- 导入lib中相关jar
- 导入mysql-connector-java-3.0.17-ga-bin.jar
日志配置:通过日志来完成sql语句输出,便于调试
- 加入日志配置文件 log4j.properties
- 改写日志输出级别 log4j.rootLogger=DEBUG, Console
log4j.rootLogger=DEBUG, Console
#Console
log4j.appender.Console=org.apache.log4j.ConsoleAppender
log4j.appender.Console.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工作流程:
- 读取配置文件
- 生成SqlSessionFactory
- 建立SqlSession
- 调用Mybatis提供的API
- 查询MAP配置
- 返回结果
- 关闭SqlSession
配置文件:
因为Mybatis将SQL语句和Java代码分离开,这里就又了两种配置文件。
- 基本配置文件
基本配置文件用于连接数据源,设置map映射文件等
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<!-- 懒加载配置 -->
<settings>
<setting name="lazyLoadingEnabled" value="true"/>
<setting name="aggressiveLazyLoading" value="false"/>
</settings>
<!-- 别名配置 -->
<typeAliases>
<typeAlias type="com.minGW.pojo.Author" alias="Author"></typeAlias>
<typeAlias type="com.minGW.pojo.User" alias="User"></typeAlias>
</typeAliases>
<!-- 连库配置-->
<environments default="development">
<environment id="development">
<transactionManager type="JDBC">
</transactionManager>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/SSHtest"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="com/minGW/map/User.xml"/>
<mapper resource="com/minGW/map/Author.xml"/>
</mappers>
</configuration>
- map配置文件
map配置文件中包含了各种sql语句,下面就是User.xml的map配置文件
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="/">
<select id="findById" parameterType="int" resultType="com.minGW.pojo.User">
select * from User where id=#{id}
</select>
<select id="selectUsers" resultType="User">
SELECT * FROM USER
</select>
</mapper>
SqlSessionFactory和SqlSession:
对于持久层的访问,通常都是通过Session来完成的,所以MyBatis也提供了SqlSessionFactory 会话工厂来让我们实例化SqlSession,从而完成对持久层的访问。
SqlSessionFactory sqlMapper = new SqlSessionFactoryBuilder().build(reader);
//reader 是配置文件的资源路径
SqlSession session = sqlMapper.openSession();
示例:
String resource = "com/minGW/map/MyBatisConfig.xml";
Reader reader = null;
SqlSession session;
try {
reader = Resources.getResourceAsReader(resource);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
SqlSessionFactory sqlMapper = new SqlSessionFactoryBuilder()
.build(reader);
session = sqlMapper.openSession();