MyBatis 基础入门

一、持久化和ORM的概念

持久化:持久化是将程序数据在持久状态和瞬时状态间转换的机制。通俗的讲,就是瞬时数据(比如内存中的数据,是不能永久保存的)持久化为持久数据(比如持久化至数据库中,能够长久保存)。

Java的持久化,通常是指使用SQL将数据存储在关系型数据库中。

持久化层:持久化层目前通用的是DAO ,也可以说为持久化层,作为基础层被业务逻辑层调用。DAO =Data Access Objects,也就是所谓的数据访问对象,这个对象是和数据打交道的。

ORM的概念:(Object Relational Mapping)对象关系映射,ORM主要是把对象模型和关系型数据库关系模型映射起来,并且使用元数据对这些映射进行描述。对象持久化或持久化层的实现有若干实现方式,例如通过JDBC调用SQL语句存储数据的方式,还有序列化对象的方式,就技术发展的现状来言,ORM是最好的方式。

映射主要包括:

实体类和数据库表的映射;
类的属性和数据库表字段的映射;
对象映射成数据表中的列(一条记录);

说明:对象持久化是一个基本概念,ORM是持久化的一种解决方案,而MyBatis是ORM的一个实现,是一个ORM工具。

二、MyBatis简介

1.什么是mybatis?
        MyBatis是支持普通SQL查询,存储过程和高级映射的优秀持久层框架。MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及结果集的检索。MyBatis使用简单的XML或注解用于配置和原始映射,将接口和Java的POJOs(Plan Old Java Objects,普通的Java对象)映射成数据库中的记录.。

mybatis 其实是对 jdbc api 的进一步封装,mybatis 不会直接和数据库进行打交道,最终和数据库打交道的仍然是 jdbc 。

mybatis 的最主要的两个功能:

  • 将 xml(或注解)和参数映射为 sql 交给 jdbc 去执行(增、删、改、查)
  • 对于查询,将 jdbc 查询出的结果集映射为对象,将映射好的对象返回给用户。

2.mybatis与hibernate的对比?

   mybatis提供一种“半自动化”的ORM实现,是完成对JDBC的部分封装。比hibernate灵活。性能也比hibernate好。而且也比较轻量级。
3.mybatis原理:

   

从图中看,Mybatis主要包括3部分,接口层、数据处理层(映射文件)、基础支撑层(核心配置文件)。

mybatis在转化的过程中怎么知道数据库的哪个字段对应JavaBean中的哪个属性呢?

很简单,只要两者的名称一样,系统就能就能自动识别出来,比如在数据库中创建的user表的字段分别为id,username,password,address这四个,实体类的属性也是这四个一模一样,所以系统会自动将查询结果给我们转为User对象

4.mybatis中几个基本的组件

1.SqlSessionFactoryBuilder:这是一个SqlSessionFactory的构造器,它根据我们的xml配置文件或者Java代码来生成SqlSessionFactory。 
2.SqlSessionFactory:这个有点类似于我们在JDBC中使用的Connection,我们到时候要根据SqlSessionFactory来生成是一个会话,也就是SqlSession。 
3.SqlSession:它可以发送一条SQL语句去执行,并返回结果,从这个角度来说,它有点类似于PrepareStatement,当然,我们也可以利用SqlSession获取Mapper的接口,这个算是SqlSession的一个核心用法了。 
4.Mapper:Mapper也可以发送一条SQL语句并返回执行结果,Mapper由两部分组成,一部分是Java接口,另一部分是XML配置文件或者注解。

5.mybatis的执行原理:

IO加载mybatis配置文件;

SqlSessionFactoryBuilder根据XML配置文件创建SqlSessionFactory;

SqlSessionFactory创建一个SqlSession对象,该对象包含了执行Sql语句的所有方法,完成对数据库的CRUD操作(根据SQL映射文件里的namespace+id找到对应的SQL语句);

执行完毕session关闭;

三、Mybatis配置

