mybatis简明教程

mybatis

MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射,本文将让您快速掌握mybatis开发

一: 简介

在这里插入图片描述
一只被烤黑了的鸟

MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。

二:环境搭建

1:目录结构

在这里插入图片描述

2: 导入jar包

创建java项目,在根目录下创建lib文件夹,引入如下两个java包。
在这里插入图片描述
引入项目
在这里插入图片描述
在这里插入图片描述
引入jar包
在这里插入图片描述

三:快速入门

1.1:编写接口

public interface CustomMapper {
    @Select("select * from custom")
    List<Custom> query();
}

1.2 : 创建mybatisconfig.xml

<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://192.168.1.7:3306/crm?useUnicode=true&amp;characterEncoding=utf-8&amp;useSSL=false&amp;serverTimezone = GMT"/>
                <property name="username" value="root"/>
                <property name="password" value="123"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <mapper class="org.haojia.demo.mapper.CustomMapper"/>
    </mappers>
</configuration>	

1.2:编写pojo类

public class Custom implements Serializable {
    private static final long serialVersionUID = -665179340461078803L;
    private Integer id;
    private String comName;
    private String contact;
    private String phone;
}

1.3:创建测试类

public class TestDemo {
    public void query() throws IOException {
        String resource = "org/haojia/demo/mybatisConfig.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        SqlSession sqlSession = sqlSessionFactory.openSession();

        CustomMapper mapper = sqlSession.getMapper(CustomMapper.class);
        // 返回查询结果
        List<Custom> query = mapper.query();

        sqlSession.commit();
        sqlSession.close();
        // 遍历list结果
        query.forEach(e->{
            System.out.println(e.getComName() + "--" + e.getContact());
        });
    }
    public static void main(String[] args) throws IOException {
        new TestDemo().query();
    }
}

四:深入了解

1:mybatis核心对象

核心接口和类

核心配置文件 mybatis-config.xml

SQL映射文件

1:核心接口

1:SqlSessionFactoryBuilder

SqlSessionFactoryBuilder 有五个 build() 方法,每一种都允许你从不同的资源中创建一个 SqlSessionFactory 实例。

SqlSessionFactory build(InputStream inputStream)
SqlSessionFactory build(InputStream inputStream, String environment)
SqlSessionFactory build(InputStream inputStream, Properties properties)
SqlSessionFactory build(InputStream inputStream, String env, Properties props)
SqlSessionFactory build(Configuration config)

第一种方法是最常用的,它接受一个指向 XML 文件(也就是之前讨论的 mybatisConfig.xml 文件)的 InputStream 实例。可选的参数是 environment 和 properties。environment 决定加载哪种环境,包括数据源和事务管理器。比如:

(后面2.4部分将会详细介绍)

<environments default="development">
  <environment id="development">
    <transactionManager type="JDBC">
        ...
    <dataSource type="POOLED">
        ...
  </environment>
  <environment id="production">
    <transactionManager type="MANAGED">
        ...
    <dataSource type="JNDI">
        ...
  </environment>
</environments>

tips:

如果你调用了带 environment 参数的 build 方法,那么 MyBatis 将使用该环境对应的配置。如果你指定了一个无效的环境,会收到错误。如果你调用了不带 environment 参数的 build 方法,那么就会使用默认的环境配置(在上面的示例中,通过 default=“development” 指定了默认环境)

SqlSessionFactoryBuilder生命周期

最大特点:用过即丢,一旦创建SqlSessionFactory对象之后,该类就不再需要了。so,SqlSessionFactoryBuider的最佳范围在方法体内。即局部变量。

2:sqlSessionFactory

他是SqlSession的工厂,所有myBatis都以SqlSessionFactory实例为中心,通过SqlSessionFactory提供的openSession获取SqlSession实体。

Tips

1:openSession(boolean b);当参数为true时,表示关闭事务控制,自动提交;false表示开启事务控制,默认为true

2: 生命周期:一旦被创建,则会在整个运行过程中始终存在,在应用运行中,不建议多次创建SqlSessionFactory,因此,其最佳作用域在Application中,和应用的声明周期一同存在。

3:鉴于上述2的特性:运行期间有且只有一个实例存在被称为单例模式

最佳实践:

public class TestDemo2 {
   private static SqlSessionFactory factory;
   static{
       InputStream is = null;
       try {
           is = Resources.getResourceAsStream("mybatisConfig.xml");
           factory = new SqlSessionFactoryBuilder().build(is);
       } catch (IOException e) {
           e.printStackTrace();
       }
   }
   public static SqlSession closeSession(){
        return factory.openSession(false);
   }
   public static void openSession(SqlSession sqlSession){
       if(null != sqlSession){
           sqlSession.close();
       }
   }
}

