栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Mybatis框架详解IDEA版

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Mybatis框架详解IDEA版

1. Mybatis框架
  • Mybatis框架,是ORM(Object Relation Mapping,对象关系映射)的一种实现框架,都是对jdbc的封装

  • MyBatis可以通过XML或者注解的方式,来配置映射类型、接口和实体

  • MyBatis框架的优点如下:


  1. 比JDBC少50%以上的代码;
  2. MyBatis是最简单的持久化框架,简单易学;
  3. MyBatis相当灵活,不会对应用程序或者数据库的现有设计强加任何影响,SQL用XML编写,与程序代码分离,降低耦合度,便于统一管理和优化,且可重用;
  4. 提供XML标签,支持动态SQL语句编写;
  5. 提供映射标签,支持对象与数据库的ORM字段关系映射。
  • MyBatis框架的缺点
  1. SQL语句的编写工作量较大,对开发人员编写SQL语句的功底有一定要求;
  2. SQL语句依赖于数据库,导致数据库移植性差,不能随意更换数据库。
  • MyBatis框架适用场合
    MyBatis专注于SQL本身,是一个足够灵活的DAO层解决方案,对性能的要求很高,或者需求变化较多的项目,如互联网项目,那么MyBatis将是不错的选择
1.1 Mybatis开发步骤
  • 既然是框架,对数据库的增删改查肯定是不会写在程序里面的,所以我们以后Dao层的SQL语句,不会写在UserDaoImpll,而是创建实体与映射关系文件,也就是mybatis的Mapper.xml文件,通过mybatis为我们查询并按照映射返回一个封装好了的查询的值,以后的SQL语句就写在Mapper.xml文件中,
1.1.1 Mapper.xml文件

1.1.2 Mybatis配置文件——mybatis-config.xml
  • 最后创建一个mybatis配置文件:mybatis-config.xml文件

  • 以后再用到UserDaoImpl的时候,通过mybatis的api创建一个实现类对象,下面是基础,以后会结合spring使用

2. Mybatis配置文件详解
  • 就是配置一下数据库
  • 先写一个jdbc.properties
  • 再看配置文件
  • 可以看到,我除了environments标签配置数据库还有其他标签,下面这篇文章中列了所有的标签,并侧重说明
  • Mybatis配置文件
3. Mybatis的CRUD操作【重点】

代码在Mapper.xml文件


3.1.查

UserDao层的方法如下,看注释

mapper代码





    
        select *from t_user where id = #{id} and username = #{username}
    

    
        select *from t_user where username = #{username} and password = #{password}
    

3.2 删改

UserDao

mapper代码




    
        delete from t_user where id = #{id}
    

    
        update t_user set username = #{username},password = #{password}
        where id = #{id}
    

3.3 增insert

UserDao

void insertById(User user);

mapper代码

    
        insert into t_user(username,password,gender,regist_time)
        values (#{username},#{password},#{gender},#{regist_time})
    
    
3.4 主键回填

调用方法时参数User user不给id,但把自动增长的id返回给user


 
    
        
            select last_insert_id()
        
        insert into t_user(username,password,gender,regist_time)
        values (#{username},#{password},#{gender},#{regist_time})
    

主键id是字符串类型,字符串就不能自动增长了,那怎么自动填写?
UUID生成字符串,由于UUID有“-”,我们replace替换掉


    
        
            select replace(UUID(),"-","")
        
        insert into t_user(id,username,password,gender,regist_time)
        values (#{id},#{username},#{password},#{gender},#{regist_time})
    
  • 以上代码对比上一个selectKey标签的属性 order的值变为了before,要做执行插入前就要执行,resultType=“String”是和id的类型对应,keyProperty是对应parameterType的User的id
  • 由于不能自动增长,sql语句中要插入id
4. ORM映射【重点】
  • 对于上面的sql查询语句,如果数据库表里的名字和当前实体类的属性不同名
4.1 resultMap标签-查询结果的封装规则

该标签,简单来说,就是数据库表里的名字和实体类名字不一样的映射

  • 上面是关联查询,代码有点多,再来个简单例题:如下

5.Mybatis多表关联查询

resultMap的association标签

  • 上面的association标签,是映射了一个Passport类,我的Passenger类中有一个Passport属性,如下

  • 里面的Passport属性的映射就是用association标签来写的
  • 如果是一个List属性就用collection标签