一框架介绍
1.Mybatis 介绍
MyBatis 本是 apache 的一个开源项目 iBatis, 2010 年这个项目由 apache software foundation 迁移到了 google code, 并且改名为 MyBatis. 是一个基于 Java 的持久层框架.
Mybatis 本质和 Hibernate 等持久层框架一样, 底层均是基于 jdbc 的, 作用均是实现数据的持久化.
2.Mybatis 和 Hibernate 对比
对比项 | Mybatis | Hibernate |
---|---|---|
底层原理 | 基于 jdbc | 基于 jdbc |
开发速度 | 业务无复杂查询时较快,上手快 | 复杂查询语句多时较快。上手慢 |
sql 优化 | 复杂 | 手写 sql,容易优化 |
缓存 | 支持一级、二级缓存,支持第三方缓存 | 支持一级、更好的二级缓存,支持第三方缓存 |
可移植性 | 不同数据库需写不同 sql 语句 | Hibernate 负责映射 |
日志系统 | 具有自己的日志系统 | 使用第三方日志工具 |
. 二准备工作
1. 创建数据
- CREATE TABLE `user` (
- `id` int(11) PRIMARY KEY NOT NULL AUTO_INCREMENT,
- `name` text NOT NULL,
- `memo` text
- ) ;
- INSERT INTO `user` VALUES ('1', 'uzi', 'a gun');
- INSERT INTO `user` VALUES ('2', 'the Shy', 'ChampionTop');
- INSERT INTO `user` VALUES ('3', 'rookie', 'ChampionMid');
- INSERT INTO `user` VALUES ('4', 'clearlove', 'old man');
2. 资源准备
如果创建的是 java 项目, 那么需要下载以下 jar 包:
- mybatis-3.4.6.jar
- commons-logging-1.2.jar
- log4j-1.2.17.jar
- asm-5.2.jar
- cglib-3.2.5.jar
如果创建的是 maven 项目, 则导入对应依赖即可.
三. 创建项目
我这里创建的是 java 项目
1. 导入 jar 包
在项目根目录下创建一个文件夹, 命名为 lib, 将下载好的 jar 包复制进去后, 邮件选中, 选择 Buildpath->add to BuildPath.
2. 创建 Mybatis 配置文件
- <?xml version="1.0" encoding="UTF-8" ?>
- <!-- 需要导入 mybatis 的 dtd 约束文件 -->
- <!DOCTYPE configuration
- PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
- "http://mybatis.org/dtd/mybatis-3-config.dtd">
- <configuration>
- <!--
- 属性
- <properties></properties>
- 全局参数设置
- <settings></settings>
- 类型别名
- <typeAliases></typeAliases>
- 类型处理器
- <typeHandles></typeHandles>
- 对象工厂
- <objectFactory></objectFactory>
- 插件
- <plugins></plugins>
- 以上属性现阶段都可以忽视, 后面会详细介绍
- -->
- <!-- 配置 mybatis 的环境信息 -->
- <environments default="development">
- <environment id="development">
- <!-- 配置 JDBC 事务控制, 由 mybatis 进行管理 -->
- <transactionManager type="JDBC"></transactionManager>
- <!-- 配置数据源, 采用 dbcp 连接池 -->
- <dataSource type="POOLED">
- <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
- <property name="url" value="jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=GMT"/>
- <property name="username" value="root"/>
- <property name="password" value="root"/>
- </dataSource>
- </environment>
- </environments>
- <!-- 使用 mappers 标签加载 sql 映射文件 -->
- <mappers>
- <!-- 此处根据自己实际的 sql 映射文件位置来填写 -->
- <mapper resource="com/mybatis/mapping/User.xml"/>
- </mappers>
- </configuration>
3. 创建实体类
- package com.mybatis.domain;
- public class User {
- private int id;
- private String name;
- private String desc;
- public int getId() {
- return id;
- }
- public void setId(int id) {
- this.id = id;
- }
- public String getName() {
- return name;
- }
- public void setName(String name) {
- this.name = name;
- }
- public String getDesc() {
- return desc;
- }
- public void setDesc(String desc) {
- this.desc = desc;
- }
- @Override
- public String toString() {
- return "User [id=" + id + ", name=" + name + ", desc=" + desc + "]";
- }
- }
4. 创建 sql 映射配置文件
<?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">
- <!-- namespace: 命名空间, 对 sql 进行一个分类管理 -->
- <!-- 注意: namespace 在 mapper 代理时, 具有重要且特殊的作用 -->
- <mapper namespace="com.mybatis.mapping.userMapper">
- <!--
- 2 使用 id 进行查询
- 3 查询, 使用 select 来表示一个查询的 statement, 相当于 statement.executeQuery
- 4 id: 表示该 statement 唯一标识
- 5 parameterType: 输入参数类型
- 6 resultType: 输出参数类型, 使用的是 User 类, 则会将查询出来的记录封装到该类中
- 7 #{id}: 使用 #{} 接收输入的参数, 其中的 "id" 属性名任意, 可以为 uid, 也可以为别的.
- 8 -->
- <!-- 查询 -->
- <select id="getUser" parameterType="int" resultType="com.mybatis.domain.User">
- SELECT * FROM user WHERE id= #{id}
- </select>
- </mapper>
5. 完成简单查询
创建一个测试类
- /**
- * @param args
- * @throws IOException
- */
- public static void main(String[] args) throws IOException {
- //1. 读取配置文件
- String resource = "SqlMapConfig.xml";
- InputStream inputStream = Resources.getResourceAsStream(resource);
- //2. 根据配置文件创建 SqlSessionFactory
- SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
- //3.SqlSessionFactory 创建 SqlSession
- SqlSession sqlSession = sqlSessionFactory.openSession();
- //4.SqlSession 执行 statement, 并返回映射结果
- User user = sqlSession.selectOne("com.mybatis.mapping.userMapper.getUser",1);
- system.Out
- sqlSession.close();
- }
输出结果如下
- DEBUG [main] - Opening JDBC Connection
- DEBUG [main] - Created connection 1859039536.
- DEBUG [main] - Setting autocommit to false on JDBC Connection [com.MySQL.cj.jdbc.ConnectionImpl@6eceb130]
- DEBUG [main] - ==> Preparing: SELECT * FROM user WHERE id= ?
- DEBUG [main] - ==> Parameters: 1(Integer)
- DEBUG [main] - <== Total: 1
- User [id=1, name=uzi, desc=null]
- DEBUG [main] - Resetting autocommit to true on JDBC Connection [com.MySQL.cj.jdbc.ConnectionImpl@6eceb130]
- DEBUG [main] - Closing JDBC Connection [com.MySQL.cj.jdbc.ConnectionImpl@6eceb130]
- DEBUG [main] - Returned connection 1859039536 to pool.
总结
由上述步骤来看, 使用 Mybatis 来完成一个入门的数据库查询并不困难, 一共有以下几个步骤:
创建 Mybatis 的 xml 配置文件, 该配置文件主要约束了 Mybatis 的行为, 包括数据库连接以及 sql 映射文件位置等
创建 sql 映射的配置文件, 在该文件中, 将指定的 sql 语句绑定到一个关键字上
创建 SqlSession 对象, 使用 SelectOne 方法, 执行 "命名空间 + 关键字", 并附带一个查询参数, 即可完成查询.
来源: https://www.cnblogs.com/LearnAndGet/p/Mybatis.html