Mybatis-学习笔记(1)SqlSessionFactory、SqlSession、Mybatis配置文件configuration的属性标签
1、mybatis引入项目,只需要引入mybatis-x.x.x.jar包即可。
(当然数据库驱动的引入必不可少)
2、SqlSessionFactory
由SqlSessionFactoryBuilder根据mybatis配置文件创建。
SqlSessionFactory建议使用单例模式。常用的方法是openSession(),用于创建SqlSession。
3、SqlSession
有SqlSessionFactory对象的openSession()方法创建。
SqlSession使用完毕之后,应该及时关闭。提供的常用方法有:





除了一般的调用Mybatis的insert、delete、update、select外,Mybatis官方推荐使用mapper接口的代理对象访问mybatis,该对象关联了SqlSession对象,可以直接通过该对象调用相应的接口方法操作数据库,需要注意的是mapper接口对象的类型必须和之前的XML文件中的mapper的namespace一致,方法名和参数也必须和mapper文件中的语句id、parameterType属性一致。举个例子:
项目目录结构:

log4j2.xml
<?xml version="1.0" encoding="UTF-8"?>
<configuration status="OFF">
<appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
</Console>
</appenders> <loggers>
<logger name="com.lfy.mapping" level="debug" additivity="false">
<appender-ref ref="Console"/>
</logger> <root level="info">
<appender-ref ref="Console"/>
</root>
</loggers>
</configuration>
conf.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> <settings>
<!-- 配置用于控制台输出sql日志。低版本的mybatis不支持logImpl -->
<setting name="logImpl" value="LOG4J2"/>
</settings> <environments default="oracle">
<environment id="oracle">
<!-- 指定事务管理类型,type="JDBC"指直接使用JDBC的提交与回滚 -->
<transactionManager type="JDBC" />
<!-- 配置数据库连接信息 -->
<dataSource type="POOLED">
<property name="driver" value="oracle.jdbc.OracleDriver" />
<property name="url" value="jdbc:oracle:thin:@127.0.0.1:1521:orcl" />
<property name="username" value="scott" />
<property name="password" value="scott" />
</dataSource>
</environment>
</environments> <mappers>
<!-- 注册empMapper.xml文件-->
<mapper resource="com/lfy/mapping/empMapper.xml"/>
</mappers> </configuration>
empMapper.java
package com.lfy.mapping;
import com.lfy.bean.Emp;
public interface empMapper {
Emp getEmpByNo(Integer empno);
}
empMapper.xml
<?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="com.lfy.mapping.empMapper"> <select id="getEmpByNo" parameterType="int" resultType="com.lfy.bean.Emp">
select * from emp where empno=#{empno}
</select>
</mapper>
MybatisTest.java
package com.lfy.main; import java.io.InputStream; import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder; import com.lfy.bean.Emp;
import com.lfy.mapping.empMapper; /**
* 使用log4j-2配置日志
* @author lfy
*
*/
public class MybatisTest { public static void main(String[] args) { String resource = "conf.xml";
//使用类加载器加载mybatis的配置文件(它也加载关联的映射文件)
InputStream is = MybatisTest.class.getClassLoader().getResourceAsStream(resource);
//构建sqlSession的工厂
SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(is);
//构建sqlSession
SqlSession session = sessionFactory.openSession(); empMapper empmapper=session.getMapper(empMapper.class);
Emp emp=empmapper.getEmpByNo(7839);
System.out.println(emp);
} }
运行结果:

