MyBatis3快速入门教程

本篇文章不介绍ssh的整合,就单独的MyBatis的使用。MyBatis可以用在一个java项目中,而不只是web项目中可以使用,你也可以在android项目中使用MyBatis简化本地数据库的操作。

MyBatis3官方文档:http://www.mybatis.org/mybatis-3/zh/index.html

MyBatis3入门教程

使用maven构造一个简单的web应用(servlet+MyBatis3),介绍使用MyBatis3对数据的增、删、改、查操作,介绍两种操作数据的方法:一种是基于xml映射文件,另一种是使用注解。

开发环境:idea。开发环境根据个人喜好选择,我使用的是破解版的idea 。

项目管理工具:maven

关于idea开发环境下如何使用maven创建web项目可以查看我的历史文章。

MyBatis工作流程

下面列出的mybatis工作流程是我自己的理解,如有错误望指出。

mybatis配置文件配置数据源,如mysql的连接配置;

通过配置文件获取数据库连接配置信息,通过配置信息构建一个SqlSessionFactory;

编写数据表对应的javabean类;

编写mapper映射文件或者使用注解,编写dao接口;

将mapper映射文件注册到mybatis配置文件的mappers标签中;

通过SqlSessionFactory打开一个数据库会话SqlSession;

SqlSession通过getMapper方法获取dao接口;

调用接口中定义的方法执行sql语句获取结果;

如果是增、删、改操作需要提交事务;

执行完成关闭数据库会话SqlSession。

1

创建一个新项目

使用maven创建一个web项目,并创建好项目目录结构。在pom.xml中添加项目所依赖的jar包,这里需要四个jar包:

mybatis-x.x.x.jar:这是使用mybatis的必要的jar包;

mysql-connector-java:mysql的jdbc驱动jar包;

c3p0-x.x.x.x.jar:使用c3p0管理jdbc连接池;

servlet-api.jar:提供servlet的api,编写servlet时要用到 HttpServletRequest和HttpServletResponse 等对象。运行时不需要,因为项目运行在tomcat容器中,tomcat包含了servlet-api.jar;

如何在pom.xml中添加这些依赖?可以在【http://mvnrepository.com/】页面中搜索我们需要的jar包,如搜索mybatis:

在输入框中输入mybatis点搜索按钮,下面会列出搜索结果。

点击搜索结果列表的第一项浏览mybatis的所有版本。

点击版本号(如3.4.6 )就可以获取到该jar包在maven中的依赖配置,选中复制添加到pom.xml文件中即可。

项目的pom.xml配置文件:

pom.xml中还有一个junit的依赖配置,是用于单元测试的,这个不能少,后面每一步都需要编写测试代码来验证程序的正确性。

项目目录结构:

2

mybatis的配置

在resources目录下新建一个jdbc.properties配置文件和一个mybatis-config.xml配置文件。

在jdbc.properties文件中配置mysql连接的必要信息,如驱动名、url、用户名、密码。

mybatis-config.xml文件中配置mybatis的运行环境,配置项已经给出相应的注释。

由于这里我使用的是c3p0管理数据库连接池,所以有必要解释一下数据源dataSource的配置。Mybatis 没有帮开发者实现 c3p0 数据库连接池,所以需要使用者自己实现 c3p0 来加载数据库连接池。 其实很简单,只要继承 UnpooledDataSourceFactory 并把 dataSource 实现,我们的 mybatis 就实现了 c3p0 数据库连接池。

这是我实现UnpooledDataSourceFactory的类:

mybatis-config.xml文件中完成对数据源的配置。

3

编写DBUtils封装SqlSession的获取

DBUtils类的作用是封装SqlSession的获取,不用每次获取SqlSession都要读取一次配置文件获取配置信息再构造SqlSessionFactory再打开一个数据库会话。

之后就可以在需要进行数据读写的地方调用DBUtils.getInstance().getSqlSession()打开获取一个数据库会话SqlSession。

4

创建数据表与javabean

在本地mysql数据库中创建一个名为db_mybatis的数据库,在db_mybatis数据库中创建一张tb_user表和一张tb_blog表。

创建表对应的javabean

User.java

Blog.java

6

基于mapper映射文件方式

创建UserDao,UserDao接口不需要实现,mybatis会自动实现。而我们调用的时候也不需要关心UserDao是如何实现的。需要在mapper映射文件中将mapper标签的命名空间属性设置为该接口的包名+类名,这样就实现了接口与映射文件的对应关系。

在resources目录下新建一个mapper文件夹,用于存放xml映射文件。

为前面创建的UserDao添加映射文件UserMapper.xml,映射文件中我也给每个标签添加了注释。

UserMapper.xml解析:

mapper标签是根标签,其中namespace属性指定对应DAO的类全名(包括包名)。

resultMap:结果映射,指定查询结果中哪个列的值通过反射赋值给bean中对应的哪个属性。resultMap标签在一个mapper中可以配置多个,id属性赋予resultMap的唯一性,type属性指定对应的bean的类名。

select:配置查询语句。

id与DAO接口中定义的方法名必须一致,比如例子中的UserDao中定义了getUserByUsername方法对应mapper映射文件中的id为getUserByUsername的select标签。

getUserByUsername方法还有一个String类型的参数username,需要在select标签中配置参数类型parameterType指定为String,select标签体内编写sql语句,在sql语句中使用到传递进来的参数的地方使用#获取参数值。

resultMap属性指定查询结果使用哪个关系映射。

其它insert、update、delete标签就不做解释了,映射文件中也给了注释。

将UserMapper.xml映射文件注册到mybatis的配置文件中:

业务逻辑层添加UserService接口

实现UserService接口:

在测试类中分别对UserMapper映射文件中的insert、select、update、datete标签配置的sql语句进行测试。

8

使用注解方式

使用注解方式不需要编写mapper映射文件,只需要在dao接口方法使用注解配置要执行sql语句和结果集映射。

下面例子使用到tb_blog表,对应bean为Blog.java,dao接口为BlogDao.java

@Insert、@update、@select、@update注解配置要执行的sql语句。

@results注解配置结果集映射。

将BlogDao注册到mybatis配置文件的mappers标签中,这里与之前不同的是,mapper标签不是使用resource属性指定xml文件路径,而是使用class属性指定dao。

业务逻辑层BlogService接口

实现BlogService接口

测试类中添加对BlogDao的测试

8

最后还有一种不需要编写接口的方法

新建UserMapper2.xml,对UserMapper.xml修改

注册UserMapper2.xml到mybatis配置文件中

在测试类中测试

这篇文章自我感觉写得很差,虽说不排除我表达能力差的理由,但究其原因还是源于不够了解,自我反思中。。。

我已经将这个例子源码上传到github了,可以直接下载代码来看。github链接:https://github.com/wujiuye/MyBatisProject

  • 发表于:
  • 原文链接:https://kuaibao.qq.com/s/20180816G17WZ600?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

同媒体快讯

扫码关注云+社区

领取腾讯云代金券