大家好,又见面了,我是你们的朋友全栈君。
MyBatis的核心组件
MyBatis的核心组件分为4个部分:
- SqlSessionFactoryBuilder(构造器):它会根据配置或者代码来生成SqlSessionFactory,采用的是分布构建的Builder模式。
- SqlSessionFactory(工厂接口):依靠它来生成SqlSession,使用的是工厂模式。
- SqlSession(会话):一个既可以发送SQL执行返回结果,也可以获取Mapper的接口。在现有的技术中,一般我们会让其在业务逻辑代码中“消失”,而使用的是MyBatis提供的SQL Mapper接口编程技术,它能提高代码的可读性和可维护性。
- SQL Mapper(映射器):MyBatis新设计存在的组件,它由一个Java接口和XML文件(或注解)构成,需要给出对应的SQL和映射规则。它负责发送SQL去执行,并返回结果。
SqlSessionFactory
使用MyBatis首先是使用配置或者代码去生产SqlSessionFactory,而MyBatis提供了构造器SqlSessionFactoryBuilder。它提供了一个类org.apache.ibatis.session.Configuration作为引导,采用的是Builder模式。
在MyBatis中,既可以通过读取配置的XML文件的形式生成SqlSessionFactory,也可以通过Java代码的形式去生成SqlSessionFactory。每个基于MyBatis的应用都是以一个SqlSessionFactory的实例为中心的,而SqlSessionFactory唯一的作用就是生产MyBatis的核心接口对象SqlSession,所以它的责任是唯一的,我们往往可以通过单例模式处理它。下面为两种方式创建SqlSessionFactory的代码。
使用XML构建SqlSessionFactory
<?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>
<!-- 设置别名 -->
<typeAliases>
<package name="com.etc.ssm.entity"/>
</typeAliases>
<!-- 加载数据库属性文件 -->
<properties resource="db.properties"></properties>
<environments default="development">
<environment id="development">
<!--使用JDBC实务管理-->
<transactionManager type="JDBC"></transactionManager>
<!--连接池 POOLED为连接池方式 -->
<dataSource type="POOLED">
<property name="driver" value="${jdbc.driver}"></property>
<property name="url" value="${jdbc.url}"></property>
<property name="username" value="${jdbc.username}" />
<property name="password" value="${jdbc.password}" />
</dataSource>
</environment>
</environments>
<!-- 引入映射文件 -->
<mappers>
<mapper resource="com.etc.ssm.mapper.UserMapper.xml"/>
</mappers>
</configuration>
typeAliase节点:定义一个别名,代表com.etc.ssm.entity包下所有的类在MyBatis上下文中可以使用别名去代替全限定名。
properties节点:可以引入指定目录下的配置文件。
environments节点:描述的是数据库,其中transactionManager节点是配置事务管理器,采用MyBatis中JDBC的管理器方式,采用dataSource节点配置数据库,POOLED表示采用MyBatis内部提供的连接池方式。
mappers节点:引入映射器。
@Test
public void testXmlSqlSessionFactory() {
SqlSessionFactory sqlSessionFactory = null;
String resource = "sqlMapConfig.xml";
InputStream inputStream;
try {
inputStream = Resource.getResourceAsStream(resource);
} catch (Exception e) {
e.printStackTrace();
}
}
使用代码创建SqlSessionFactory
这种方法创建SqlSessionFactory不推荐使用。
//数据库连接池信息
PooledDataSource dataSource=new PooledDataSource();
dataSource.setDriver("com.mysql.jdbc.Driver");
dataSource.setUsername("root");
dataSource.setPassword("123456");
dataSource.setUrl("jdbc:mysql://localhost:3306/ssm");
dataSource.setDefaultAutoCommit(false);
//采用MyBatis的JDBC事务方式
TransactionFactory transactionFactory =new JdbcTransactionFactory();
Environment environment=new Environment("development",transactionFactory,
dataSource);
/创建 Configuration对象
Configuration configuration=new Configuration(environment);
//注册一个MyBatis上下文别名
configuration.getTypeAliasRegistry().registerAlias("user",User.class);
//加入一个映射器
configuration.addMapper(UserMapper.class);
//使用 SqlSessionFactoryBuilder 构建SqlSessionFactory
SqlSessionFactory SqlSessionFactory=
new SqlSessionFactoryBuilder().,build(configuration);
return SqlSessionFactory;
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/142790.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...