Mybatis学习笔记 01

1.Mybatis简介

MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis,实质上Mybatis对ibatis进行一些改进。MyBatis是一个优秀的持久层框架,它对jdbc的操作数据库的过程进行封装,使开发者只需要关注 SQL 本身,而不需要花费精力去处理例如注册驱动、创建connection、创建statement、手动设置参数、结果集检索等jdbc繁杂的过程代码。
  Mybatis通过xml或注解的方式将要执行的各种statement(statement、preparedStatemnt、CallableStatement)配置起来,并通过java对象和statement中的sql进行映射生成最终执行的sql语句,最后由mybatis框架执行sql并将结果映射成java对象并返回。
##2.Mybatis架构##
这里写图片描述

  1. mybatis配置: SqlMapConfig.xml,此文件作为mybatis的全局配置文件,配置了mybatis的运行环境等信息。mapper.xml文件即sql映射文件,文件中配置了操作数据库的sql语句。此文件需要在SqlMapConfig.xml中加载。
  2. 通过mybatis环境等配置信息构造SqlSessionFactory即会话工厂。
  3. 由会话工厂创建sqlSession即会话,操作数据库需要通过sqlSession进行。
  4. mybatis底层自定义了Executor执行器接口操作数据库,Executor接口有两个实现,一个是基本执行器、一个是缓存执行器。
  5. Mapped Statement也是mybatis一个底层封装对象,它包装了mybatis配置信息及sql映射信息等。mapper.xml文件中一个sql对应一个Mapped Statement对象,sql的id即是Mapped statement的id。
  6. Mapped Statement对sql执行输入参数进行定义,包括HashMap、基本类型、pojo,Executor通过Mapped Statement在执行sql前将输入的java对象映射至sql中,输入参数映射就是jdbc编程中对preparedStatement设置参数。
  7. Mapped Statement对sql执行输出结果进行定义,包括HashMap、基本类型、pojo,Executor通过Mapped Statement在执行sql后将输出结果映射至java对象中,输出结果映射过程相当于jdbc编程中对结果的解析处理过程。

3.环境搭建

从https://github.com/mybatis/mybatis-3/releases下载mybatis3的核心包。解压后的目录结构如下图:
  这里写图片描述
其中:lib文件夹是mybatis的依赖包,mybatis-3.3.0.jar是mybatis的核心包。打开eclipse,将以上jar包加入到工程中。同时,我们开发中使用mysql数据库,还需要mysql数据库的链接驱动。如下图:
这里写图片描述
配置文件都放在config目录下。其中SQLMapConfig.xml和User.xml都可以通过刚才下载的mybatis包下的mybatis-3.3.0.pdf文件来构建。下面我来来写第一个mybatis示例代码。

4.第一个示例代码

这个例子,我们来简单认识一下mybatis,认识一下mybatis的核心配置文件怎么配置,认识一下映射文件怎么配置,以及如何从数据库中查询数据。先在mysql中建一个如下图结构的表:
这里写图片描述
  第二步,配置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>
	<!-- 和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="123456" />
			</dataSource>
		</environment>
	</environments>
	
</configuration>

第三步,编写User类,代码如下:

	public class User {
		private int id;
		private String username;
		private String sex;
		private Date birthday;
		private String address;
		//省略getter/setter
	}	

第四步,编写User类的映射文件User.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">

<!-- namespace命名空间,作用就是对sql进行分类化管理,理解sql隔离 
使用时,用namespace + . + sql_id。
注意:使用mapper代理方法开发,namespace有特殊重要的作用
-->
<mapper namespace="test">

	<!-- 在 映射文件中配置很多sql语句 -->
	<!-- 需求:通过id查询用户表的记录 -->
	<!-- 通过 select执行数据库查询
	id:标识 映射文件中的 sql
	将sql语句封装到mappedStatement对象中,所以将id称为statement的id
	parameterType:指定输入 参数的类型,这里指定int型 
	#{}表示一个占位符号
	#{id}:其中的id表示接收输入 的参数,参数名称就是id,如果输入 参数是简单类型,#{}中的参数名可以任意,可以value或其它名称
	
	resultType:指定sql输出结果 的所映射的java对象类型,select指定resultType表示将单条记录映射成的java对象。
	 -->
	<select id="findUserById" parameterType="int" resultType="com.jackie.mybatis.domain.User">
		SELECT * FROM USER WHERE id=#{value}
	</select>
	
</mapper>

第五步、编写代码,构建SqlSessionFactory,获取SqlSession,操作数据库。代码如下:

public void findUserByIdTest() throws IOException {
	// mybatis配置文件
	String resource = "SqlMapConfig.xml";
	// 得到配置文件流
	InputStream inputStream = Resources.getResourceAsStream(resource);
	// 创建会话工厂,传入mybatis的配置文件信息
	SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

	// 通过工厂得到SqlSession
	SqlSession sqlSession = qlSessionFactory.openSession();

	// 通过SqlSession操作数据库
	// 第一个参数:映射文件中statement的id,等于=namespace+"."+statement的id
	// 第二个参数:指定和映射文件中所匹配的parameterType类型的参数
	// sqlSession.selectOne结果 是与映射文件中所匹配的resultType类型的对象
	// selectOne查询出一条记录
	User user = sqlSession.selectOne("test.findUserById", 1);

	System.out.println(user);

		// 释放资源
		sqlSession.close();

	}

可以看出,改代码还需要优化,比如异常的处理、SQLSession的获取等等,但是作为mybatis的第一个示例程序,我们已经完成了,代码优化不是我们的主题。下面可以运行一下程序,可以看出,我们已经成功的运行了第一个mybatis操作数据库的代码。如下图:
这里写图片描述
ok,try it yourself!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值