MyBatis介绍1——基本概念

一、基本概念

1、MyBatis定义

MyBatis是一个支持普通SQL查询、存储过程以及高级映射的持久层框架,它消除了几乎所有的JDBC代码和参数的手动设置以及对结果集的检索,并使用简单的XML或注解进行配置和原始映射,用以将接口和Java的POJO映射成数据库中的记录,使得Java开发人员可以使用面向对象的编程思想来操作数据库。

2、ORM定义

ORM框架(对象映射框架):为了解决面向对象和关系型数据库中数据类型不匹配的技术,通过描述Java对象与数据库表之间的映射关系,自动将Java应用程序中的对象持久化到关系型数据库的表中。

使用ORM框架后,应用程序不再直接访问底层数据库,而是以面向对象的方式来操作持久化对象(PO),而ORM框架会通过映射关系,将这些面向对象的操作转换成底层的SQL操作。

常见的ORM框架有Hibernate和MyBatis。

3、Hibernate和Mybatis的区别

Hibernate是一个全表映射的框架。通常开发者只需定义好持久化对象到数据库表的映射关机,就可以通过Hibernate提供的方法完成持久层操作。适用于场景不太复杂且对性能要求不高的项目中使用。

优点:
• 只需提供POJO和映射关系,工作量小
缺点:
• 多表关联时,对SQL查询的支持较差
• 更新数据时,需要发送所有字段
• 不支持存储过程 • 不能通过优化SQL来优化性能

MyBatis是一个半自动映射的框架。适用于复杂的和需要优化性能的项目

优点:
• 可以配置动态SQL并优化SQL
• 可以通过配置决定SQL的映射规则
• 支持存储过程
缺点:
• 需要手动匹配提供POJO、SQL和映射关系,工作量大

二、核心对象

1、SqlSessionFactory

SqlSessionFactory是单个数据库映射关系经过编译后的内存镜像,主要作用是创建SqlSession。

SqlSessionFactory对象的实例通过SqlSessionFactoryBuilder对象来构建,通过XML配置文件或一个预先定义好的Configuration实例进行构建。

SqlSessionFactory对象是线程安全的,一旦被创建,在整个应用执行期间都会存在。如果多次创建同一个数据库的SqlSessionFactory,那么此数据库的资源很容易被耗尽,所以在构建SqlSessionFactory实例时建议使用单例模式。

2、SqlSession

SqlSession是应用程序与持久层之间执行交互操作的一个单线程对象,主要作用是执行持久化操作。

SqlSession对象包含数据库中所有执行SQL操作的方法,底层封装了JDBC连接,所以可以直接使用其实例来执行已映射的SQL语句。

SqlSession实例是不能被共享的,也是线程不安全的,因此其使用范围最好限定在一次请求或一个方法中,用完及时关闭。

三、配置文件

<configuration>:配置文件的根元素,其他元素均在其中配置
<properties>:配置属性的元素,通过外部配置来动态替换内部定义的属性
<settings>:用于改变MyBatis运行时的行为,例如开启二级缓存、开启延迟加载等
<typeAliases>:为配置文件中的Java类型设置一个简短的名字,即设置别名。别名的设置与XML配置有关,其使用的意义在于减少全限定类名的冗余
<typeHandler>:将预处理语句中传入的参数从javaType(Java类型)转换为jdbcType(JDBC类型),或者从数据库中取出结果时将jdbcType转换为javaType
<objectFactory>:实例化目标类
<plugins>:配置用户所开发的插件
<environments>:在配置文件中对环境进行配置。MyBatis的环境配置实际上就是数据源的配置,可以通过<environments>元素配置多种数据源,即配置多种数据库
<mappers>:指定MyBatis映射文件的位置

四、映射文件

<mapper>:映射文件的根元素,其他元素都是它的子元素
<select>:用于映射查询语句,从数据库中读取数据,并组装数据给业务开发人员
<insert>:用于映射插入语句,在执行完元素中定义的SQL语句后,会返回一个表示插入记录数的整数
<update>:用于映射更新语句
<delete>:用于映射删除语句
<sql>:定义可重用的SQL代码片段,然后在其他语句中引用这一代码片段
<resultMap>:表示结果映射集,主要作用是定义映射规则、级联更新以及定义类型转化器等

五、MyBatis操作步骤

1、编写映射文件和配置文件

映射文件UserMapper.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="com.ssm.mapper.UserMapper">
   <!-- 根据用户编号获取用户信息 -->
   <select id="findUserById" parameterType="Integer" resultType="com.ssm.po.User">
     select * from t_user where id=#{id}
   </select>
   
   <!-- 根据用户名模糊查询用户信息 -->
   <select id="findUserByName" parameterType="String" resultType="com.ssm.po.User">
     select * from t_user where username like '%${value}%'
   </select>
   
   <!-- 添加用户 -->
   <insert id="addUser" parameterType="com.ssm.po.User">
     insert into t_user(username,jobs,phone)values(#{username},#{jobs},#{phone})
   </insert>
   
   <!-- 更新用户 -->
   <update id="updateUser" parameterType="com.ssm.po
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值