本篇文章不介绍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
领取专属 10元无门槛券
私享最新 技术干货