mybatis菜鸟教程,入门详细教程

TheDisguiser 2020-07-12 20:05:45 java常见问答 6431

如果是学习java的小伙伴相信是没有不知道mybatis的吧,这次我们就来详细了解一下mybatis的一些入门知识,快来看看吧。

一 、MyBatis简介

1. JDBC回顾

1.1 JDBC代码回顾及优缺点分析

1、直接使用JavaAPI,访问速度快,适合操作大批量数据

2、需要手动编码操作Statement、ResultSet、Connection等接口,容易出现大量重复代码

3、处理的结果,javax.sql.ResultSet仍然是面向数据库的表和列的数据类型,在Java程序中需要进一步的封送(在Dao中出现大量的getter和setter),才能变成JavaBean中可用的数据。

1.2 数据持久化技术与ORM

数据持久化,顾名思义就是将所有的数据持久保存下去,具体实现就是将内存中的数据模型转换为存储模型,及将存储模型转换为内存中的数据模型,它们的统称就是数据持久化,数据模型可以是任何数据结构或对象模型,存储模型可以是关系模型、XML、二进制流等。

由于内存中的数据在应用程序退出后也会不可获得,所以通俗意义上的持久化技术指的是将数据存储到磁盘上,尤其是数据库中的一种技术。

ORM及Object Relation Mapping,意为对象关系映射。在数据库中,所有的数据都是保存在表和列上,而在由高级语言编写的应用程序中,数据都是封装在JavaBean上,在现实关系中,数据库的表和JavaBean会存在一定的对应关系,ORM技术就是解决这种把面向关系的数据转移到面向对象模型上的技术。

目前较为流行的ORM框架:

> MyBatis:轻量级,简单易用

>

> Hibernate:ORM鼻祖,功能强大,能自动生成SQL,但是使用起来较为复杂

>

> JPA:与Hibernate为同一作者

2. MyBatis介绍

这是一款强悍的持久层框架,它支持定制化SQL、存储过程以及高级映射。它能够避免几乎所有的 JDBC 代码及手动设置参数以及获取结果集。MyBatis可以使用简单的XML或注解来配置和映射原生信息,将接口和Java的POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。

3. Helloword

3.1 工程搭建

1、创建maven Java项目,引入所需的开发库

mybatis ,oracle驱动

xml

<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis</artifactId>
    <version>3.4.3</version>
</dependency> <
dependency >
    <groupId>com.oracle</groupId> <
    artifactId > ojdbc6 < /artifactId> <
    version > 11.2 .0 .1 .0 < /version> <
    /dependency>

2、一些必要的mybatis准备工作:在eclipse中配置mybatis所需的dtd配置文件模板

3.2 项目流程分析

XML配置文件编写 -------> XML映射文件编写 -------> 编码

3.3 XML配置文件与XML映射文件编写

1、mybatis-config.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
  PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
  "http://mybatis.org/dtd/mybatis-3-config.dtd"> 
<configuration>
    <!--一个配置文件中可以配置多个数据库连接环境,default用来指定默认使用的数据库环境-->
<environments default="oracle">
        <!--id用来唯一标识每个数据库环境-->
<environment id="oracle">
            <!--这个配置就是直接使用了JDBC的提交和回滚设置-->
<transactionManager type="JDBC" />
            <!--使用mybatis内置的简单数据库连接池对connection进行管理-->
<dataSource type="POOLED">
                <!--JDBC四要素-->
<property name="driver" value="oracle.jdbc.driver.OracleDriver" />
<property name="url" value="jdbc:oracle:thin:@//127.0.0.1:1521/orcl" />
<property name="username" value="scott" />
<property name="password" value="tiger" />
</dataSource>
</environment>
</environments>
</configuration>

2、city.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">
<!--namespace,命名空间,用来对多个映射文件中相同的SQL进行区分,功能类似于Java中的package概念-->
<mapper namespace="CityMapper">
    <!--返回类型-->
<select id="findById" resultType="com.turing.bean.City">
select * from city where id=#{id}
</select>
</mapper>

编写完city.xml映射文件以后,需要在mybatis-config.xml配置文件尾部增加如下信息

</environments> <
mappers >
    <!--注册映射文件,告诉mybatis到哪里去找这些sql语句-->
<mapper resource="com/turing/mapper/city.xml"/> <
    /mappers> <
    /configuration>

3.4 代码实现

java

public static void main(String[] args) throws IOException
{
    //依据配置文件制定的信息实例化会化工厂
    InputStream in = Resources.getResourceAsStream("mybatis-config.xml");
    SqlSessionFactory factory = new SqlSessionFactoryBuilder()
        .build( in );
    //开启会话
    SqlSession session = factory.openSession();
    //调用session提供的API,传入SQL的id和参数
    City city = session.selectOne("CityMapper.findById", 4);
    System.out.println(city);
    //关闭会话
    session.close();
}

3.5进一步改进代码

1、封装SessionFactoryUtils对代码进行复用

虽然MyBatis相对简化了JDBC的操作,但是在编写数据访问代码的时候,仍然有部分代码会出现重复,我们可以对SqlSessionFactory的处理做进一步的封装,进而达到代码重用的效果:

java

public class SessionFactoryUtils
{
    private static SqlSessionFactory factory;
    //定义常量封装XML配置文件的路径
    private final static String SOURCE = "mybatis-config.xml";
    static
    {
        //在静态代码块中对SqlSessionFactory进行初始化
        try
        {
            InputStream in = Resources.getResourceAsStream(SOURCE);
            factory = new SqlSessionFactoryBuilder()
                .build( in );
        }
        catch (IOException e)
        {
            e.printStackTrace();
        }
    }
    public static SqlSession openSession()
    {
        return factory.openSession();
    }
    public static void closeSession(SqlSession session)
    {
        if (session != null)
        {
            session.close();
        }
    }
}

测试代码将会变成如下:

java

public static void test2() throws IOException
{
    SqlSession session = SessionFactoryUtils.openSession();
    //使用“命名空间.sqlid”的方式调用具体的sql语句
    City city = session.selectOne("CityMapper.findById", 4);
    System.out.println(city);
    SessionFactoryUtils.closeSession(session);
}

2、使用别名机制简化类型的声明

在XML映射文件编写sql语句是,对于select节点的resultType属性,我们经常要声明一个JavaBean的返回类型(类名一般都会很长),一旦sql语句增多,编写起来也很麻烦,我们可以使用MyBatis提供的别名机制,对此进行简化,为此,我们需要在XML配置文件中新增如下配置:

<configuration>
<typeAliases>
<!-- 逐个声明单个类与别名的对应关系 -->
<!-- <typeAlias type="com.turing.bean.City" alias="City"/> -->
<!-- <typeAlias type="com.turing.bean.Aaa" alias="Aaa"/> -->
<!-- <typeAlias type="com.turing.bean.Bbb" alias="Bbb"/> -->
<!-- 批量声明某个包下所有类与别名的对应关系,别名即为简单类名 -->
<package name="com.turing.bean" />
</typeAliases>
<environments default="mysql">

声明别名后,select节点的编码形式如下:

<select id="findAll" resultType="City">
    select * from city
</select>

以上就是本篇文章的所有内容了,你知道mybatis是什么了吗?作为java基础教程之一,mybatis是一定要掌握的。还想了解更多相关java知识,请持续关注网站奇Q工具网了解详情。

推荐阅读:

mybatis plus where使用方法详解

mybatis如何自动生成uuid主键?如何批量删除?

mybatis日志打印sql详解