<?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>
	<!-- 引用mybatis.properties配置文件 -->
	<properties resource="mybatis.properties" />
	<!--settings全局参数配置 一般默认配置即可-->
    <settings>
		<!-- 这个配置使全局的映射器启用或禁用缓存 -->
		<!--<setting name="cacheEnabled" value="true" />-->
		<!--Log4J日志文件配置-->
        <setting name="logImpl" value="LOG4J" />
    </settings>
	<!--别名配置,下面语句在使用时就可以省略包名直接写类名而且不区分大小写-->
	<typeAliases>
		<package name="org.lanqiao.entity"/>
		<package name="org.lanqiao.dao"/>
	</typeAliases>
	<!--环境配置-->
	<environments default="development">
		<!--可以配置多个数据库连接,选择不同的数据集合-->
		<environment id="development">
			<transactionManager type="JDBC" />
			<!-- 配置数据库连接信息 -->
			<dataSource type="POOLED">
				<property name="driver" value="${jdbc.driver}" />
				<property name="url" value="${jdbc.url}" />
				<property name="username" value="${jdbc.username}" />
				<property name="password" value="${jdbc.password}" />
			</dataSource>
		</environment>
	</environments>
	<!-- 映射文件 -->
    <!--注意一定要放在resources,放在java下无法解析-->
	<mappers>
		<mapper resource="org/lanqiao/dao/UserMapper.xml" />
	</mappers>
</configuration>

全局settings详细配置 

  1. <settings>  
  2.         <!-- 这个配置使全局的映射器启用或禁用缓存 -->  
  3.         <setting name="cacheEnabled" value="true" />  
  4.         <!-- 全局启用或禁用延迟加载。当禁用时,所有关联对象都会即时加载 -->  
  5.         <setting name="lazyLoadingEnabled" value="true" />  
  6.         <!-- 当启用时,true。否则,每种属性将会按需要加载 -->  
  7.         <setting name="aggressiveLazyLoading" value="true" />  
  8.         <!-- 允许或不允许多种结果集从一个单独的语句中返回(需要适合的驱动) -->  
  9.         <setting name="multipleResultSetsEnabled" value="true" />  
  10.         <!-- 使用列标签代替列名。不同的驱动在这方便表现不同。参考驱动文档或充分测试两种方法来决定所使用的驱动 -->  
  11.         <setting name="useColumnLabel" value="true" />  
  12.         <!-- 允许JDBC支持生成的键。需要适合的驱动。如果设置为true则这个设置强制生成的键被使用,尽管一些驱动拒绝兼容但仍然有效(比如Derby) -->  
  13.         <setting name="useGeneratedKeys" value="true" />  
  14.         <!-- 指定MyBatis如何自动映射列到字段/属性。PARTIAL只会自动映射简单,没有嵌套的结果。FULL会自动映射任意复杂的结果(嵌套的或其他情况) -->  
  15.         <setting name="autoMappingBehavior" value="PARTIAL" />  
  16.         <!-- 配置默认的执行器。SIMPLE执行器没有什么特别之处。REUSE执行器重用预处理语句。BATCH执行器重用语句和批量更新 -->  
  17.         <setting name="defaultExecutorType" value="SIMPLE" />  
  18.         <!-- 设置超时时间,它决定驱动等待一个数据库响应的时间 -->  
  19.         <setting name="defaultStatementTimeout" value="25000" />  
  20.     </settings>  

简单测试代码

package org.lanqiao;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.lanqiao.entity.User;

import java.io.IOException;
import java.io.Reader;

public class Test {
    public static void main(String[] args) {
        String resource = "mybatis-Config.xml";
        try {
            //加载Mybatis的配置文件
            Reader reader = Resources.getResourceAsReader(resource);
            //创建SqlSession的工厂
            SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
            //创建能够执行SQL映射文件中SQL语句的SqlSession对象
            SqlSession sqlSession = sqlSessionFactory.openSession();
            //配置文件里的命名空间+id
            User u = sqlSession.selectOne("org.lanqiao.dao.UserMapper.selectByPrimaryKey",1);
            System.out.println("用户名:"+u.getUserName());
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值