mybatis

wu-zang      2022-04-12     235

关键词:

Mybatis

MyBatis 本是apache的一个开源项目iBatis 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis 。2013年11月迁移到Github。iBATIS一词来源于“internet”和“abatis”的组合,是一个基于Java的持久层框架。iBATIS提供的持久层框架包括SQL Maps和Data Access Objects(DAOs)

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

官方地址

简介使用

<!--全局配置文件 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>  
<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>
<!-- * org/mybatis/example/BlogMapper.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="org.mybatis.example.dao.BlogMapper">  
<!-- 对应接口全类名位置 ## -->

<!-- 对应接口方法 ### -->
<select id="selectBlog" resultType="org.mybatis.example.bean.Blog">select * from Blog where id = #{id}</select> 

</mapper>
//## org.mybatis.example.dao.BlogMapper
public interface BlogMapper{
    // 对应mapper中方法 ###
    public Blog selectBlog(Integer id);
}

Mybatis底层与数据库交互是使用SqlSession完成的,SqlSession非线程安全,每次使用应当获取新对象,mapper接口的实现由mybatis生成一个代理对象。

public void test(){
  
SqlSessionFactory sqlSessionFactory = getSqlSessionFactory();
SqlSession session = sqlSessionFactory.openSession();
   try {  
           BlogMapper mapper = session.getMapper(BlogMapper.class);  
           Blog blog = mapper.selectBlog(1);  
   } finally {  session.close(); }    
}

全局配置文件

properties标签

<?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>  
  <properties resource="db.properties" url="网络路径/本地路径"></properties>
  <!--resource:类路径   url:网络路径/本地路径 -->
  <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> 
</configuration>
#db.properties
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mydql://localhost:3306/db
jdbc.username=username
jdbc.password=password

settings标签

<?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>  
  <settings>
    <setting name="mapUnderscoreToCamelCaseEnables " value="true" />
    <!-- 驼峰命民适配 -->
  </settings>
</configuration>

typeAliases标签

<?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>  
 <typeAliases>
    <typeAlias type="org.mybatis.example.bean.Blog" alias="blog"></typeAlias>
   <!-- mapper中就不用写全类名了,不写alias即默认为类名-->
  <package name="org.mybatis.example.bean"/>
   <!--当前包及其子包自动别名-->
  </typeAliases>
</configuration>
<?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="org.mybatis.example.dao.BlogMapper">  
<!-- blog 别名使用-->
<select id="selectBlog" resultType="blog">select * from Blog where id = #{id}</select> 
</mapper>
//通过@Alias注解使用别名
//批量扫描注解优先
@Alias("blog")
public class Blog{
  private Integer id;
  ...
}
Alias(默认别名) Mapped Type
_long long
_short short
_int int
_integer int
_double double
_float float
_boolean boolean
string String
byte Byte
long Long
short Short
int Integer
integer Integer
double Double
float Float
boolean Boolean
date Date
decimal BigDecimal
bigdecimal BigDecimal
map Map

plugins插件

在四大对象执行前后进行拦截,原理为动态代理。

  • Executor (update, query, flushStatements, commit, rollback, getTransaction, close, isClosed)
  • ParameterHandler (getParameterObject, setParameters)
  • ResultSetHandler (handleResultSets, handleOutputParameters)
  • StatementHandler (prepare, parameterize, batch, update, query)

environments标签

<?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>  
  <environments default="development"> <!--指定默认使用环境来快速切换环境-->
    
        <environment id="env">
          <transactionManager type="JDBC"/> <!-- 事务管理器  type: JDBC|MANAGED 自定义 -->
        <dataSource type="POOLED">  <!-- 数据源配置 type:UNPOOLED|POOLED|JNDI 自定义-->
          <property name="driver" value="${oracle.driver}"/>        
          <property name="url" value="${oracle.url}"/>        
          <property name="username" value="${oracle.username}"/>        
          <property name="password" value="${oracle.password}"/>  
        </dataSource>
        </environment>
    
      <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> 
</configuration>

databaseIdProvider标签

<?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>  
  <environments default="env">
    <databaseIdProvider type="DB_VENDOR">
    <property name="MySQL" value="mysql"/>
    <property name="Oracle" value="oracle"/>
    <property name="SQL Server" value="sqlserver"/>
  </databaseIdProvider>
</configuration>

<?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="org.mybatis.example.dao.BlogMapper">  
<!-- 发送带oracle的查询语句 -->
<select id="selectBlog" resultType="org.mybatis.example.bean.Blog">
        select * from Blog where id = #{id}</select> 
