千家信息网

mybatis学习总结-mybatis初体验

发表于:2025-11-07 作者:千家信息网编辑
千家信息网最后更新 2025年11月07日,从开始工作到现在,用到的ORM框架都是Hibernate,听说过ibatis,但是一直为看过具体的用法。前段时间面试的时候,发现好几个公司都问会不会ibatis,所以最近几天对其进行了一下学习,然后在
千家信息网最后更新 2025年11月07日mybatis学习总结-mybatis初体验

从开始工作到现在,用到的ORM框架都是Hibernate,听说过ibatis,但是一直为看过具体的用法。

前段时间面试的时候,发现好几个公司都问会不会ibatis,所以最近几天对其进行了一下学习,然后在我的博客里总结一下

这篇总结是对ibatis的入门,说明一些ibatis的基本应用,还有平时我们可以用ibatis来干什么。


iBATIS一词来源于"internet"和"abatis"的组合,是一个由Clinton Begin在2002年发起的开放源代码项目。于2010年6月16号被谷歌托管,改名为MyBatis。是一个基于SQL映射支持Java和·NET的持久层框架。

以上内容来源于百度百科。因为ibatis已经改名为mybatis,后面我就统一叫mybatis


和hibernate一样,mybatis是一个ORM框架,对我们的数据库操作进行了封装,提高了开发效率。

通过学习我了解到:mybatis只是一个半自动化的ORM实现,需要我们自己写sql,而不像hibernate那样,直接定义好实体与数据表的映射就行。


下面我们来通过示例,进行mybatis的初体验


1.获取mybatis

跟其他开源框架一样,我们需要下载对应的jar包后才能使用

2.准备工作

1)打开我的eclipse,创建一个java web项目。我这里取名叫mybatis

2)解压下载好的mybatis-3.2.7.zip,找到里面的mybatis-3.2.7.jar,加入build path中

3)可能还需要的jar包,在lib目录下:asm-3.3.1.jar、cglib-2.2.2.jar,一并加到build path中,如果过程中还需要其他jar包,再另行加入

4)因为mybatis是ORM框架,所以少不了数据库,我这里用的是Oracle 10g,添加oracle驱动到build path


3.准备数据

还是因为要用mybatis,我准备了几张表,表里插入数据

create table t_user (id number(10) primary key,name varchar2(100),org_id number(10));insert into t_user (id,name,org_id) values (1,'张三',1);insert into t_user (id,name,org_id) values (2,'李四',1);insert into t_user (id,name,org_id) values (3,'王五',2);insert into t_user (id,name,org_id) values (4,'赵六',2);insert into t_user (id,name,org_id) values (5,'钱七',3);create table t_role (id number(10) primary key,name varchar2(100));insert into t_role (id,name) values (1,'总裁');insert into t_role (id,name) values (2,'副总裁');insert into t_role (id,name) values (3,'总经理');insert into t_role (id,name) values (4,'项目经理');create table t_user_role(user_id number(10),role_id number(10));insert into t_user_role(user_id,role_id) values(1,1);insert into t_user_role(user_id,role_id) values(2,2);insert into t_user_role(user_id,role_id) values(3,3);insert into t_user_role(user_id,role_id) values(4,4);insert into t_user_role(user_id,role_id) values(5,4);create table t_org(id number(10) primary key,name varchar2(100));insert into t_org(id,name) values(1,'无线处');insert into t_org(id,name) values(2,'有线处');insert into t_org(id,name) values(3,'通用处');


4.mybatis最简单实例

下面来完成一个mybatis最简单的实例

hibernate有一个核心配置叫hibernate.cfg.xml,而mybatis的核心配置名称我这里取名叫mybatis-config.xml

来完成一个最基本的mybatis-config.xml的配置:

                                                                                                                                                                                                

environments元素下配置了事务的管理、连接池的设定,

mappers元素下,配置了我们的映射文件路径。

