mybatis系统学习(二)——使用基础mybatis代替原始jdbc

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS PostgreSQL,集群系列 2核4GB
简介: mybatis系统学习(二)——使用基础mybatis代替原始jdbc 前言 这一篇笔记的内容应当是建立在上一篇的基础之上,不论是使用的数据表,还是对应的实体类,都在上一篇有过说明。 有兴趣的或者对相应内容有疑问的,可移步:http://www.bieryun.com/3561.html 我在学习过程中,历来遵循的原则就是先知其然,然后再根据情况看是否要知其所以然。

mybatis系统学习(二)——使用基础mybatis代替原始jdbc

前言

这一篇笔记的内容应当是建立在上一篇的基础之上,不论是使用的数据表,还是对应的实体类,都在上一篇有过说明。
有兴趣的或者对相应内容有疑问的,可移步:
http://www.bieryun.com/3561.html
我在学习过程中,历来遵循的原则就是先知其然,然后再根据情况看是否要知其所以然。
那么如今,在mybatis的知其然这一块我还没搞定的情况下,自然也是要先从这里下手。
那么,首先要做的,就是怎样使用最精简的mybatis代替最精简的jdbc。
在我看来,只有这种不和其他任何东西交叉的内容,才能使理解更加高效和透彻,才能更好的理解这项技术本身。从而,使其在和其他内容整合时,绕过更多的坑。

mybatis依赖包

在上一篇其实已经说过,使用mybatis并不是就不用jdbc了,实际上不论使用哪个持久层框架,底层都还是要经过jdbc。使用java和数据库打交道(起码关系型数据库),jdbc是必不可少的,区别只在与需不需要自己手动实现。
因此,在我以mysql为数据库做例子时,即便是使用mybatis,依然需要依赖mysql的java驱动包。除此之外,就是还需要mybatis相应的jar包,那么使用maven的依赖配置就是如下这样:

<dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>5.1.38</version>
</dependency>
<dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis</artifactId>
        <version>3.3.0</version>
</dependency>

mybatis数据源配置mybatis.xml

既然说jdbc原始实现交给mybatis管理了,那么很明显的,jdbc必须的源数据,例如驱动、数据库url、用户名、密码,这些我们就必须以某种方式告诉mybatis。
而在单纯的使用mybatis时,常用的方式就是使用mybatis的配置文件指定这些源数据,也称为数据源。
这个配置文件需要遵循一定的格式,那么一个仅包含了jdbc数据源的配置应该如下所示:

<?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>
  <environments default="development">
    <environment id="development">
      <!-- 配置数据源 -->
      <dataSource type="POOLED">
        <property name="driver" value="com.mysql.jdbc.Driver"/>
        <property name="url" value="jdbc:mysql://localhost:3306/test"/>
        <property name="username" value="tuzongxun"/>
        <property name="password" value="123456"/>
      </dataSource>
    </environment>
  </environments>
</configuration>

有了上边的配置,看起来好像就够了,但是实际运行会发现将会抛出异常,并提示“”environment” 的内容不完整,它必须匹配 “(transactionManager,dataSource)”,因此除了dataSource,还需要配置transactionManager,改动之后如下:

<?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>
  <environments default="development">
    <environment id="development">
        <!-- 配置事物管理-->
        <transactionManager type="JDBC"/>
        <!-- 配置数据源 -->
        <dataSource type="POOLED">
        <property name="driver" value="com.mysql.jdbc.Driver"/>
        <property name="url" value="jdbc:mysql://localhost:3306/test"/>
        <property name="username" value="tuzongxun"/>
        <property name="password" value="123456"/>
      </dataSource>
    </environment>
  </environments>
</configuration>

持久层接口

有了上边的配置,当正确调用mybatis的时候,就能够正常连接到mysql,但是却还无法进行具体的数据库操作。
以之前那个jdbc的例子来说,查询user表所有的数据,然后映射到每个user对象中,那么我们这里需要先顶一个持久层的接口类:

