MyBatis

Posted 温尔昔昔

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MyBatis相关的知识,希望对你有一定的参考价值。

一、ORM

“持久化”是将内存中的数据模型转换为存储模型,以及将存储模型转换为数据模型的统称(数据模型可以是任何数据结构或对象模型,存储模型可以是关系型数据库、XML文件、二进制文件等)


ORM是对象持久化或持久化层的实现的最佳方案。主要把对象模型和关系型数据库关系模型映射起来,使用元数据对这些数据进行描述。


ORM解决方案主要提供四个主要功能:

  1. 基本增删改查的API

  2. 对象或属性查询的API

  3. 规范映射元数据。ORM解决方案需要规范映射的方式,通常选择XML存储映射元数据,因为XML便于读取和规范格式。

  4. 事务控制、延迟加载等优化功能。



二、MyBatis

MyBatis是ORM的一个实现,是一个完整的ORM工具。(MyBatis需要

MyBatis驱动包)


用eclipse实现Mybatis(持久化层是专门与数据库打交道的层,因此只用创建一个普通的Java项目)

(在此省略创建数据库)


创建一个entity包用于存放Student帮助类。

public class Student {
    private int sno;
    private String sname;
    private int sage;
    private String saddress;

    (省略此处的setter And Getter)

    ...

    }


创建学生表与学生类的映射文件


创建MyBatis的配置文件

MyBatis


编写测试类

MyBatis


执行结果:

MyBatis


使用Mapper动态代理优化

新建接口,在接口中定义操作数据库的方法:

    1.方法名和配置文件中相关的方法id值相同。

    2.方法的输入参数类型和SQL配置文件中parameterType类型相同。

    3.方法的返回值类型和SQL配置文件中resultType类型相同。


更改conf.xml中

<mappers>
    <mapper resource="student/mapper/studentMapper.xml"/>
  </mappers>


新建一个student.mapper包,将studentMapper.xml放入,并且创建一个StudentMapper的接口。

MyBatis


修改SQL映射文件studentMapper.xml的namespace(MyBatis就是通过namespace的值来定位接口的路径)

MyBatis

修改conf.xml的mappers

MyBatis

编写测试代码

MyBatis


执行结果:

MyBatis


查询所有学生,增加学生信息,修改学生信息,删除学生只需要在SQL映射文件(Mapper.xml)中编写SQL语句,再在接口中根据SQL映射文件的id作为接口中方法的方法名,输入参数类型作为接口中本方法的输入参数(如果没有输入参数,则不写)。输出参数类型作为借口中本方法的暑促参数类型(如果没有输出参数,则写void即可)最后编写测试类。通过传入接口返回的mapper对象调用接口中的方法。


SQL语句中的参数

    例如以上的#{sno}会自动给sno加上双引号,参数也可以为${sno}(此方法如果是八个基本类型和String参数必须为value,即${value},如果是其他类型,则可以随意。此方法不加双引号,但是此方法不能防止SQL注入)


如果数据库字段的数据类型与对象(Student)的数据类型不一致或字段名

    则需要将输入参数的类型(resultType)改为resultMap来指定类中的属性和表中的字段对应关系。

假设数据库的sno字段名(假设为id)和student对象的名字不一致

MyBatis


设置别名。在conf.xml中为实体类定义别名

MyBatis

(注:即将mapper.xml的resultType如果是student.entity.Student可以直接写为Student)


输入参数为实体类的对象

    如果传入参数是一个实体类的对象,则在SQL配置文件中解析时,一定要确保${}或#{}中的参数名必须是实体类对象的属性名   


输入参数为HashMap对象

    给SQL配置文件传入一个HashMap类型的参数,并通过${key值}或#{key值}获取对应的value值

编写mapper.xml将输入参数改为HashMap

MyBatis

编写接口,输入类型为HashMap类型

MyBatis

编写测试类和运行结果

MyBatis

(以上输出参数与输入参数同理。)


MyBatis提供了<if><where><foreach>等标签来实现SQL语句的动态拼接。

创建一个Grade的帮助类(一个班有多个学生)

编写mapper.xml

(注:输入参数为年级)

动态代理与测试同上,只是更改输入与输出参数。



以上是关于MyBatis的主要内容,如果未能解决你的问题,请参考以下文章

MybatisMyBatis 注解方式的基本 用法

MybatisMyBatis之缓存

MyBatisMyBatis的增删改查

Mybatismybatis登录实例

MybatisMybatis基础(中)

MybatisMybatis缓存