Mybatis

Mybatis

Mybatis是一个基于java的持久层框架。包括SQL Maps和Data Access Object(DAO).mabatis是一个支持普通sql查询,存储过程和高级映射的优秀持久层框架。Mybatis可以使用简单的xml或注解用于配置和原始接口,将接口和javaPOJO(普通java对象)映射成数据库中的记录。

简单概括:更加简化jdbc代码,简化持久层,sql语句从代码中分离,利用反射,将表中数据与java bean属性一一映射,即ORM(Object Relational Mapping 对象关系映射);

使用范围:在日常的项目开发中,如中小型项目,如ERP,需求与关系模型相对固定建议使用Hibernate,对于需求不固定的项目,如互联网项目,建议使用mybatis。因为需要灵活的去编写sql语句。

JDBCMyBatisHibernate
操作方式纯手动半自动全自动
运行效率
开发效率

MyBatis功能架构图

mybatis 的功能架构分为三层

API接口层:提供给外部使用的接口API,开发人员通过这些本地 API 来操纵数据库。接口层接收到调用请求就会调用数据处理层来完成具体的数据处理。

数据处理层:负责具体的sql查找,sql解析,sql执行和执行结果映射处理等。它主要的目的是根据调用的请求完成一次数据库操作。

基础支撑层:负责最基础的功能支撑,包括连接管理、事务管理、配置加载和缓存处理,这些都是共用的东西,将他们抽取出来作为最基础的组件。为上层的数据处理层提供最基础的支撑。

MyBatis 框架体系结构

1、 Configuration-mybatis 配置

1)、 与 spring 一样,可以通过配置文件或注解的形式进行配置;
2)、 SqlMapConfig.xml, 此文件作为 mybatis 的全局配置文件, 配置了mybatis 的运行环境等信息;
3)、 mapper 文件即 sql 映射文件, 文件中配置了操作数据库的 sql 语句。 此文件需要在 SqlMapConfig.xml 中加载。
4)、 有了配置文件后, 通过 mybatis 环境等配置信息构造 SqlSessionFactory即会话工厂
5)、 由会话工厂创建 sqlSession 即会话, 操作数据库需要通过 sqlSession 进行
6)、 sqlSession 使用 Executor(数据库操作执行器口)操作数据库, 同Executor 具体实现类实现指定 dao 层数据访问操作

2.Mapped Statement

框架底层封装对象(sql 语句、 输入参数、 输出结果类型) , 它包装了mybatis 配置信息及 sql 映射信息等, mapper 文件(即 Mapper.xml)中一个 sql对应一个 Mapped Statement 对象, sql 的 id 即是 Mapped statement 的 id。

3.Sql 的输入映射参数

基本和简单类型、 HashMap、 自定义 POJO 等。 输入参数映射就是 jdbc 编程中对 preparedStatement 设置参数, Executor 通过 Mapped Statement 在执行 sql 前将输入的 java 对象映射至 sql 中。

4.Sql 的输出映射参数

基本和简单类型、 HashMap、 自定义 POJO。 Statement 对 sql 执行输出结果进行定义, 输出结果映射过程相当于 jdbc 编程中对结果的解析处理过程,Executor 通过 Mapped Statement 在执行 sql 后将输出结果映射至 java 对象中 .

MyBatis环境搭建

新建maven项目,添加依赖

<!-- mybatis jar 包依赖 -->
<dependency>
  <groupId>org.mybatis</groupId>
  <artifactId>mybatis</artifactId>
  <version>3.4.1</version>
</dependency>
<!-- 数据库驱动 -->
<dependency>
  <groupId>mysql</groupId>
  <artifactId>mysql-connector-java</artifactId>
  <version>5.1.39</version>
</dependency>
<!-- log4j日志打印 -->
<dependency>
  <groupId>log4j</groupId>
  <artifactId>log4j</artifactId>
  <version>1.2.16</version>
</dependency>

Resources目录下主配置文件添加

新建mybatis.xml文件,并添加配置信息

<?xml version="1.0" encoding="UTF-8" ?>
<!-- mybatis 框架头文件声明,类似spring环境,均需要加入头文件 -->
<!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://127.0.0.1:3306/aitao" />
                <property name="username" value="root" />
                <property name="password" value="0000" />
            </dataSource>
        </environment>
    </environments>
    <!-- mapper 配置文件指定 文件数量可配置多个-->
    <mappers>
        <mapper resource="com/shsxt/mapper/UserMapper.xml" />
    </mappers>
</configuration>

添加映射文件,xxxMapper.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="com.shsxt.mapper.UserMapper">
    <select id="queryUserById" parameterType="int"  resultType="com.shsxt.po.Account">
        select * from account where id=#{id}
    </select>
</mapper>

修改pom配置,设置资源文件夹路径

<resources>
  <resource>
    <directory>src/main/resources</directory>
  </resource>
  <resource>
    <directory>src/main/java</directory>
    <includes>
      <include>**/*.properties</include>
      <include>**/*.xml</include>
      <include>**/*.tld</include>
    </includes>
    <filtering>false</filtering>
  </resource>
</resources>

配置测试

/**
 * 加载配置到内存
 */
InputStream is= Resources.getResourceAsStream("mybatis.xml");
/**
 *  创建SqlSessionFactory 对象  hibernate 也是如此 必须先获取SqlSessionFactory 实例化对象
 */
SqlSessionFactory factory=new SqlSessionFactoryBuilder().build(is);
/**
 *  获取session以便操作数据库
 *  参数一:指定UserMapper.xml 映射文件id  必须加入命名空间
 *  参数二:指定输入参数
 */
SqlSession session=factory.openSession();
Account account= session.selectOne("com.shsxt.mapper.UserMapper.queryUserById", 1);
System.out.println(account);
session.close();
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值