内容来源于官网:https://mybatis.org/mybatis-3/zh/configuration.htmlhtml
1、入门简介
简介:MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎全部的 JDBC 代码以及设置参数和获取结果集的工做。java
每一个基于 MyBatis 的应用都是以一个 SqlSessionFactory 的实例为核心的。SqlSessionFactory 的实例能够经过 SqlSessionFactoryBuilder 得到。
而 SqlSessionFactoryBuilder 则能够从 XML 配置文件或一个预先配置的 Configuration 实例来构建出 SqlSessionFactory 实例。mysql说明:工厂模式:工厂类模式提供的快速的建立单个类的模式 ,工厂只负责建立出对象,具体的方法须要你本身去实现。建造者模式:经过传入具体对象 调用了具体定义的方法,建造者负责传递对象和指定对象调用何种方法。sql
导入依赖:数据库
<dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>x.x.x</version> </dependency>
https://my.oschina.net/u/3995...安全
一、从xml中读取配置文件构建链接session
<?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接口了。mybatis
SqlSession正如以前所提到的,SqlSession 在 MyBatis 中是很是强大的一个类。它包含了全部执行语句、提交或回滚事务以及获取映射器实例的方法。app
二、经过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(); } } } }
2、做用域
一、SqlsessionFactoryBuilder : 这个类能够被实例化、使用和丢弃,一旦建立了 SqlSessionFactory,就再也不须要它了。 所以 SqlSessionFactoryBuilder 实例的最佳做用域是方法做用域(也就是局部方法变量)。 你能够重用 SqlSessionFactoryBuilder 来建立多个 SqlSessionFactory 实例,但最好仍是不要一直保留着它,以保证全部的 XML 解析资源能够被释放给更重要的事情。
二、SqlSessionFactory 一旦被建立就应该在应用的运行期间一直存在,重复建立SqlSessionFactory 会很消耗资源。
三、Sqlsession:每一个线程都应该有它本身的 SqlSession 实例。SqlSession 的实例不是线程安全的,所以是不能被共享的,因此它的最佳的做用域是请求或方法做用域。每次使用完后须要关闭。