<select id="selectBlog" resultType="org.mybatis.example.bean.Blog" 
        databsesId="oracle">select * from Blog where id = #{id}</select> 
<select id="selectBlog" resultType="org.mybatis.example.bean.Blog" 
        databsesId="mysql">select * from Blog where id = #{id}</select> 
</mapper>

mapper标签

<!--全局配置文件 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>  
<mappers>    
  <mapper url=""></mapper>
  <!-- 磁盘路径 -->
  <mapper resource="org/mybatis/example/BlogMapper.xml"/>  
  <!-- 类路径 -->
  <mapper class="org.mybatis.example.dao.BlogMapperAnnotation"/>
  <!--1. mapper和接口 同名同路径-->
  <!--2. 添加注解方法的接口-->
  <package name="org.mybatis.example.dao"/>
  <!--  批量扫描 xml 接口 同包 -->
</mappers> 
</configuration>
//org.mybatis.example.dao.BlogMapperAnnotation
public interface BlogMapperAnnotation{
    // 对应mapper中方法 ###
    @Select("select * from Blog where id = #{id}")
    public Blog selectBlog(Integer id);
}

映射文件

CRUD

//## org.mybatis.example.dao.BlogMapper
public interface BlogMapper{
    // 对应mapper中方法 ###
    public Blog selectBlog(Integer id);
    public boolean insertdBlog(Blog blog);
    public Integer updateBlog(Blog blog);
    public boolean deleteBlog(Integer id);
  //自动返回 Integer 、Long、Boolean 类型
}
<!-- * org/mybatis/example/BlogMapper.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="org.mybatis.example.dao.BlogMapper">  

<select id="selectBlog" resultType="org.mybatis.example.bean.Blog">
            select * from Blog where id = #{id}
  </select> 
  
