在了解我们今天的主角JDBC之前呢,我们先来浅谈一下JDBC(有关JDBC的简单介绍,可以参考我的上一篇博客)JDBC作为底层技术呢,它有以下几个弊端:
从上图可以看出,我们的mybatis完美的解决了JDBC的几个弊端,Mybatis是一个半自动的化的ORM模型,它可以实现定制Sql语句,存储过程和高级映射。(还有一个全自动化的ORM模型,Hibernate,以后再为大家介绍)下来我就为大家介绍以下mybatis映射器的用法。
从官网下载mybatis以及相关的依赖包,将所有的jar包导进我们的java项目中,如下图所示,项目的每个包分工如下,下来我们来了解一个每个包的作用。
1.实体类:根据表的字段创建相应的实体类(包括get、set、toString方法、无参满参构造),将表中的字段映射到实体类对象中,需要注意的是,我们在创建实体类时,字段名如果和属性名不一致,会导致查询出来的结果为空,需要进行特殊的处理。
2.获取资源:将获取数据库资源和关闭资源都放在DaoUtil文件下,用类名直接调用静态方法
3.接口和mapper.xml文件:接口中写各种抽象方法,通过抽象方法来找到我们mapper文件中的sql语句,需要特别注意的是,mapper.xml文件中的sql语句的id是唯一的不能重复的,而我们要通过我们的抽象方法名来找到我们的sql语句,所以说我们的抽象方法名不能重复,所以这里方法的重载就用不上了。
如上图所示,我在接口文件中定义了五个方法,分别是学生表的增删改查,下来,我就在sql映射文件中来写sql语句,来实现这些方法。
①新增方法,如下图所示,写法上有些需要特别注意的地方。
② 删除方法:
③修改方法:
④全部查询:
⑤根据条件单独查询:
以上几种都是单表查询的实现,都比较简单,在写的时候需要注意以下入参和出参类型就行。
4.测试类:在测试类中可以直接调用对应的方法名,来实现对数据库的增删改查。
如上图所示,我举了一个新增的例子,这里需要注意的是,我们在新增的时候必须要提交事物,否则数据是新增不到数据库中的。其他的删、改、查所用到的方法都差不多。
5.主配置文件:如下图所示,在配置文件中,定义了数据库链接池,来解决JDBC资源浪费的问题
上面就是利用sql映射文件的方式来实现映射,接下来简单介绍一下通过注解的方式来实现映射:
如下图所示,我通过注解的方式依旧可以实现对学生表的增删改查,只是这样一来硬编码问题就依然存在,既然如此,我们为什么要采用这种方式呢,因为他在进行单表查询的时候很方便,但是复杂的查询,由于查询语句比较麻烦,所以用这种方式相对来说比较复杂,此时就会用到我们的mapper.xml映射文件来实现,总之这两种方法各有千秋,我们在使用的时候可以选择
单表查询说完了之后,我们来说一下多表联查的情况,因为在大多数情况下,多表联查的形式还是多一点,说到多表联查,就不得不提一下表之间的关系问题:一对一联查,一对多联查,多对多联查,多对一联查,这里我们只讨论一下一对一和一对多的联查方式:
1.一对一联查:以学生和班级表为例,学生看班级就是一对一的关系,下来就演示一下这两张表联查。如下图所示,在学生的实体类中建立一个类型为Banji类型的属性,然后在我们的映射文件中利用resultMap标签和association标签来实现一对一的关系,需要主要的是,这里所有的字段名和属性必须要写上。
2.一对多联查:从班级来看学生,就是一对多的关系,如下图所示,和一对一的关系很类似,我在班级的实体类中建了一个学生类型的list集合,来映射学生数据,在映射文件中利用collection标签来实现一对多。