我们还可以做一些改动,使用泛型编程:
增加MyBatisUtil.java
package com.lfy.Util; import java.io.InputStream; import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder; public class MyBatisUtil { /**
* 获取SqlSessionFactory
* @return SqlSessionFactory
*/
public static SqlSessionFactory getSqlSessionFactory() {
String resource = "conf.xml";
InputStream is = MyBatisUtil.class.getClassLoader().getResourceAsStream(resource);
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is);
return factory;
} /**
* 获取SqlSession
* @return SqlSession
*/
public static SqlSession getSqlSession() {
return getSqlSessionFactory().openSession();
} /**
* 获取SqlSession
* @param isAutoCommit
* true 表示创建的SqlSession对象在执行完SQL之后会自动提交事务
* false 表示创建的SqlSession对象在执行完SQL之后不会自动提交事务,这时就需要我们手动调用sqlSession.commit()提交事务
* @return SqlSession
*/
public static SqlSession getSqlSession(boolean isAutoCommit) {
return getSqlSessionFactory().openSession(isAutoCommit);
} /**
* 获取对应的mapper接口
* @param clazz
* @return
*/
public static <T> T getMapper(Class<T> clazz){
return getSqlSessionFactory().openSession().getMapper(clazz);
} /**
* 获取对应的mapper接口
* @param clazz mapper接口类型
* @param isAutoCommit
* true 表示创建的SqlSession对象在执行完SQL之后会自动提交事务
* false 表示创建的SqlSession对象在执行完SQL之后不会自动提交事务,这时就需要我们手动调用sqlSession.commit()提交事务
* @return
*/
public static <T> T getMapper(Class<T> clazz,boolean isAutoCommit){
return getSqlSessionFactory().openSession(isAutoCommit).getMapper(clazz);
}
}
MybatisTest.java
package com.lfy.main; import com.lfy.Util.MyBatisUtil;
import com.lfy.bean.Emp;
import com.lfy.mapping.empMapper; /**
* 使用log4j-2配置日志
* @author lfy
*
*/
public class MybatisTest { public static void main(String[] args) { empMapper empmapper=MyBatisUtil.getMapper(empMapper.class);
Emp emp=empmapper.getEmpByNo(7839);
System.out.println(emp);
} }
4、mybatis的配置文件
mybatis初始化的几个步骤:

顶层configuration拥有的配置属性:

节点之间是有先后顺序的:
properties/settings/typeAliases/typeHandlers/objectFactory/objectWrapperFactory/plugins/environments/databaseIdProvider/mappers
1》properties属性:可外部配置可动态替换的。
一种形式:<properties resource="...">
其中的属性可以在整个配置文件中使用来替换需要动态配置的属性值。
举个例子:
db.properties
driver=oracle.jdbc.OracleDriver
url=jdbc:oracle:thin:@127.0.0.1:1521:orcl
username=scott
password=1234
在conf.xml中引入我们的db.properties并使用
<?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> <!-- 引用db.properties配置文件。文件放于classpath下 -->
<properties resource="db.properties"/> <environments default="development">
<environment id="development">
<transactionManager type="JDBC" />
<!-- 配置数据库连接信息 -->
<dataSource type="POOLED">
<!-- value属性值引用db.properties配置文件中配置的值 -->
<property name="driver" value="${driver}" />
<property name="url" value="${url}" />
<property name="username" value="${username}" />
<property name="password" value="${password}" />
</dataSource>
</environment>
</environments> <mappers>
<!-- 注册com.lfy.mapping.EmpMapper映射接口-->
<mapper class="com.lfy.mapping.EmpMapper"/>
</mappers> </configuration>
2》settings设置:影响Mybatis运行时行为。


