Mybatis框架学习1:入门

一框架介绍

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。

a

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&amp;characterEncoding=utf-8&amp;useSSL=false&amp;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来完成一个入门的数据库查询并不困难,一共有以下几个步骤:

  1. 创建Mybatis的xml配置文件,该配置文件主要约束了Mybatis的行为,包括数据库连接以及sql映射文件位置等
  2. 创建sql映射的配置文件,在该文件中,将指定的sql语句绑定到一个关键字上
  3. 创建SqlSession对象,使用SelectOne方法,执行"命名空间+关键字",并附带一个查询参数,即可完成查询。

猜你喜欢

转载自www.cnblogs.com/LearnAndGet/p/10179887.html