IT 梁朝伟带你走进 Mybatis框架

IT 梁朝伟带你走进 Mybatis框架

1.什么是Mybatis

Mybatis是对JDBC的封装,它隐藏了具体的JDBC的API,它把SQL语句放到了配置文件中,它能自动把不同的输入数据映射到SQL语句的动态参数上,它能自动把SQL语句的执行结果映射为JAVA对象,MyBatis是一个持久化层的框架!
Mybatis是一个ORM框架
可以说Mybatis是一个半自动的ORM框架,Hibernate是全自动的
O Object
R Relational
M Mapper
对象 关系 映射

2.Mybatisd框架的优点

  • 与jdbc相比,减少了50%的代码量
  • Mybatis是最简单的持久化框架,小巧并且简单易学
  • Mybatis相当灵活,不会对应用或者数据库的现有设计加强任何影响,sql写在xml中,从程序代码中彻底分离,降低了耦合度,便于统一管理和优化,并且可以重用
  • 提供xml标签,支持动态sql
  • 提供映射标签,支持对象和数据库的orm字段关系映射

3.配置文件(SqlMapConfig.xml)

基本作用就是配置JDBC连接的有关信息,比如URL、用户名、密码等等
如:

<?xml version="1.0" encoding="UTF-8" ?>

3.1配置文件常用元素

  • configuration:配置文件的根元素
  • properties:通过resource属性从外部指定properties属性文件(database.properties),该属性文件描述数据库连接的相关配置
  • settings:设置Mybatis的一些行为
  • environments:表示配置MyBatils的多套运行环境,将sql映射到多个不同的数据库上,该元素节点下可以配置多个environment子节点,但是必须指定其中一个默认运行环境(通过default)
  • environment:配置Mybatis的一套运行环境,需指定运行环境id,事务管理,数据源配置等相关信息
  • mappers:作用是告诉Mybatis去那里找到sql映射文件
  • mapper:mappers的子节点,具体指定sql映射文件的路径,其中resource属性的值表描述sql映射文件的路径(类资源路径)

4.映射文件

基本作用就是编写SQL语句,同时给每个SQL语句定义一个唯一标识(ID),在程序中通过此ID来调用这条SQL语句。

<?xml version="1.0" encoding="UTF-8" ?> insert into t_admin (username,password) values (#{username},#{password})

4.1 映射文件元素

  • mapper:映射文件的根元素节点,只有一个属性namespace;

    • namespace:用于区分不同的mapper,全局唯一
  • cache:配置给定命名空间的缓存

  • cache-ref:从其他命名空间引用的缓存配置

  • resultMap:用来描述数据库结果集和对象的对应关系

    • id属性:唯一标识,此id值用于select元素resultMap属性的引用
    • type:表示resultMap的映射结果类型
    • result子节点:用于标识一些简单的属性
      • colum:数据库字段
      • property:实体类字段
  • sql:可以重用的sql块,也可以被其他语句引用

  • resultType:直接表示返回值类型

  • insert:映射新增语句

  • update:映射修改语句

  • delete:映射删除语句

    • id属性:该命名空间下唯一标识符
    • parameterType属性:表示sql语句传入的参数的完全限定名或者别名
  • select:映射查询语句

    • id属性:该命名空间下唯一标识符
    • resultType属性:表示sql语句返回值类型
  • association:映射到javaBean的某个复杂类型属性,比如javaBean类,即javaBean内部嵌套一个复杂数据类型,这个情况就是复杂数据类型,association只可以处理一对一

    • 模板:
    <resultMap id="userRoleResult" type="com.pojo.User">
        <result property="userCode" column="userCode"></result>
        <result property="userRole" column="userRole"></result>
        <result property="userName" column="userName"></result>
        <association property="role" javaType="com.pojo.Role">
            <id property="id" column="r_id"></id>
            <result property="roleCode" column="roleCode"></result>
            <result property="rloeName" column="rloeName"></result>
        </association>
    </resultMap>
    
    • javaType:完整java类名或者别名

    • property:映射数据库列的实体类对象的属性

  • collection:作用和 association类似,只不过是一个list,collection可以映射1对多

    • 模板:
      <resultMap id="userAddessResukt" type="com.pojo.User">
          <id property="id" column="id"></id>
          <result property="userCode" column="userCode"></result>
          <result property="userRole" column="userRole"></result>
          <collection property="addressList" ofType="com.pojo.Address">
              <id property="id" column="a_id"></id>
              <result property="postCode" column="postCode"></result>
              <result property="tel" column="tel"></result>
              <result property="contact" column="contact"></result>
              <result property="addressDesc" column="addressDesc"></result>
          </collection>
      </resultMap>                                                                                                                                                                                                                                       
      

5. 创建测试类

5.1 读取全局配置文件:mybatis-config.xml

String resource=“mybatis-fconfig.xml”;

//获取mybatis-config.xml文件的输入流

InputStream is=Resources.getRrsourceAsStream(resource);

5.2 创建SqlSessionFactory对象,此对象可以完成对配置文件的读取

SqlSessionFactory facyory=new SqlSessionFactoryBuilder().build(is);

5.3 创建SqlSession对象

List list =sqlSession.getMapper(BillMapper.class).BillMap(map);

5.4 关闭SqlSession对象

sqlSession.close();

6. Mybatis缓存

6.1一级缓存

一级缓存是基于PerpetualCache(mybatis自带)的HashMap本地缓存,作用范围为sission作用域,当session flush或者close之后,该session之后所有cache就会被清空

6.2 二级缓存

Mybatis的全局cache配置,需要在mybatis-config.xml的setting中设置

7 动态sql

7.1动态sql元素

  • if:利用if实现简单的条件选择
  • choose:相当于java中的switch通常与when和otherwise搭配
    • when:当其test满足要求时,就会输出when中的内容
    • otherwise:当所有when中的条件都不满足的话,就会输出otherwise中的内容
  • where:简化sql语句中where的条件判断
  • set:解决动态更新语句
  • trim:可以灵活的去除多余的关键字
  • foreach:迭代一个集合,通常用于in条件
    • itme:表示集合中每一个元素进行迭代时的别名
    • index:指定一个名称,用于表示迭代过程中,每次迭代到的位置
    • open:表示该语句已什么开始
    • separator:表示在每次进行迭代之间以什么符号做为分隔符
    • close:表示该语句以什么结尾
    • collecton:指定属性值
      • 如果是数组,就用array
      • 如果是list,就用list
      • 如果是map,就是用key
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值