public interface UserMapper {
    public List findUsers();
}

接口实现userMapper.XML

接口定义了做什么,具体怎么做就需要相应的实现。从官网来看,也可以选择使用java实现类,但是以我目前看到的情况来说,基本都是使用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="study.tuzongxun.mapper.UserMapper">
  <select id="findUsers" resultType="study.tuzongxun.model.UserModel">
       select * from user
  </select>
</mapper>

上边的配置主要包含两个内容,一个是文件头。如果仔细看的话,会发现这个文件头和上边那个数据源配置的文件头几乎一样,不同的就是把数据源那里文件头中的所有configuration换成mapper,同时注意其中部分位置大小写,这些是固定写法。
第二部分,就是针对接口方法的具体实现。mapper标签对应一个接口类,里边的namespace属性值就是接口类的路径。
在mapper里边定义一个子标签select,对应sql的select查询语句,id属性对应接口方法方法名,resultType指定返回值类型,比如这里就是直接对应userModel类,使得查询结果能直接映射到userModel类的对象中。

数据源和实现关联

有了上边的配置,就把相应的接口类以及接口方法和具体的sql实现联系了起来。
但是如果要在java代码中使用这个接口做事,就还需要使上述配置和具体的数据源联系起来,所以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>
  <environments default="development">
    <environment id="development">
      <!-- 配置事物管理-->
      <transactionManager type="JDBC"/>
      <!-- 配置数据源 -->
      <dataSource type="POOLED">
        <property name="driver" value="com.mysql.jdbc.Driver"/>
        <property name="url" value="jdbc:mysql://localhost:3306/test"/>
        <property name="username" value="tuzongxun"/>
        <property name="password" value="123456"/>
      </dataSource>
    </environment>
  </environments>
  <!-- 配置用以实现持久层接口的实现xml -->
  <mappers>
    <mapper resource="study/tuzongxun/mapper/userMapper.xml"/>
  </mappers>
</configuration>

也就是在之前的基础上,指定对持久层接口实现的xml文件。这样一样,就真这个的把整个数据源和逻辑实现都结合在了一起。
而上边mapper标签加resource属性关联的方式,使用的是文件相对路径的方式,实际上还可以使用下边任意一种方式替代:

<!--文件绝对路径-->
<mapper url="file:///var/mappers/AuthorMapper.xml"/>
<!--指定实现类,直接使用java实现类的方式-->
<mapper class="org.mybatis.builder.AuthorMapper"/>
<!--指定文件所在的包路径(命名空间)-->
<package name="org.mybatis.builder"/>

运行

上边的配置是否正确,就需要用运行来给出答案,这就需要说到mybatis的运行主要步骤,就例如使用原始jdbc有jdbc五步一样。还是先给例子:

public static void main(String[] args) {
try {
InputStream inputStream = Resources.getResourceAsStream("mybatis.xml");
SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
SqlSession sqlSession = sessionFactory.openSession(true);
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
List list = userMapper.findUsers();
for (UserModel user : list) {
System.out.println(user);
}
} catch (IOException e) {
e.printStackTrace();
}
}

上边的例子解释如下:
使用io流加载mybatis配置文件;
使用SqlSessionFactoryBuilder创建一个SqlSessionFactory ,参数就是读取了mybatis参数的流
然后使用SqlSessionFactory 创建SqlSession,设置为自动提交;
再从SqlSession中获取需要的mapper接口;
执行具体的接口方法。

那么,从上边可以看到,调用mybatis实际最重要的就是两步:
创建SqlSessionFactory ;
创建sqlSession 。

创建SqlSessionFactory的时候需要加载mybatis配置文件,创建sqlSession就可以获取需要使用的被mybatis管理的接口。

以上便是最简单的mybatis使用,没有spring和其他东西,其他后续所有一切,都将是在此基础上进一步演进。

原文地址http://www.bieryun.com/3565.html

