内容来源于官网:https://mybatis.org/mybatis-3/zh/configuration.html
一、入门简介
简介:MyBatis 是一款优良的长久层框架,它反对自定义 SQL、存储过程以及高级映射。MyBatis 罢黜了简直所有的 JDBC 代码以及设置参数和获取后果集的工作。
每个基于 MyBatis 的利用都是以一个 SqlSessionFactory 的实例为外围的。SqlSessionFactory 的实例能够通过 SqlSessionFactoryBuilder 取得。
而 SqlSessionFactoryBuilder 则能够从 XML 配置文件或一个事后配置的 Configuration 实例来构建出 SqlSessionFactory 实例。阐明:工厂模式:工厂类模式提供的疾速的创立单个类的模式,工厂只负责创立出对象,具体的办法须要你本人去实现。建造者模式:通过传入具体对象 调用了具体定义的办法,建造者负责传递对象和指定对象调用何种办法。
导入依赖:
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>x.x.x</version>
</dependency>
https://my.oschina.net/u/3995…
1、从 xml 中读取配置文件构建连贯
<?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>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="org/mybatis/example/BlogMapper.xml"/>
</mappers>
</configuration>
public class TestMyBatis {public static void main(String[] args) {
try {
// 根本 mybatis 环境
// 1. 定义 mybatis_config 文件地址
String resources = "mybatis_config.xml";
// 2. 获取 InputStreamReaderIo 流
Reader reader = Resources.getResourceAsReader(resources);
// 3. 获取 SqlSessionFactory
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
// 4. 获取 Session
SqlSession sqlSession = sqlSessionFactory.openSession();
// 5. 操作 Mapper 接口
count=sqlSession.selectOne("com.bdqn.dao.TUserMapper.queryCount");
System.out.println(count);
} catch (Exception e) {e.printStackTrace();
}
}
}
读取配置文件,配置文件转化为流,通过 SqlSessionFactoryBuilder 解决传入的配置文件对象,再将解决过后的配置文件对象传给 sqlSessionFactory,配置文件包含数据源和数据库事务 去生成 sqlsession 对象。sqlseesion 对象则可用来操作 mapper 接口了。
SqlSession 正如之前所提到的,SqlSession 在 MyBatis 中是十分弱小的一个类。它蕴含了所有执行语句、提交或回滚事务以及获取映射器实例的办法。
2、通过 java 代码拉连贯
jdbc 创立连贯
public static void main(String[] args) {
Connection connection = null;
PreparedStatement preparedStatement = null;
ResultSet resultSet = null;
try {
// 加载数据库驱动
Class.forName("com.mysql.jdbc.Driver");
// 通过驱动治理类获取数据库链接
connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf-8", "root", "root");
// 定义 sql 语句 ? 示意占位符
String sql = "select * from user where username = ?";
// 获取预处理 statement
preparedStatement = connection.prepareStatement(sql);
// 设置参数,第一个参数为 sql 语句中参数的序号(从 1 开始),第二个参数为设置的参数值
preparedStatement.setString(1, "王五");
// 向数据库收回 sql 执行查问,查问出后果集
resultSet = preparedStatement.executeQuery();
// 遍历查问后果集
while (resultSet.next()) {System.out.println(resultSet.getString("id") + "" + resultSet.getString("username"));
}
} catch (Exception e) {e.printStackTrace();
} finally {
// 开释资源
if (resultSet != null) {
try {resultSet.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();}
}
if (preparedStatement != null) {
try {preparedStatement.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();}
}
if (connection != null) {
try {connection.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();}
}
}
}
二、作用域
1、SqlsessionFactoryBuilder:这个类能够被实例化、应用和抛弃,一旦创立了 SqlSessionFactory,就不再须要它了。因而 SqlSessionFactoryBuilder 实例的最佳作用域是办法作用域(也就是部分办法变量)。你能够重用 SqlSessionFactoryBuilder 来创立多个 SqlSessionFactory 实例,但最好还是不要始终保留着它,以保障所有的 XML 解析资源能够被开释给更重要的事件。
2、SqlSessionFactory 一旦被创立就应该在利用的运行期间始终存在,反复创立 SqlSessionFactory 会很耗费资源。
3、Sqlsession:每个线程都应该有它本人的 SqlSession 实例。SqlSession 的实例不是线程平安的,因而是不能被共享的,所以它的最佳的作用域是申请或办法作用域。每次应用完后须要敞开。