Mybatis的使用

一、Mybatis简介

Mybatis是一个ORM框架。ORM(Object Relation Mapping)对象关系映射,就是将关系型数据库的数据表和代码对象建立映射关系,自动的完成数据表和对象的相互转换。

二、Mybatis使用

  1. 引入依赖
    要使用Mybatis必须要引入Mybatis框架依赖和要操作的数据库驱动依赖。
    在创建项目时在SQL依赖中找到Mybatis框架和对应的数据库驱动(使用什么数据库就装什么数据库)

    • Mybatis依赖
      Mybatis的使用_第1张图片
    • 数据库驱动依赖
      Mybatis的使用_第2张图片
  2. 配置数据库连接和Mybatis设置文件的保存路径

    • 在Application配置文件中,配置数据库的url,username,password,以及数据库的驱动类的路径driver-name-class。
      Mybatis的使用_第3张图片
    • 配置Mybatis的保存路径
      mybatis.mapper-locations;
      在这里插入图片描述
      (classpath:):代表了当前路劲,也就是配置文件的路径,也就是Resource文件夹下
      (*Mapper.xml):*表示一个占位符,代表Mapper前面还有字符。
      这个配置表示Mybatis的文件保存在Resource文件夹下的mybatis文件夹下的文件名以Mapper.xml结尾的文件中。
  3. 创建数据表对应的实体类
    将数据表的表项为实体类的属性,属性的名称和表的列名要一一对应。
    实体类必须要有set和get方法。
    Mybatis的使用_第4张图片

  4. 实现接口类
    将操作数据库的的方法名写在接口里面。接口用@Mapper注释修饰,表示将这个接口托管给Mybatis。
    方法的参数就是sql语句要用来查询的参数,方法的返回值就是用来接收sql语句的查询结果的,查询结果的值要和返回值的属性名一一对应。
    Mybatis的使用_第5张图片

  5. 设置sql查询语句
    根据配置文件中配置的路径(classpath:/mybatis/*Mapper.xml),在resource文件夹下创建mybatis文件夹,然后创建和接口对应的Mapper.xm文件。
    Mybatis的使用_第6张图片
    文件名可以前面可以随便取,后面必须符合配置的Mapper.xml。
    然后复制粘贴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">
    >
       
    >
    

    开始加入标签,绑定接口和接口参数,设置sql语句
    Mybatis的使用_第7张图片

  6. 注入接口对象,使用配置方法
    配置完接口方法之后,就要使用这个接口了,直接在被类注释修饰的类中,用@Autowired注入接口对象,就可以使用接口的方法了。

    • 上面的Mapper.xml就是在配置接口方法的查询sql,配置好之后,接口的方法就算是被重写了,有方法体了,可以调用。
    • 上面接口用@Mapper修饰了,就交给Mybatis托管了,MyBatis会根据方法的配置文件,重写方法,然后形成一个代理对象,代理对象就会被Spring容器接收,使用@Autowired注入的其实是这个代理类对象。
      Mybatis的使用_第8张图片
  7. 两个方法占位符

一个是 ${}另一个是#{}
注意:

  1. 其中${}就是直接替换
    #{}就是使用占位符,根据参数预处理,然后再查询
    这个在参数是String时会体现出来区别,因为${}是直接替换,字符串参数不会被加上引号,所以使用这个sql语句时,会报错,此时需要手动在${}外层加上引号:‘${}’,这样才能让字符串传参时被正确识别。
    使用#{}替换,使用的是占位符,会对字符串参数进行正确预处理,就能正常的查询。
  2. ${}存在安全问题,这是因为${}是直接全盘替换的,如果替换的字符串是一个特定的字符串,比如字符串中有’(引号),这样的数据字符串会和${}外层的’’配对,导致sql语句出错。
  3. ${}的应用场景,${}虽然有安全问题,但是它也有自己的应用场景,前面说了,#{}传递的参数会进行预处理,这个预处理不是根据#{}在sql中的身份去处理的,而是根据传来的参数类型,String就一定会被处理成带’’的字符串再放入sql语句中,所以当出现String放入sql语句中且不需要‘’包括的场景,就需要${}来实现了,典型的应用场景就是升序或者降序查询的问题,sql查询语句的 by desc还是 by asc是要根据前端传的数据变化的,所以desc或者asc是一个参数,并且,desc和sac参数只能是一个字符串,并且不能被’’包裹,此时就只有使用${}了。

综上:#{}和${}都有自身的局限和只有自己能实现的场景,主要还是看使用的时机,如果被传递的字符串是可以预期的,那就可以使用${}来接受,如果是不可预期到的那就使用#{}来接受更安全。

  1. 参数重命名注解@Param
    可以再接口的方法定义中对参数使用@Param注解,重命名这个参数映射在sql中的名字
    Mybatis的使用_第9张图片
    在sql中就使用这个重命名的参数代表原参数名了。

你可能感兴趣的:(mybatis,tomcat,java)