• 【MyBatis】初识这一优秀的持久层框架


    学习目录

    前言

    传统的JDBC操作数据库都是通过写一个java类,在类中调用接口下的API执行相应的SQL,存在大量的硬编码。试想,若是开发一个日活度高的系统,那SQL的变动的非常大,就要我们去相应的类中修改Java代码,特别是进行查询操作时需要我们手动将结果集封装到实体类中,造成后期维护压力山大
    总而言之,缺点多多

    MyBatis简介

    在这里插入图片描述
    mybatis是一个优秀的基于java的持久层框架,它内部封装了jdbc,使开发者只需要关注sql语句本身,而不需要花费精力去处理加载驱动、创建连接、创建statement等繁杂的过程。mybatis通过xml或注解的方式将要执行的各种statement配置起来,并通过java对象和statement中sql的动态参数进行映射生成最终执行的sql语句
    最后mybatis框架执行sql并将结果映射为java对象并返回。采用ORM思想解决了实体和数据库映射的问题,对jdbc进行了封装,屏蔽了jdbc api底层访问细节,使我们不用与jdbc api打交道,就可以完成对数据库的持久化操作

    快速入门

    下面的配置文件在MyBatis的官网里都有,自己去复制过来粘贴到IDEA中更改对应的信息即可,我写出来的目的是为了保证文章的顺序流畅(大家莫烦~)
    1.导入MyBatis相关坐标

    
        mysql
        mysql-connector-java
        8.0.29
    
    
        org.mybatis
        mybatis
        3.5.10
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    2.数据库中建立相应的数据表,并编写一个表中字段对应的(Brand)实体类
    在这里插入图片描述
    3.编写BrandMapper映射文件

    
    
    
    //Mapper代理开发:
    //定义与SQL映射文件同名的Mapper接口,
    //并且将Mapper接口和SQL映射文件放置在同一目录下
    //设置SQL映射文件的namespace属性为Mapper接口全限定名
    //在Mapper接口中定义方法,方法名就是SQL映射文件中sql语句的id,并保持参数类型和返回值类型一致
        
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    4.编写封装查询结果对象的接口

    public interface BrandMapper { public List selAll(); }
    
    • 1

    5编写Mybatis核心配置文件

    
    
    
        
                
        
        
            
                
                
                    
                    
                    
                    
                    
                
            
        
        
            
            
        
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25

    6.编写测试类,通过MyBatis实现查询功能

    public class MybatisDemo3 {
        public static void main(String[] args) throws IOException {
    
            //加载mybatis的核心配置文件,获取sqlSessionFactory
            String resource = "mybatis-config.xml";
            InputStream inputStream = Resources.getResourceAsStream(resource);
            //获取sqlSession工厂对象
            SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
            //获取sqlSession对象,来执行sql
            SqlSession sqlSession = sqlSessionFactory.openSession();
            //获取BrandMapper接口的代理对象
            BrandMapper brandMapper = sqlSession.getMapper(BrandMapper.class);
            List brands =brandMapper.selAll();
            System.out.println(brands);
            //释放资源
            sqlSession.close();
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    一顿操作下来好像也没有简单多少,其实不然,初次编写的配置文件都是持久化的属性,以后的变更只需要在接口里写出相应的方法即可,避免了大量的硬编码

    映射文件

    在这里插入图片描述

    sql片段与resultMap(???)

    在进行查询操作时,为了解决SQL表中字段名称和实体类中的属性名不一致导致的不能自动封装(查出为null)的问题,我们可以通过"起别名"也可以通过SQL片段来对查询的数据进行定义修改,统一重复的操作
    比如,在遇到表中的字段名称不符合实体类中驼峰命名的规范时、要对查询的数据进行范围限定时都可以通过sql片段来实现,就像这样:

     
             bracd_name as bracdName,company_name as compantName
     
        
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    通过SQL片段实现了所谓的范围查询,单表重复起别名工作的统一,但是针对多次不同的查询范围我们需要多次定义SQL片段(不灵活),这也不是一件简单的事
    于是resultMap帮我们解决了这个问题:

        
            
            
        
        
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    通过id来设置唯一标识,type来指定映射类型,把表的列名column和实体类的属性名通过result进行映射,在我们的SQL中直接查询所有即可,进行不同的查询操作也不需要重复定义片段或者取别名,就变得十分简单

    MyBatis的增删改查

    1.添加操作

    编写Mapper接口,写出添加的方法:

         void add(Brand brand);
    
    • 1

    配置SQL映射文件:

    
        
            insert into mybatis(bracd_name,company_name,ordered,description,status)
            values (#{bracdName},#{companyName},#{ordered},#{description},#{status});
        
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    执行方法:

     SqlSession sqlSession = sqlSessionFactory.openSession();
      BrandMapper brandMapper = sqlSession.getMapper(BrandMapper.class);
      brandMapper.add(brand);
    
    • 1
    • 2
    • 3

    2.修改操作

    编写Mapper接口,写出修改的方法:

    void update(Brand brand);
    
    • 1

    编写映射文件:

        
            update mybatis set bracd_name=#{bracdName},company_name=#{companyName},ordered=#{ordered},description=#{description},status=#{status}
        
    
    • 1
    • 2
    • 3

    执行方法:

     SqlSession sqlSession = sqlSessionFactory.openSession();
      BrandMapper brandMapper = sqlSession.getMapper(BrandMapper.class);
     int count= brandMapper.update(brand);
    
    • 1
    • 2
    • 3

    3.删除操作

    编写Mapper接口,写出删除方法:

         void deleteid(Brand brand);
    
    • 1

    编写映射文件:

        
                delete from mybatis where id=#{id}
        
    
    • 1
    • 2
    • 3

    执行方法:

     SqlSession sqlSession = sqlSessionFactory.openSession();
      BrandMapper brandMapper = sqlSession.getMapper(BrandMapper.class);
     int count= brandMapper.deleteid(id);
    
    • 1
    • 2
    • 3

    以上就是对MyBtias的初识,后面还有很多高级功能等待整理

    先自我介绍一下,小编13年上师交大毕业,曾经在小公司待过,去过华为OPPO等大厂,18年进入阿里,直到现在。深知大多数初中级java工程师,想要升技能,往往是需要自己摸索成长或是报班学习,但对于培训机构动则近万元的学费,着实压力不小。自己不成体系的自学效率很低又漫长,而且容易碰到天花板技术停止不前。因此我收集了一份《java开发全套学习资料》送给大家,初衷也很简单,就是希望帮助到想自学又不知道该从何学起的朋友,同时减轻大家的负担。添加下方名片,即可获取全套学习资料哦

  • 相关阅读:
    1050 String Subtraction
    JAVA毕业设计-酒店管理系统-计算机源码+lw文档+系统+调试部署+数据库
    vue3 setup(基础版)
    1、Flutter移动端App实战教程【环境配置、模拟器配置】
    性能测试常用术语
    xss盲打
    推荐算法之召回模型:DSSM、YoutubeDNN
    吴恩达机器学习系列课程笔记——第十一章:机器学习系统的设计(Machine Learning System Design)
    Day14--商品详情-渲染商品导航区域
    用GPT干的18件事,能够真正提高学习生产力,建议收藏
  • 原文地址:https://blog.csdn.net/m0_67402013/article/details/126080607