MyBatis
Posted 温尔昔昔
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MyBatis相关的知识,希望对你有一定的参考价值。
一、ORM
“持久化”是将内存中的数据模型转换为存储模型,以及将存储模型转换为数据模型的统称(数据模型可以是任何数据结构或对象模型,存储模型可以是关系型数据库、XML文件、二进制文件等)
ORM是对象持久化或持久化层的实现的最佳方案。主要把对象模型和关系型数据库关系模型映射起来,使用元数据对这些数据进行描述。
ORM解决方案主要提供四个主要功能:
基本增删改查的API
对象或属性查询的API
规范映射元数据。ORM解决方案需要规范映射的方式,通常选择XML存储映射元数据,因为XML便于读取和规范格式。
事务控制、延迟加载等优化功能。
二、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的配置文件
编写测试类
执行结果:
使用Mapper动态代理优化
新建接口,在接口中定义操作数据库的方法:
1.方法名和配置文件中相关的方法id值相同。
2.方法的输入参数类型和SQL配置文件中parameterType类型相同。
3.方法的返回值类型和SQL配置文件中resultType类型相同。
更改conf.xml中
<mappers>
<mapper resource="student/mapper/studentMapper.xml"/>
</mappers>
新建一个student.mapper包,将studentMapper.xml放入,并且创建一个StudentMapper的接口。
修改SQL映射文件studentMapper.xml的namespace(MyBatis就是通过namespace的值来定位接口的路径)
修改conf.xml的mappers
编写测试代码
执行结果:
查询所有学生,增加学生信息,修改学生信息,删除学生只需要在SQL映射文件(Mapper.xml)中编写SQL语句,再在接口中根据SQL映射文件的id作为接口中方法的方法名,输入参数类型作为接口中本方法的输入参数(如果没有输入参数,则不写)。输出参数类型作为借口中本方法的暑促参数类型(如果没有输出参数,则写void即可)最后编写测试类。通过传入接口返回的mapper对象调用接口中的方法。
SQL语句中的参数
例如以上的#{sno}会自动给sno加上双引号,参数也可以为${sno}(此方法如果是八个基本类型和String参数必须为value,即${value},如果是其他类型,则可以随意。此方法不加双引号,但是此方法不能防止SQL注入)
如果数据库字段的数据类型与对象(Student)的数据类型不一致或字段名
则需要将输入参数的类型(resultType)改为resultMap来指定类中的属性和表中的字段对应关系。
假设数据库的sno字段名(假设为id)和student对象的名字不一致
设置别名。在conf.xml中为实体类定义别名
(注:即将mapper.xml的resultType如果是student.entity.Student可以直接写为Student)
输入参数为实体类的对象
如果传入参数是一个实体类的对象,则在SQL配置文件中解析时,一定要确保${}或#{}中的参数名必须是实体类对象的属性名
输入参数为HashMap对象
给SQL配置文件传入一个HashMap类型的参数,并通过${key值}或#{key值}获取对应的value值
编写mapper.xml将输入参数改为HashMap
编写接口,输入类型为HashMap类型
编写测试类和运行结果
(以上输出参数与输入参数同理。)
MyBatis提供了<if><where><foreach>等标签来实现SQL语句的动态拼接。
创建一个Grade的帮助类(一个班有多个学生)
编写mapper.xml
(注:输入参数为年级)
动态代理与测试同上,只是更改输入与输出参数。
以上是关于MyBatis的主要内容,如果未能解决你的问题,请参考以下文章