01_mybatis基础

clarino      2022-05-04     564

关键词:

参考:Mybatis 3.4.6中文开发手册

 

开源项目下载网址:github.com/mybatis/mybatis-3/release

官方文档网址: www.mybatis.org/mybatis-3

 

Mybatis原始apache的开源项目iBatis,后来迁移到google code,改名Mybatis。iBatis来源:internet+abates,一个基于java的持久层框架:SQL maps +DAO(Data Access Objects)。

Mybatis:支持定制化SQL、存储过程和高级映射。支持使用简单的XML或注解配置和映射原生信息,将接口和Java的POJO(Plain Old Java Object 普通Java对象)映射成数据库中记录

每个Mybatis应用程序主要使用SqlSessionFactory实例(通过SqlSessionFactoryBuilder从一个XML配置文件或预定义的配置类的实例获取)。

 XML文件构建SqlSessionFactory实例:Mybatis的使用类Resource,有很多方法,可方便从类路径及其他位置加载资源。

 

从XML中构建SqlSessionFacoty:

  1、每个基于Mybatis应用都是以一个SqlSessionFactory实例为中心;

  2、每个SqlSessionFactory实例可以通过SqlSesssionFactoryBuilder获得(从配置文件或一个预先定制的Configuration实例构建)。

从XML文件构建SqlSessionFactory实例的方法:建议使用类路径下的资源文件进行配置,也可以使用任意输入流实例(字符串形式文件路径或file:// 文件路径来配置)

 Resource工具类,包含一些实用方法,可以从classpatch或其他位置加载资源文件。

String resource = "org/mybatis/example/mybatis-config.xml";
InputStream InputStream = Resouces.getResourceAsStream(resource);
SqlSessionFactory SqlSessionFactory = new SqlSessionFactoryBuilder().build(InputStream);

XML配置文件包含了mybatis系统的核心设置:

  DataSource(数据源): 获取数据库连接实例

  TransactionManager(事务管理器): 决定事物作用域和控制方式

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
    PUBLIC "-//mybatis.org/DTD Cconfig 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="${driver}"/>
                <property name="url" value="${url}" />
                <property name="username" value="${username}" />
                <property name="password" value="${password}" />
            </dataSource>
        </environment>
    </environments>
    <Mappers>
        <mapper resource="org/mybatis/example/BlogMapper.xml" />
    </Mappers>

</configuration>

从SqlSessionFactory获取SqlSession:

SqlSession完全包含了面向数据库执行SQL需要的所有方法;可通过SqlSession实例直接执行已映射的SQL语句

SqlSession session = sqlSessionFactory.openSession();
try{
    BlogMapper mapper = session.getMapper(BlogMapper.class);
    Blog blog = mapper.selectBlog(101);
} finally {
    session.close();
}
内部执行逻辑;
<Mapper namesapce= "org.mybatis.example.BlogMapper" >
    <select id="selectBlog" resultType="Blog" >
        select * from Blog where id=#{id}
    </select>
</Mapper>

 

作用域和生命周期

依赖注入框架可创建线程安全的、基于事物的SqlSession和映射器并将它们注入到你的bean中。与spring集成Mybatis-spring

SqlSessionFactoryBuilder:

  一旦创建完SqlSessionFactory后就不再需要,因为最佳作用域是方法作用域(局部变量),可以重用创建多个SqlSessionFactory实例。

SqlSessionfactory

  一旦被创建就应该程序运行期间一直存在,没有任何理由对其清除或重建。

  最佳作用域:应用作用域,比如单例模式

SqlSession

  每个线程都应该有自己的SqlSession实例。SqlSession实例线程不安全。

  最佳作用域:请求或方法作用域,不能共享。

每次收到请求,新建Session,用完关闭。比如每次HTTP请求,都可以打开一个SqlSession,执行,然后关闭。

SqlSession SqlSession = sqlSessionFactory.openSession();
try{
    // do work
} finally {
    session.close();
}

映射器Mapper Instance

  映射器是创建用来绑定映射语句的接口;映射器接口实例从SqlSession获取。

  最佳作用域是方法作用域。,不需要显式关闭映射器实例。

SqlSession SqlSession = sqlSessionFactory.openSession();
try{
    BlogMapper mapper = session.getMapper(BlogMapper.class);
    // do work
} finally {
    session.close();
}

 

XML配置文件

Mybatis配置文件包含影响Mybatis行为的Settings和properties信息。

文档顶层结构如下:

Configuration

properties属性

settings设置

typeAlias类型别名

typeHandlers类型处理器

objectFactory 对象工厂

plugins插件

enviroments环境

  environment环境变量

      transactionManager 事物处理器

            dataSource 数据源

databaseProvider 数据库厂商标识

mappers映射器

 

properties:

这些属性都是可外部配置且可动态替换的,既可以典型Java属性文件中配置,也可通过properties元素的子元素来传递

<properties resource="org/mybatis/example/config.properties" >
    <property name="username" value="dev_user" />
    <property name="password" value="123456" />
</properties>

<dataSource type="POOLED" >
    <property name="driver" value="${driver}" />
    <property name="url" value="${url}" />
    <property name="username" value="${username}" />
    <property name="password" value="${password}" />
</dataSource>

属性也可以被传递到 SqlSessionFactoryBuilder().build(reader, props);

 sqlSessionFactory factory = new sqlSessionFactoryBuilder().build(reader, props);

...

sqlSessionFactory factory = new sqlSessionFactoryBuilder().build(reader, enviroment, props);

 

如果属性不只一个地方进行了配置,则mybatis按照如下顺序来加载

1、         properties元素体内指定的属性先被读取;

2、         根据properties元素中resource属性读取类路径下属性文件或根据url属性指定的路径读取属性文件,并覆盖已读取的同名属性

3、         读取方法参数传递的属性,并覆盖已读取的同名属性

优先级从高到低: 方法传递参数->resource/url指定的配置文件->properties属性中属性

 

Settings

改变mybatis运行时行为

cacheEnabled      所有映射器中配置的缓存全局开关     true/false     默认值 true

lazyLoadingEnabled  延迟加载的全局开关。开启时所有关联对象都会延迟加载  默认值false

aggressiveLazyLoading  开启时,任何方法调用都会加载改对象的所有属性,否则每个属性按需加载      默认值  false

useGenerateKeys   允许JDBC支持自动生成主键。如设置为true,则该配置强制使用自动生成主键     默认值false

 

typeAlias

<typeAliases>

      <typeAlias alias="Author"  type="domain.blog.Author" />

</typeAliases>

也可以指定一个包名,Mybatis会在包名下面搜索需要的Java Bean

<typeAliases>

      <package name="domain.blog" />

</typeAliases>

每一个在上述包中Java bean,在没有注解情况下,会使用bean的首字母小写的非限定类名作为别名。如 domain.blog.Author别名author。

使用注解设置别名

@Alias(“author”)

 

常见Java类型对应的类型别名

 

typeHandlers

无论是Mybatis在预处理PreparedStatement设置一个参数,还是结果集中取出一个值,都会用类型处理器将过去的值以合适方式转换成Java类型

默认的类型处理器

BooleanTypeHandler     java.lang.Boolean  JDBC类型boolean

StringTypeHandler  java.lang.String    JDBC类型CHAR,VARCHAR

DataTypeHandler   java.util.Data   JDBC类型:TIMESTAMP

 

重写类型处理器或创建自己的类型处理器来处理不支持的或非标准的类型

 

实现 org.apache.ibatis.type.TypeHandler接口

或继承类 org.apache.ibatis.type.BaseTypeHandler,然后选择性映射到一个JDBC类型

mybatis_笔记_01_逆向工程

通过Mybatis逆向工程,可以从数据库中的表自动生成pojo、mapper映射文件和mapper接口此处暂存怎么使用逆向工程,原理以后再探讨 工程结构 要修改的地方:generatorConfig.xml配置文件中数据库信息(用户名、密码等)、指定数... 查看详情

01_mybatis入门

首先呢,我们用mybatis肯定涉及到mybatis的引用,其次,mybatis是用来连接数据库的,所以又涉及到对对应数据库的引用,所以最基本的我们要导入两个jar包,这边数据库以mysql为例。引入如下两个依赖(maven用法),对应两个jar包... 查看详情

mybatis--01.基础

1.Mybatis的基本组成SqlSessionFactoryBuilder(构造器):它会根据配置信息或者代码来生成SqlSessionFactory(工厂接口)SqlSessionFactory:依靠工厂来生成SqlSession(SQLSession会话:相当于JDBC中的Connection对象)SqlSession:即可以发送SQL去执行并返回结果,也... 查看详情

mybatis基础_resultmap(代码片段)

mybatis可以很方便的使用resultType进行查询结果映射,但是在实际开发中很有可能会遇到实体类的成员变量名和实际查询的字段名称不符。这时就可以使用mybatis的另一种映射方式resultMap。使用resultType进行开发1、实体类   publicc... 查看详情

mybatis基础_动态代理开发(代码片段)

1、使用原始dao开发需要编写mapper的接口和实现类  1、编写接口  publicinterfaceUserDaoUsergetUserById(intuserId);  2、编写实现类publicclassUserDaoImplimplementsUserDaoprivateSqlSessionFactorysqlSessionFactory;publicUserDaoImpl(Sq 查看详情

mybatis基础_jar包下载

1、首先下载Jar包  1、通过搜索mybatis进入官网     2、由于mybatis已经放到了Github上,所以进入github进行下载  3、进入之后,回到项目的根目录  4、找到最下面,下载最新版本  5、点击下载压缩包即可  6、... 查看详情

01mybatis整体架构

01Mybatis简介Mybatis整体架构分为三层,分别是基础层、核心处理层、和接口层。如下图:基础支持层基础支持层包含整个Mybatis的基础模块,这些模块为核心处理层的功能提供了良好的支撑下面简单描述各个模块的功能。反射模块M... 查看详情

mybatis_01

原生态JavaJDBC程序问题总结:1.数据库连接,使用时就创建,不使用时就关闭。数据库连接频繁的开启和关闭本身就造成了资源的浪费,影响系统的性能。 解决方案:可以使用数据库连接池来管理数据库的连接。2.将sql语句硬编... 查看详情

spring+springmvc+mybatis(开发必备技能)01基础idea环境配置(代码片段)

Spring+SpringMVC+Mybatis(开发必备技能)01、基础idea环境配置环境:数据库:MySQL开发工具:IntelliJIDEA2020.1.3x64框架:SSM(Spring+SpringMVC+Mybatis)目录1、创建idea的 查看详情

mybatis-plus01_概述初始化工程basemapper和service中的crud常用注解

文章目录①.MyBatis-Plus的概述②.MyBatis-Plus初始化工程③.BaseMapper中的CRUD④.ServiceCRUD接口⑤.常用注解-@TableName⑥.常用注解-@TableId⑦.主键增长策略-雪花算法⑧.常用注解-@TableField⑨.常用注解-@TableLogic①.MyBatis-Plus的概述①... 查看详情

mybatis-plus01_概述初始化工程basemapper和service中的crud常用注解

文章目录①.MyBatis-Plus的概述②.MyBatis-Plus初始化工程③.BaseMapper中的CRUD④.ServiceCRUD接口⑤.常用注解-@TableName⑥.常用注解-@TableId⑦.主键增长策略-雪花算法⑧.常用注解-@TableField⑨.常用注解-@TableLogic①.MyBatis-Plus的概述①... 查看详情

java(01)__java基础

1.Java基础1.1.第一个Java程序publicclassHello{publicstaticvoidmain(Stringargs[]){System.out.println("Hello,world!");}}1.其语和C语言类似,这里注意main函数的参数与C不同,打印语句使用System.out.println,使用+分隔需要打印的内容;2.在文件命名上,文件... 查看详情

20181124_webapi基础01_创建一个基础的webapi项目

1.webApi属于RESTful架构风格,而RESTful风格,是以资源为视角来描述服务的2. 创建webAPI项目3. 选择webAPI,然后mvc会自动引用 4.点击确定,就创建好一个WebAPI项目,项目目录如下: 5.现在就可以尝试访问了:6. 简单介绍:  a)... 查看详情

01_基础

要点:使用Scala解释器使用val和var定义变量数字类型使用操作符和函数浏览Scaladoc1、scala解释器1、下载文件scala2.11.6.tgz        http://www.scala-lang.org/download/2.11.6.html2、登陆linux    查看详情

[mybatis]缓存_一级缓存_一级缓存失效的四种情况

1.sqlSession不同@Testpublicvoidtest05()throwsIOExceptionSqlSessionFactorysqlSessionFactory=getSqlSessionFactory();SqlSessionsqlSession01=sqlSessionFactory.openSession();tryEmployeeMappermapp 查看详情

01_基础总结深入(代码片段)

01.数据类型1.分类(2大类)*基本(值)类型*Number:任意数值*String:任意文本*Boolean:true/false*undefined:undefined*null:null*对象(引用)类型*Object:任意对象*Array:特别的对象类型(下标/内部数据有序)*Function:特别的对象类型(可执行)2.判断*typeof:*可以... 查看详情

java学习路线

...62集)尚硅谷_SpringMVC教程(16h25m97集)尚硅谷_MyBatis教程(14h14m22集) 查看详情

基于struts_spring_mybatis项目基础搭建

一、整合步骤基于Spring+Struts+MyBatis的SSM项目整合。创建一个新的web项目整合MyBatis整合Spring整合Struts二、整合MyBatis由于需要用到数据库,所以需要准备数据库对应的Jar包,如Mysql。mysql-connector-java-5.1.26-bin.jar导入MyBatis的Jar包。创... 查看详情