<insert id="insertdBlog" parameterType ="org.mybatis.example.bean.Blog">
    insert into Blog...values(#{属性名},#{属性名})
</insert>
  
<update id="updateBlog" parameterType ="org.mybatis.example.bean.Blog">
    update Blog set ... 字段 = #{属性名} where 字段 = #{属性名}
  </update>
  
<delete id="deleteBlog">
    delete from Blog where id = #{id}
  </delete>
  
</mapper>

获取自增主键

<!-- * org/mybatis/example/BlogMapper.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="org.mybatis.example.dao.BlogMapper">  
  
  <!-- mysql 等支持 自增主键 数据库-->
<insert id="insertdBlog" parameterType ="org.mybatis.example.bean.Blog"
        useGeneratedKeys="true" keyProperty="#{id}" databaseId="mysql">
  <!-- 使用自增主键策略 插入数据库操作完成后原插入对象的id属性将被赋值-->
    insert into Blog...values(#{属性名},#{属性名})
</insert>

  <!-- Oracle 从序列中获取 -->
<insert id="insertdBlog" parameterType ="org.mybatis.example.bean.Blog"
        databaseId="oracle">
    <selectKey KeyProperty="#{id}" order="BEFORE" resultTyoe"Integer">
    <!-- 使用查询序列 插入数据库操作完成后原插入对象的id属性将被赋值-->
    select Blog_sql.nextval from dual
  </selectKey>
    insert into Blog...values(#{id},#{属性名},#{属性名})
  </insert>
  
</mapper>

mybatis1:mybatis入门

MyBatis是什么MyBatis是什么,MyBatis的jar包中有它的官方文档,文档是这么描述MyBatis的:MyBatisisafirstclasspersistenceframeworkwithsupportforcustomSQL,storedproceduresandadvancedmappings.MyBatiseliminatesalmostalloftheJDBCcodeand 查看详情

mybatis复习mybatis配置mybatis项目结构

项目结构:我在applicationContext.xml中有两个跟mybatis有关的内容:<importresource="mybatis-config.xml"/>  这里面配置了mybatis自身的配置信息<importresource="persistence-config.xml"/>  这里面配置了数据源信息applic 查看详情

mybatis框架mybatis入门(代码片段)

mybatis入门mybatis的使用mybatis中文文档:https://mybatis.org/mybatis-3/zh/index.html如果使用Maven来构建项目,则需将下面的依赖代码置于pom.xml文件中:<dependency><groupId>org.mybatis</groupId><artifactId>mybatis< 查看详情

mybatis复习

目录01.Mybatis课程介绍及环境搭建01.mybatis课程介绍02.三层架构和ssm框架的对应关系03.jdbc操作数据库的问题分析04.mybatis概述05.mybatis环境搭建-前期准备06.mybatis的环境搭建07.环境搭建的注意事项第一个mybatis程序目录结构.png源码:hel... 查看详情

mybatis-plus:快速开始(springboot+mybatis+mybatis)

01:Mybatis-Plus:了解Mybatis-Plus、快速开始(Mybatis+Mybatis-Plus,Mybatis-Plus自动做了属性映射)02:Mybatis-Plus:快速开始(Spring+Mybatis+Mabatis-Plus)03&#x 查看详情

mybatis系列mybatis入门

前言MyBatis官方文档:https://mybatis.org/mybatis-3/zh/index.htmlMyBatis本是apache的一个开源项目iBatis,2010年这个项目由apachesoftwarefoundation迁移到了googlecode,并且改名为MyBatis。是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架... 查看详情

[mybatis]mybatis入门

1、MyBatis简介MyBatis是这个框架现在的名字,而此框架最早的名字是IBatis,其名字的含义是“internet”、“abatis”两个单词的组合,是在2002年的时候开始的一个开源项目,在2010年6月16日Apache将项目交与Google进行管理,更名MyBatis。... 查看详情

mybatis一级缓存,mybatis二级缓存,mybatis缓存失效(代码片段)

Mybatis一级缓存,Mybatis二级缓存,Mybatis缓存失效 ================================©Copyright蕃薯耀 2021-06-24https://www.cnblogs.com/fanshuyao/ 一、SpringBoot整合Mybatis1、pom.xml引入依赖(基于SpringBoot:2.3.12.REL 查看详情

mybatis学习初始mybatis

本文借鉴:MyBatis【快速入门】(特此感谢!)初识MyBatis一、MyBatis简介  MyBatis本是apache的一个开源项目iBatis,2010年这个项目由apachesoftwarefoundation迁移到了googlecode,并且改名为MyBatis,是一个基于Java的持久层框架。持久层:可以... 查看详情

转mybatis学习总结——mybatis快速入门

【转】MyBatis学习总结(一)——MyBatis快速入门一、Mybatis介绍    MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架。MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装。MyBatis... 查看详情

mybatis专题-----mybatis源码学习

源码分析概述源码包分析下载地址MyBatis源码下载地址:https://github.com/mybatis/mybatis-3导入过程1.下载MyBatis的源码2.检查maven的版本,必须是3.25以上,建议使用maven的最新版本3.mybatis的工程是maven工程,在开发工具中导入,工程必须... 查看详情

mybatis

学了几天mybatis,顺便写写mybatis的基本操作mybatis是一个持久层的框架,是apache下的顶级项目。mybatis托管到goolecode下,再后来托管到github下(下载mybatis)。mybatis让程序将主要精力放在sql上,通过mybatis提供的映射方式,自由灵活生成... 查看详情

markdown[mybatis参考]关于mybatis#mybatis的一些片段(代码片段)

查看详情

mybatis基础学习—初识mybatis

一、MyBatis是什么?    MyBatis本是apache的一个开源项目iBatis,2010年这个项目由apachesoftwarefoundation迁移到了googlecode,并且改名为MyBatis,实质上Mybatis对ibatis进行一些改进。    MyBatis是一个优秀的持久层框架... 查看详情

mybatis-8.mybatis工作原理

查看详情

mybatis学习

1.Mybatis的重要的配置文件mybatis-config.xml和实体类的配置文件mybatis-config.xml<?xmlversion="1.0"encoding="UTF-8"?><!DOCTYPEconfigurationPUBLIC"-//mybatis.org//DTDConfig3.0//EN""http://mybatis.org/dtd/mybatis 查看详情

转mybatis学习总结——mybatis缓存

【转】MyBatis学习总结(七)——Mybatis缓存一、MyBatis缓存介绍  正如大多数持久层框架一样,MyBatis同样提供了一级缓存和二级缓存的支持一级缓存:基于PerpetualCache的HashMap本地缓存,其存储作用域为Session,当Sessionflush或close... 查看详情

mybatis简单的mybatis增删改查模板

简单的mybatis增删改查模板:<?xmlversion="1.0"encoding="UTF-8"?><!DOCTYPEmapperPUBLIC"-//mybatis.org//DTDMapper3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mappernamespace="com.suneee.sc 查看详情