相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
打赏
0
0
0
0
48
分享
相关文章
Mybatis学习:Mybatis缓存配置
MyBatis缓存配置包括一级缓存(事务级)、二级缓存(应用级)和三级缓存(如Redis,跨JVM)。一级缓存自动启用,二级缓存需在`mybatis-config.xml`中开启并配置映射文件或注解。集成Redis缓存时,需添加依赖、配置Redis参数并在映射文件中指定缓存类型。适用于查询为主的场景,减少增删改操作,适合单表操作且表间关联较少的业务。
SpringBoot 整合jdbc和mybatis
本文详细介绍了如何在SpringBoot项目中整合JDBC与MyBatis,并提供了具体的配置步骤和示例代码。首先,通过创建用户实体类和数据库表来准备基础环境;接着,配置Maven依赖、数据库连接及属性;最后,分别展示了JDBC与MyBatis的集成方法及其基本操作,包括增删查改等功能的实现。适合初学者快速入门。
192 3
SpringBoot 整合jdbc和mybatis
springboot学习五:springboot整合Mybatis 连接 mysql数据库
这篇文章是关于如何使用Spring Boot整合MyBatis来连接MySQL数据库,并进行基本的增删改查操作的教程。
1137 0
springboot学习五:springboot整合Mybatis 连接 mysql数据库
原生JDBC简单实现Mybatis核心功能
本文介绍了在Vertx项目中使用Tdengine时,因缺乏异步JDBC驱动而采用同步驱动结合`vertx.executeBlocking`实现异步查询的方法。文中详细描述了自行开发的一个简易JDBC工具,该工具实现了SQL参数绑定与返回值映射至实体类的功能,简化了原生JDBC的繁琐操作。通过具体示例展示了其实现过程及代码细节,并与原生JDBC进行了对比,突显了其便捷性和实用性。
102 5
mybatis-plus学习
MyBatis-Plus ,MyBatis 最佳搭档,只做增强不做改变,为简化开发、提高效率而生。
84 5
JDBC存在什么问题?MyBatis是如何解决的?
本文详细探讨了JDBC(Java Database Connectivity)在实际应用中存在的问题,如代码繁琐、资源管理困难、SQL语句硬编码、缺乏对象映射及事务管理和缓存支持不足等。JDBC的核心组件包括`DriverManager`、`Connection`、`Statement`、`ResultSet`和`SQLException`。为了解决这些问题,文章介绍了MyBatis框架的优势,如简化代码编写、自动资源管理、SQL与代码分离、支持对象关系映射(ORM)、简化事务管理和内置缓存机制。通过具体示例展示了MyBatis如何优化数据库操作。理解JDBC的原理有助于更好地掌握ORM框架。
73 0
基于SpringBoot+Vue+Redis+Mybatis的商城购物系统 【系统实现+系统源码+答辩PPT】
这篇文章介绍了一个基于SpringBoot+Vue+Redis+Mybatis技术栈开发的商城购物系统,包括系统功能、页面展示、前后端项目结构和核心代码,以及如何获取系统源码和答辩PPT的方法。
基于SpringBoot+MyBatis的餐饮点餐系统
本文介绍了一个基于SpringBoot和MyBatis开发的餐饮点餐系统,包括系统的主控制器`IndexController`的代码实现,该控制器负责处理首页、点餐、登录、注册、订单管理等功能,适用于毕业设计项目。
94 0
基于SpringBoot+MyBatis的餐饮点餐系统
后端框架的学习----mybatis框架(5、分页)
这篇文章介绍了如何在MyBatis框架中实现分页功能,包括使用SQL的`limit`语句进行分页和利用MyBatis的`RowBounds`对象进行分页的方法。
后端框架的学习----mybatis框架(7、使用注解开发)
这篇文章讲述了如何使用MyBatis框架的注解方式进行开发,包括在接口上使用注解定义SQL语句,并通过动态代理实现对数据库的增删改查操作,同时强调了接口需要在核心配置文件中注册绑定。

热门文章

最新文章