3: SqlSession

使用 MyBatis 的主要 Java 接口就是 SqlSession。通过这个接口来执行命令,获取映射器实例和管理事务。SqlSessions 是由 SqlSessionFactory 实例创建的,

SqlSessionFactory 对象包含创建 SqlSession 实例的各种方法。而 SqlSessionFactory 本身是由 SqlSessionFactoryBuilder 创建的,它可以从 XML、注解或 Java 配置代码来创建 SqlSessionFactory。

Tips

声明周期:

1:SqlSession的声明周期是一次会话,但他同DB的会话是永久的,其生命周期也 “应该是永久” 的,但我们需要考虑的是其线程特性

2:每个线程都有自己的SqlSession实例,SqlSession的实例不会共享,但他并非线程安全的,SO,其最佳范围应该在Request范围内或方法体内。

3: SqlSession必须在finally被关闭

2:核心配置文件 mybatis-config.xml

Confuguration  根节点
	properties   属性配置  (常用)
	settings     修改MyBatis在运行时的行为方式 (较常用,后面基本不用)
	typeAlias    java类型命名的别名 (较常用)
	typeHandlers 类型处理器
	objectFactory 对象工厂
	plugins 插件
	enviroments 环境 (常用)
	enviroment
		reansationManager 事务管理器
		dataSource 数据源
	mappers 映射器 (长用)

2.1 : properties

在 mybatis-config.xml 中,可以引用属性值,也可以直接指定属性值

1: db.properties

driver=com.mysql.jdbc.Driver
url=jdbc:mysql://192.168.1.7:3306/crm?characterEncoding=utf8&serverTimezone=UTC
username=root
password=123

2: 在mybatis-config.xml中引入db.properties

<configuration>
	<!--  方式一 推荐 -->
	<properties resource="org/haojia/demo/db.properties"/>  
	<!-- 方式二  -->
	<properties> 
		<property name="driver" value="com.mysql.jdbc.Driver"/>
		<property name="url" value="jdbc:mysql://192.168.1.7:3306/crm?characterEncoding=utf8&serverTimezone=UTC"/>
		<property name="username" value="root"/>
		<property name="password" value="123"/>
	</properties>
	<!-- 注意!!! 上述两种方式选其一!!   -->
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="${driver}"/>
                <property name="url" value="${url}"/>
                <property name="username" value="${username}"/>
                <property name="password" value="${password}"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <mapper class="org.haojia.demo.mapper.CustomMapper"/>
    </mappers>
</configuration>

Tips

在mybatis-config.xml中方式二的优先级>方式一的优先级

2.2 settings元素

settings用于设计mybatis运行中的行为

设置项描述允许值默认值
cacheEnabled对在此配置文件下所有的cache进行全局性开/关设置true|falsetrue
lazyLoadingEnabled全局设置懒加载,如果为false,所有相关联的都会被初始化加载true|falsetrue
autoMappingBehaviormybatis对于resultMap自动映射的匹配级别none|partical|fullpartical

2.3 typeAliases元素

作用:映射实体类所在的包路径,与SQL映射文件相关联,减少输入多余的完整类名,简化操作

<typeAliases>
 <package name="xxx.xxx.xxx"> <!-- 此处写到包名即可,无须写到具体的类 -->
<typeAliases>

2.4 environments

<environments default="development">
  <environment id="development">
    <transactionManager type="JDBC">
        ...
    <dataSource type="POOLED">
        ...
  </environment>
  <environment id="production">
    <transactionManager type="MANAGED">
        ...
    <dataSource type="JNDI">
        ...
  </environment>
</environments>

重点

在开发时,我们一般都会将配置分为三个阶段:开发、测试、生产环境,你可以通过灵活的选择不同配置,从而将SQL映射到不同的数据库环境中。

1: ID 通过default属性执行当前运行环境为develpment

2: transactionManager事务管理器:设置其类型为JDBC.mybatis有两种事务管理类型 JDBC、MANAGED,使用JDBC是直接依赖数据源获得链接来管理事务的生命周期

3:DataSource:使用JDBC连接对象的资源

2.5 mappers

mappers获取资源

在快速入门中,我们曾经做过如下配置:
在这里插入图片描述
我们利用注解的方式固然简单,但面对复杂操作时,接口代码显得臃肿不利于阅读,可维护性不高。我们下面在操作映射SQL时,以XML为讲解示例,注解做个人扩展研究。

未完待续。。。。。。。。。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

技能侠

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值