Mybatis (一)入门

Mybatis 是一个连接数据库和我们java项目的持久层框架。
我们常用的连接DB的方式还有:

  • JDBC方式直接连接
    • 优点:快
    • 缺点:需要自己写大量获取连接,维护连接的jdbc相关代码,实现数据库表到对象的转换。而这些东西与我们的业务代码不相关。
  • Hibernate方式连接
    • 优点: hibernate帮我们封装了jdbc相关操作,实现了对象和表之间映射关系,我们只需要进行简单配置即可,大大简化了开发流程
    • 缺点: 当我们需要进行多表join来获取数据时,hibernate实现起来就比较麻烦,而且效率也会降低

Mybatis 就是集JDBC和Hibernate的优点于一体的一个产物

Mybatis 配置

Mybatis的配置文件核心由三部分构成

<?xml version="1.0" encoding="UTF-8" ?>

<!-- part1 -->
<!DOCTYPE configuration
  PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
  "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>

<!--part2 -->
  <environments default="development">
    <environment id="development">
      <transactionManager type="JDBC"/>
      <dataSource type="POOLED">
        <property name="driver" value="${driver}"/>
        <property name="url" value="${url}"/>
        <property name="username" value="${username}"/>
        <property name="password" value="${password}"/>
      </dataSource>
    </environment>
  </environments>

<!-- part3 -->
  <mappers>
    <mapper resource="org/mybatis/example/BlogMapper.xml"/>
  </mappers>

</configuration>

part1: 指定了mybatis的dtd文件路径,这个是必须的,固定写法

Body configuration 由两部分组成

part2: environments,顾名思义配置了我们连接db的信息

  • transactionManager 定义了事务管理方式
  • dataSource 则配置了所要连接的db的详细信息

part3: mapper, 定义了我们可以执行的sql语句,我们可以通过sqlSession来执行它们。
我们通过一个简单的例子来学习一下mapper相关知识

<?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="org.mybatis.example.BlogMapper">
  <select id="selectBlog" resultType="Blog">
    select * from Blog where id = #{id}
  </select>
</mapper>

我们可以通过id来引用定义的sql语句,#{xx} 代表输入参数,其他都是自解释的相信直接可以看懂,不在多解释。
调用方式1:namespace+id 方式

Blog blog = session.selectOne(
  "org.mybatis.example.BlogMapper.selectBlog", 101);
  • 缺点: 需要记住namespace name, string拼写容易出错
    所以这里还有一个更好的,也是我个人推荐用的一个方式:
    定义一个和mapper文件namespace同名的interface,其中的方法名和我们定义的id名相同,返回类型也相同,参数也一样。
    然后我们就可以通过下面这样调用
public Interface BlogMapper{
    Blog selectBlog(int id);
}

BlogMapper mapper = session.getMapper(BlogMapper.class);
Blog blog = mapper.selectBlog(101);

是不是更简单,更酷。

当然这里还有其他配置,我们这里只是列出了最基本,最核心不可缺的几个部分

Mybatis 调用

下面我们介绍如何调用mybatis来读取数据库

//resource 必须是类路径下的,要不会找不到
String resource = "org/mybatis/example/mybatis-config.xml";
//step1
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory =
  new SqlSessionFactoryBuilder().build(inputStream);
//step2
SqlSession sqlSession = sqlSessionFactory.openSession();
//step3
BlogMapper blogMapper = sqlSession.getMapper(BlogMapper.class);
step4
Blog blog = mapper.selectBlog(101);
//step5
sqlSession.close();

So easy.

  • step1: 通过我们的配置文件,获取一个SqlSessionFactory
  • step2: 通过sqlSessionFactory获取一个sqlSession
  • step3: 通过sqlSession获取一个Mapper;
  • step4: 调用mapper的具体方法,执行对应的sql,获取数据
  • step5: 关闭session
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 1. 简介 1.1 什么是 MyBatis ? MyBatis 是支持定制化 SQL、存储过程以及高级映射的优秀的...
    笨鸟慢飞阅读 6,271评论 0 4
  • Java数据持久化之mybatis 一. mybatis简介 1.1 原始的JDBC操作: Java 通过 Jav...
    小Q逛逛阅读 5,432评论 0 16
  • 我所经历的,都是前世的业。这一世是来偿还上辈子欠的业。如果明天将是我的最后一天,我会做什么?为什么每一次谈到我的青...
    如影_d265阅读 226评论 1 0
  • 最近回杭州还是蛮忙碌的,今天抽时间总结一下这两天发生的事情。一回到杭州,就打破了在黄山的良好习惯。不要紧,都是暂时...
    Jango哑炮阅读 266评论 2 0
  • 从人与人之间第一次物物交换开始,就产生了商业世界,从简单的交易到的信用的诞生,从个体间到组织间,人类的发展史...
    Elvis李伟阅读 191评论 1 0

友情链接更多精彩内容