从核心配置中我们看到需要配置一个映射文件,在配置映射文件之前,根据我们建的表,来创建对应的pojo模型

User.java

package com.yu.model;public class User {        private Long id;        private String name;                private Org org;                public Long getId() {                return id;        }        public void setId(Long id) {                this.id = id;        }        public String getName() {                return name;        }        public void setName(String name) {                this.name = name;        }        public Org getOrg() {                return org;        }        public void setOrg(Org org) {                this.org = org;        }                }

Org.java

package com.yu.model;import java.util.ArrayList;import java.util.List;public class Org {        private Long id;        private String name;                private List users = new ArrayList();        public Long getId() {                return id;        }        public void setId(Long id) {                this.id = id;        }        public String getName() {                return name;        }        public void setName(String name) {                this.name = name;        }        public List getUsers() {                return users;        }        public void setUsers(List users) {                this.users = users;        }        }

Role.java

package com.yu.model;public class Role {        private Long id;        private String name;        public Long getId() {                return id;        }        public void setId(Long id) {                this.id = id;        }        public String getName() {                return name;        }        public void setName(String name) {                this.name = name;        }}

配置UserMapper.xml

                                                insert into t_user(id,name) values(#{id},#{name})                      update t_user set name = #{name} where id = ${id}                 delete t_user where id = #{id}    

从配置中可以看到,我们配置了常用的增、删、改、查、条件查、模糊查等操作。


5.让mybatis运行起来

将主要的配置配好以后,我们就来看看,怎么用我们的java程序来对mybatis进行操作。

首先回顾一下hibernate中操作数据库的流程:

1)读取配置

2)获取SessionFactory(重量级,只有一个)

3)获取session

4)开启事务

5)进行CRUD操作

6)提交事务

7)关闭session


在我们的mybatis中,也有类似的步骤:

1)获取SqlSessionFactory

2)获取SqlSession

3)进行CURD操作

4)提交事务

5)关闭SqlSession


首先我们来看怎么获取SqlSessionFactory
每 一 个 MyBatis 的 应 用 程 序 都 以 一 个 SqlSessionFactory 对 象 的 实 例 为 核 心 。 SqlSessionFactory 对 象 的 实 例 可 以 通 过 SqlSessionFactoryBuilder 对 象 来 获 得 。 SqlSessionFactoryBuilder 对象可以从 XML 配置文件,或从 Configuration 类的习惯准备的实 例中构建 SqlSessionFactory 对象。

引用自官方文档的一句话。说明获取SqlSessionFactory有两种方式,第一种为通过我们的核心配置XML,第二种为通过Configuration类


通过核心配置XML方式

Reader reader = Resources.getResourceAsReader("ibatis-config.xml");SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(reader);

通过Configuration方式(其实就是将XML配置转化为对应的对象)

DataSource dataSource = ...TransactionFactory transactionFactory = new JdbcTransactionFactory();Environment environment = new Environment("development", transactionFactory, dataSource);Configuration configuration = new Configuration(environment);configuration.addMapper(BlogMapper.class);SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(configuration);
获取SqlSession
SqlSession sqlSession = factory.openSession();
工具类添加

因为我们的系统里只以一个SqlSessionFactory对象为核心,所以可以通过一个工具类来获取SqlSessionFactory、SqlSession。方便程序操作。

package com.yu.util;import java.io.IOException;import java.io.Reader;import org.apache.ibatis.io.Resources;import org.apache.ibatis.session.SqlSession;import org.apache.ibatis.session.SqlSessionFactory;import org.apache.ibatis.session.SqlSessionFactoryBuilder;/** * mybatis工具类 * @author yu * */public class SqlSessionFactoryUtil {        private static String XML_PATH = "mybatis-config.xml";        private static SqlSessionFactory factory;                static{                Reader r = null;                try {                        r = Resources.getResourceAsReader(XML_PATH);                        factory = new SqlSessionFactoryBuilder().build(r);                } catch (IOException e) {                        e.printStackTrace();                }        }                /**         * 获取应用中的SqlSessionFactory         * @return SqlSessionFactory         */        public static SqlSessionFactory getSqlSessionFactory(){                return factory;        }                /**         * 获取应用中的SqlSession         * @return SqlSession         */        public static SqlSession getSqlSession(){                return factory.openSession();        }                /**         * 关闭SqlSession         * @param session         */        public static void closeSqlSession(SqlSession session){                if(session != null){                        session.close();                }        }}
测试代码