Mybatis-学习笔记(1)SqlSessionFactory、SqlSession、Mybatis配置文件configuration的属性标签的更多相关文章
- MyBatis学习笔记-1 Idea配置MyBatis
一.创建工程 1.创建Java项目,勾选Java EE,Next,修改名称,Finish 2.在WEB-INF下创建两个文件夹classes和lib,分别用作输出文件目录和库文件目录 3.File-P ...
- MyBatis学习笔记(四)——解决字段名与实体类属性名不相同的冲突
转自孤傲苍狼的博客:http://www.cnblogs.com/xdp-gacl/p/4264425.html 在平时的开发中,我们表中的字段名和表对应实体类的属性名称不一定都是完全相同的,下面来演 ...
- mybatis学习笔记(14)-查询缓存之中的一个级缓存
mybatis学习笔记(14)-查询缓存之中的一个级缓存 标签: mybatis mybatis学习笔记14-查询缓存之中的一个级缓存 查询缓存 一级缓存 一级缓存工作原理 一级缓存測试 一级缓存应用 ...
- Mybatis学习笔记汇总(包括源码和jar包)
博客整理 Mybatis学习笔记(一)--对原生jdbc中问题的总结 Mybatis学习笔记(二)--Mybatis框架 Mybatis学习笔记(三)--入门程序 MyBatis学习笔记(四)--入门 ...
- Mybatis学习笔记导航
Mybatis小白快速入门 简介 本人是一个Java学习者,最近才开始在博客园上分享自己的学习经验,同时帮助那些想要学习的uu们,相关学习视频在小破站的狂神说,狂神真的是我学习到现在觉得最GAN的老师 ...
- Mybatis学习笔记(二) 之实现数据库的增删改查
开发环境搭建 mybatis 的开发环境搭建,选择: eclipse j2ee 版本,mysql 5.1 ,jdk 1.7,mybatis3.2.0.jar包.这些软件工具均可以到各自的官方网站上下载 ...
- MyBatis:学习笔记(1)——基础知识
MyBatis:学习笔记(1)--基础知识 引入MyBatis JDBC编程的问题及解决设想 ☐ 数据库连接使用时创建,不使用时就释放,频繁开启和关闭,造成数据库资源浪费,影响数据库性能. ☐ 使用数 ...
- mybatis学习笔记(五) -- maven+spring+mybatis从零开始搭建整合详细过程(附demo和搭建过程遇到的问题解决方法)
文章介绍结构一览 一.使用maven创建web项目 1.新建maven项目 2.修改jre版本 3.修改Project Facts,生成WebContent文件夾 4.将WebContent下的两个文 ...
- mybatis学习笔记(二)-- 使用mybatisUtil工具类体验基于xml和注解实现
项目结构 基础入门可参考:mybatis学习笔记(一)-- 简单入门(附测试Demo详细过程) 开始体验 1.新建项目,新建类MybatisUtil.java,路径:src/util/Mybatis ...
随机推荐
- Sublime3 配置node.js 环境 The process "node.exe" not found
配置中文显示调试结果 [下载地址](https://github.com/tanepiper/SublimeText-Nodejs) 1. 到上述地址下载压缩文件 2.将文件解压到sublime的插件 ...
- 小程序里的自定义组件:组件的外部样式externalClasses的使用
启用外部样式: 自定义组件: v-tag 在html 引入 在组件写外部样式的css : .ex-tag { background-color: #fffbdd ; } 在组件使用该外部的样式 这个时 ...
- python如何调用c编译好可执行程序
python如何调用c编译好可执行程序 以下总结出几种在Python 中调用 C/C++ 代码的方法 ------------------------------------------- ...
- table表格 td设置固定宽度
table宽度自适应,而且部分TD是固定宽度. 只需要将固定宽设死,留下一列不设置宽度,将table宽度设置为100%. table-layout:fixed 作用不是很清楚 <table wi ...
- 【python】对于程序员来说,2018刑侦科推理试卷是问题么?
最近网上很火的2018刑侦科推理试卷,题目确实很考验人逻辑思维能力. 可是对于程序员来说,这根本不是问题.写个程序用穷举法计算一遍即可,太简单. import itertools class Solu ...
- LeetCode--152--乘积最大子序列(python)
给定一个整数数组 nums ,找出一个序列中乘积最大的连续子序列(该序列至少包含一个数). 示例 1: 输入: [2,3,-2,4]输出: 6解释: 子数组 [2,3] 有最大乘积 6.示例 2: 输 ...
- linux运维、架构之路-Kubernetes集群部署
一.kubernetes介绍 Kubernetes简称K8s,它是一个全新的基于容器技术的分布式架构领先方案.Kubernetes(k8s)是Google开源的容器集群管理系统(谷歌内部 ...
- 在 Postman 中报错:Self-signed SSL certificates are being blocked 的分析与解决
http://www.shuijingwanwq.com/2019/02/18/3171/
- R语言预测实战(第二章--预测方法论)
2.1预测流程 从确定预测主题开始,一次进行数据收集.选择方法.分析规律.建立模型.评估效果直到发布模型. 2.2.1确定主题 (1)指标:表达的是数量特征,预测的结果也通常是通过指标的取值来体现. ...
- websocket 传输数据帧打包 (client端)
/* Vertion: 0.2.1 date: 2015.8.11 content: gcc 编译通过 */ //websocket 传输数据帧打包 client端 //参数:src 为输入字符串 / ...