Mybatis学习笔记 01
来源:互联网 发布:网络电视机顶功能 编辑:程序博客网 时间:2024/05/16 02:33
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架构
- mybatis配置: SqlMapConfig.xml,此文件作为mybatis的全局配置文件,配置了mybatis的运行环境等信息。mapper.xml文件即sql映射文件,文件中配置了操作数据库的sql语句。此文件需要在SqlMapConfig.xml中加载。
- 通过mybatis环境等配置信息构造SqlSessionFactory即会话工厂。
- 由会话工厂创建sqlSession即会话,操作数据库需要通过sqlSession进行。
- mybatis底层自定义了Executor执行器接口操作数据库,Executor接口有两个实现,一个是基本执行器、一个是缓存执行器。
- Mapped Statement也是mybatis一个底层封装对象,它包装了mybatis配置信息及sql映射信息等。mapper.xml文件中一个sql对应一个Mapped Statement对象,sql的id即是Mapped statement的id。
- Mapped Statement对sql执行输入参数进行定义,包括HashMap、基本类型、pojo,Executor通过Mapped Statement在执行sql前将输入的java对象映射至sql中,输入参数映射就是jdbc编程中对preparedStatement设置参数。
- 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 configurationPUBLIC "-//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 mapperPUBLIC "-//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!
- Mybatis学习笔记 01
- MyBatis学习笔记01
- mybatis 学习笔记
- MyBatis学习笔记
- mybatis学习笔记---入门
- MyBatis 学习笔记
- Mybatis学习笔记
- 【MyBatis学习笔记】系列
- Mybatis学习笔记
- mybatis学习笔记
- mybatis学习笔记
- MyBatis 学习笔记
- mybatis学习笔记
- mybatis学习笔记
- MyBatis学习笔记
- mybatis学习笔记
- Mybatis框架学习笔记
- Mybatis学习笔记
- Maven基础(待续)
- JavaScript复习
- 2015年第六届蓝桥杯C/C++程序设计本科B组省赛 星系炸弹(结果填空)
- Leetcode 151. Reverse Words in a String
- 可以播放GIF和显示圆形图片的自定义ImageView
- Mybatis学习笔记 01
- Leetcode 34 - Search for a Range
- Object-C--->Swift之(七)嵌套函数与闭包
- 开年第一篇
- SurfaceView
- 75.Path Sum
- 11g RAC and DG
- [Swift开发实战]- 类型的扩展
- redis集群