前面一大堆铺垫,现在终于可以运行了,我写了个测试类,用JUnit的方式,来对mybatis的CRUD操作进行测试。

package com.yu.test;import java.util.List;import org.apache.ibatis.session.SqlSession;import org.junit.After;import org.junit.Before;import org.junit.Test;import com.yu.model.User;import com.yu.util.SqlSessionFactoryUtil;public class MyTest {                public SqlSession session;                @Before        public void getSqlSession(){                session = SqlSessionFactoryUtil.getSqlSession();        }                @After        public void closeSqlSession(){                SqlSessionFactoryUtil.closeSqlSession(session);        }                @Test        public void queryUser(){                List users = session.selectList("UserMapper.queryUser");                for(User u : users){                        System.out.println(u.getId()+" "+u.getName());                }        }                @Test        public void findUserById(){                Long id = 1L;                User user = session.selectOne("UserMapper.findUserById",id);                if(user!=null){                        System.out.println(user.getId()+" "+user.getName());                }        }                @Test        public void findUserByName(){                String name = "an";                List users = session.selectList("UserMapper.findUserByName",name);                for(User u : users){                        System.out.println(u.getId()+" "+u.getName());                }        }                @Test        public void addUser(){                User user = new User();                user.setId(10L);                user.setName("王麻子");                session.insert("UserMapper.addUser", user);                session.commit();        }                @Test        public void updateUser(){                User user = new User();                user.setId(10L);                user.setName("王麻子111");                session.insert("UserMapper.updateUser", user);                session.commit();        }                @Test        public void deleteUser(){                Long id = 10L;                session.delete("UserMapper.deleteUser",id);                session.commit();        }}

执行完以后,可以通过查看数据库的方式来验证数据是否正确。


6.其他问题

上述示例,从核心配置文件,到映射文件,到获取SqlSessionFactory,到获取SqlSession,到java API操作,再到测试验证,完成了对Mybatis的基本操作。

当然这只是最基本的用法。

比如这里的核心配置可已配置返回类型的简称

比如这里的映射文件中resultType的设置

比如这里的java操作,还可以改为通过Mapper接口的操作

比如这里的映射配置,还可以改为在Mapper接口中通过注解的方式实现

再比如mybatis的动态sql、类型转换、拦截器等等

源码来源:×××/technology

配置 数据 核心 文件 方式 框架 事务 对象 数据库 准备 测试 工具 来源 项目 应用 学习 元素 只是 可以通过 实例 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 无锡软件开发技术学院是几本 试何 网络安全周 南阳市亿网络技术有限公司 计算机网络技术的地域分析 数据库工作原理讲解视频 一元购app软件开发 中兴软件开发岗薪资怎样 山东跳跳互联网科技有限公司 南开100题三级数据库 安全狗服云需要安装服务器吗 东城区网络技术信息哪个好 江苏前端软件开发哪家便宜 服务器电源a级产品是什么意思 电子厂从事软件开发 软件开发人员情况说明 网络安全行业与金融软件哪个好 大学生网络安全意识现状分析 成都哈纳斯互联网科技公司图片 萍乡模板系统软件开发 数据库设计用表 数据库字段长度是字节还是位 华为服务器如何设置光盘启动 数据库中计算重修费用公式 什么是网络安全大学 默纳克没有服务器如何清理故障 信息网络安全教育和培训制度 网络安全市场客户数量 考研小作文模板数据库 香港恒生互联网科技业指数 校园网络安全教育案例
0