Mybatis框架

MyBatis 的前身是 Apache 的开源项目 iBatis。MyBatis 几乎可以代替 JDBC,是一个支持普通 SQL 查询,存储过程和高级映射的基于 Java 的优秀持久层框架。

MyBatis 与 JDBC 相比,减少了 50% 以上的代码量。并且满足高并发和高响应的要求,所以它成为最流行的 Java 互联网持久框架。
Mybatis框架工作原理:
(1).读取 MyBatis 配置文件:MyBatis 的全局配置文件,配置了 MyBatis 的运行环境等信息,例如数据库连接信息。
(2)加载映射文件。映射文件即 SQL 映射文件,该文件中配置了操作数据库的 SQL 语句,需要在 MyBatis 配置文件中加载。MyBatis 配置文件可以加载多个映射文件,每个文件对应数据库中的一张表。

(3)构造会话工厂:通过 MyBatis 的环境等配置信息构建会话工厂 SqlSessionFactory。
创建会话对象:由会话工厂创建 SqlSession 对象,该对象中包含了执行 SQL 语句的所有方法。

(5)Executor 执行器:MyBatis 底层定义了一个 Executor 接口来操作数据库,它将根据 SqlSession 传递的参数动态地生成需要执行的 SQL 语句,同时负责查询缓存的维护。

(6)MappedStatement 对象:在 Executor 接口的执行方法中有一个 MappedStatement 类型的参数,该参数是对映射信息的封装,用于存储要映射的 SQL 语句的 id、参数等信息。

(7)输入参数映射:输入参数类型可以是 Map、List 等集合类型,也可以是基本数据类型和 POJO 类型。输入参数映射过程类似于 JDBC 对 preparedStatement 对象设置参数的过程。

(8)输出结果映射:输出结果类型可以是 Map、 List 等集合类型,也可以是基本数据类型和 POJO 类型。输出结果映射过程类似于 JDBC 对结果集的解析过程。
使用 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="cn.pojo"/>
</typeAliases>
	<!-- 配置数据源,事务 -->
	<environments default="deploy">
		<environment id="deploy">
			<!-- 事务:JDBC/MANAGED-自己管理去 -->
			<transactionManager type="JDBC" />
			<!-- 数据源:POOLED/UNPOOLED/JNDI -->
			<dataSource type="POOLED">
				<property name="driver" value="com.mysql.jdbc.Driver" />
				<property name="url" value="jdbc:mysql://localhost:3306/smbms" />
				<property name="username" value="root" />
				<property name="password" value="root" />
			</dataSource>
		</environment>
	</environments>
	<mappers>
	<!-- mapper.xml文件地址
	cn/mapper/NewsCategoryMapper.xml-->
		<mapper resource="cn/mapper/SmbmsUserMapper.xml" />
	</mappers>
</configuration>

我们描述一下 MyBatis 的基础配置文件:
元素定义了一个别名 user,它代表着 com.mybatis.po.User 这个类。这样定义后,在 MyBatis 上下文中就可以使用别名去代替全限定名了。
元素的定义,这里描述的是数据库。它里面的 元素是配置事务管理器,这里采用的是 MyBatis 的 JDBC 管理器方式。
元素配置数据库,其中属性 type=“POOLED” 代表采用 MyBatis 内部提供的连接池方式,最后定义一些关于 JDBC 的属性信息。
元素代表引入的那些映射器,在谈到映射器时会详细讨论它。
有了基础配置文件,就可以用一段很简短的代码来生成 SqlSessionFactory 了,如下所示。

public static SqlSession getSqlSession() {
		SqlSession sqlSession = null;
		try {
			InputStream inStream = Resources
					.getResourceAsStream("sqlMapConfig.xml");   //读取sqlMapConfig.xml文件
			SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder()
					.build(inStream);   // 创建sqlSessionFactory工厂
			sqlSession = sqlSessionFactory.openSession();//获得sqlSession
			inStream.close();   	//关资源
		} catch (IOException e) {
			e.printStackTrace();
		}
		return sqlSession;
	}
	public static void closeSqlSession(SqlSession sqlSession) {
		sqlSession.close();
	}	

创建一个表的实体类和对该表进行操作的接口


package cn.pojo;

import java.util.Date;

public class SmbmsRole {
    private Long id;
    private String rolecode;
    private String rolename;
    private Long createdby;
    private Date creationdate;
    private Long modifyby;
    private Date modifydate;
    public SmbmsRole() {
		super();
	}

	public SmbmsRole(Long id, String rolecode, String rolename, Long createdby,
			Date creationdate, Long modifyby, Date modifydate) {
		super();
		this.id = id;
		this.rolecode = rolecode;
		this.rolename = rolename;
		this.createdby = createdby;
		this.creationdate = creationdate;
		this.modifyby = modifyby;
		this.modifydate = modifydate;
	}
	.................实体类中的set  get方法
	public interface SmbmsRoleMapper {
   	public List<SmbmsRole> queryAll();
}

创建一个Mapper.XML文件


<mapper namespace="cn.mapper.SmbmsRoleMapper" >
 	<select id="queryAll" resultType="SmbmsRole">
 		select * from smbms_role
 	</select>
</mapper>

创建接口实现类

public class SmbmsRoleMapperImpl implements SmbmsRoleMapper {
	@Override
	public List<SmbmsRole> queryAll() {
		SqlSession sqlSession= MyBatisUtil.getSqlSession();
		List<SmbmsUser> lists = sqlSession.getMapper(SmbmsRoleMapper.class).queryAll();
		MyBatisUtil.closeSqlSession(sqlSession);
		return lists;
	}
测试代码
public static void main(String[] args) {
	SmbmsRoleMapper sum = new SmbmsRoleMapperImpl();
	List<SmbmsRole> lists = sum.queryAll();
	for (SmbmsRole smbmsRole : lists) {
		System.out.println(smbmsRole.getRolename());
	}
}
```
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值