MyBatis入门案例以及MyBatis的核心组件

1 导包

mybatis jar包的结构(这里是3.3.0的版本)
jar包分为两个部分,mybatis-3.3.0.jar是核心jar包,lib文件夹下的包是依赖包,开发项目的时候,导入jar包,需要把这些jar包都导入进去。
在这里插入图片描述
操作数据库还需要导入数据库的jar包

2 文件结构

在这里插入图片描述
这是项目的目录架构:
RoleMapper的结构:

public interface RoleMapper {
	public Role getRole(Long id);
}

RoleMapper.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.dlj.mapper.RoleMapper">
	<select id="getRole" parameterType="long"
		resultType="role">
		select id,role_name as roelName,note from t_role where id=#{id}
	</select>
</mapper>

Role 的代码:

public class Role {
	private Long id;
	private String roleName;
	private String note;
	//还有get和set方法
	}

MyBatisUtil的代码:

public class MyBatisUtil {
	public static void main(String[] args) {
		String resource = "mybatis-config.xml";
		InputStream in;
		try {
			in = Resources.getResourceAsStream(resource);
			// 创建SqlSessionFactory
			SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(in);
			SqlSession sqlSession = sqlSessionFactory.openSession();
			RoleMapper roleMapper = sqlSession.getMapper(RoleMapper.class);
			Role role = roleMapper.getRole(1L);
			System.out.println(role);
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}

log4j.properties的代码:

# Global logging configuration
log4j.rootLogger=DEBUG, stdout
# Console output...
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n

mybatis-config.xml的代码:这是mybatis的核心配置文件

<?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>
<typeAlias alias="role" type="com.dlj.pojo.Role"/>
</typeAliases>
<!-- 定义数据库信息,默认使用development数据库构建环境,和spring整合后 environments配置将废除-->
	<environments default="development">
		<environment id="development">
			<!-- 使用jdbc事务管理 -->
			<transactionManager type="JDBC" />
			<!-- 数据库连接池 -->
			<dataSource type="POOLED">
				<property name="driver" value="com.mysql.jdbc.Driver" />
				<property name="url"
					value="jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf-8" />
				<property name="username" value="root" />
				<property name="password" value="dre@mtech1012" />
			</dataSource>
		</environment>
	</environments>
	<mappers>
		<mapper resource="com/dlj/mapper/roleMapper.xml"></mapper>
	</mappers>
</configuration>

数据库中表的结构
在这里插入图片描述
通过这些代码就可以实现从数据库中查询用户的数据。

3 基本配置

1 MyBatis的核心组件

SqlSessionFactoryBuilder(构造器)“:它会根据配置信息或者代码来生成SqlSessionFactory(工厂接口)
SqlSessionFactory:依靠工厂来生成SqlSession会话
SqlSession:是一个既可以发送SQL去执行并返回结果,也可以获取Mapper接口。
SqlMapper:它是MyBatis新设计的组件,它是由一个Java接口和XML配置文件(或者注解)构成的,需要给出对应的SQL和映射规则。它负责发送SQL去执行

2 SqlSessionFactory的创建

有两种方式,一种是基于配置文件,还有一种是代码的方式,这里推荐第一种,这样可以避免硬编码。
加载配置文件的时候mybatis是将配置文件加载到Configuration类,全路径为:org.apache.ibatis.session.Configuration,它在MyBatis中将以一个Confiuration类对象的形式存在,这个对象
将存在于整个MyBatis应用的生命周期,我感觉这个和web中servletContext很类似。而且是单例模式,占用空间比较小。在MyBatis中提供了两个SqlSessionFactory的实现类,DefaultSqlSessionFactory和SqlSessionManager。MyBatis目前只使用了DefaultSqlSessionFactory
在这里插入图片描述

3SqlSession

在MyBatis中SqlSession接口的实现类有两个有两个,DefaultSqlSession和SqlSessionManager,SqlSession接口类似于一个JDBC中的Connection接口对象,我们需要保证每次用完正常关闭它。SqlSession的用途,主要有两种:
获取映射器,让映射器通过命名空间和方法名称找到对应的SQL,发送给数据库执行后返回结果。
直接通过命名信息去执行SQL返回结果,这是iBatis版本留下的方式。在SqlSession层我们可以通过update、insert、select、delete等方法,带上SQL的id来操作XML中配置好的SQL,从而完成我们的工作,与此同时它也支持事务,通过commit、rollback方法提交或者回滚事务。

4映射器

映射器由Java接口和XML文件(或注解)共同组成的。作用如下:
定义抽象参数类型
描述缓存
描述SQL语句
定义查询结果和POJO的映射关系

4.1映射器的实现方式

映射器的实现方式有两种:
一种是通过XML配置文件
还有一种是通过代码方式来实现,在Configuration里面注册Mapper接口,建议使用XML文件配置方式
理由如下:
JAVA注解是受限的,功能较少,而MyBatis的Mapper内容相当多,而且很复杂,功能更强大,使用XML文件的方式更加灵活
如果SQL语句很复杂的话,条件很多,尤其是存在动态SQL的时候,写在JAVA文件里面可读性较差,增加了维护成本。

5 生命周期
5.1SqlSessionFactoryBuilder

SqlSessionFactoryBuilder是利用XML或者Java编码获得资源来创建SqlSessionFactory的,通过它可以构建多个SessionFactory,它的作用就是一个构造器,一旦我们创建了SqlSessionFactory,它的作用就已经完结了,失去了存在的意义,这个时候我们就应该丢弃它,将它回收,所以它的生命周期只局限于方法的局部,它的作用就是生成SqlSessionFactory对象。

5.2 SqlSessionFactory

SqlSessionFactory 作用是创建SqlSession ,而SqlSession就是一个会话,相当于JDBC中的Connection对象,每次应用程序需要访问数据库,我们就需要通过SqlSessionFactory创建SqlSession,而如果我们多次创建同一个数据库的SqlSessionFactory,这样很消耗资源,所以应该采用单例模式,创建SqlSessionFactory,即一个数据库只对应一个SqlSessionFactory,管理好数据库资源的分配,避免过多的Connection被消耗.

5.3 SqlSession

SqlSession相当于JDBC的一个Connection对象,它是一个线程不安全的对象,每次创建它的时候都要必须及时关闭,它的长期存在会使数据库连接池的活动资源减少,对系统性能影响很大。

6 Mapper

Mapper是一个接口,没有任何实现类,它的作用是发送SQL,返回我们需要的结果,或者执行SQL从而修改我们的数据。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Master_Yoda

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值