mybatis要用到的有mapper映射器和mapper映射器接口,dao数据访问,entity实体类,Test测试类
现在我们来说一下使用mybatis时会遇到问题
首先是主配置文件(mybatis-config.xml)可能遇到的问题
主配置文件中 首先要配置数据库的连接操作,主要是先配置此项目要用到的数据库,如果配置的数据库名称与用到的不匹配则会报错(Unknown database)未知的数据库
:
连接好数据库之后,要在主配置文件中加载映射文件,操作如下
如果我们将映射接口名称写错则会出现一下这个问题,由此我们也能总结出,出现框选中的错误就是主配置文件中映射器加载错误,这样就能够很快定义到问题的所在之处
主配置文件基本上会出现这两个问题
现在我们来说一下映射器中会出现的问题
出现框中的问题,我们就应该知道是SQL语句的错误
当我们在mapper映射器中写好了Mapper statement时,可以将此操作封装在接口中便于测试并且减少错误,在写映射接口的同时我们往往会出现一些错误
这是一个映射器操作的简单配置
这是映射器接口
当我们没有将接口名称与映射器 接口中Mapper statement操作的id对应时会出现以下问题:
出现框选中的这个问题(找不到绑定的操作),就应该定位到接口名是否与映射器中的id保持一致。
映射器与实体类会出现的错误,以下是映射器中的SQL配置和实体类的属性设置
如果sql语句中的值与实体类属性值不一样则会出现以下错误
这个错误出现我们就可以在sql语句和实体类属性名称这里找错误。
以上是Mapper映射器中容易出现的错误。
现在我们来说一下映射器接口中容易出现的问题(具体看以下示例)
首先 接口名称要与映射器中Mapper statement操作的id对应
接下来我们在接口中传参会遇到一些问题,在保证没有别的问题,当我们传一个参时程序会正常运行,但是传多个参不处理时会出现问题
框中是我们将要传的参数
如果不对其进行处理,按照一般的方法传参
我们在测试时会遇到以下问题
当出现这个问题我们就知道是没有处理传入多个参数的问题,以致于找不到我们传入的参数
那么出现此类问题我们应该如何解决?
(1)第一种是使用Map封装多个参数,在测试时用map的put()方法将键值对添加进去
具体实现如下
映射器接口中的方法
测试类中的添加操作
(2)第二种方法我们可以用@Param注解的方式解决,注解中的字段名要与mapper映射器中动态传的值的名字一致
使用注解的方式虽然简单易操作但是如果遇到传很多个值的情况,这样就显得麻烦,所以这个方法只适用于传少量参数的情况。
(3)当我们传入的参数过多 我们可以使用第三种方法 JavaBean传入多个参数,将参数封装
这是封装这些参数的类
参数与类中的属性值一 一对应
在该操作对应的映射器接口方法中传入该类对象就可以将传入多个参数
在处理多个参数传入的问题上,参数过多,我本人建议使用JavaBean传入多个参数,减少出错率,从而会使程序更具有逻辑性。
我们在测试类中测试我们写的映射操作时要先将mybatis的主配置文件加载出来
如果每次测试都重复以上步骤,太过麻烦,所以我们把相同的操作都封装在一个工具类中存放在dao包下这样我们每次测试时只用调用该类的getSqlSession()方法即可
这是创建SQLSession的工具类
这是调用时的操作
在保证其他操作没有问题时,那么我们如何在测试类测试我们的程序呢?
操作如下(要将SQLSession 放在try catch块中用完自动关闭)
在测试类中要注意调用的方法名是否与映射器节点的id一致,注意传参的类型以及方法的返回值类型是否与接口中的方法一致。
注:
mybatis底层使用了反射,我们在Mapper映射器中设置的Mapper statement操作,它的映射节点的返回值类型是当前实体类的完全限定名 ,当我们执行该操作时,mybatis会根据该返回值类型创建实体类的对象,如果实体类中没有构造方法,则默认调用的是该实体类的无参构造方法,但如果有有参构造方法,没有无参构造方法,我们在执行这个操作时应该创建一个无参构造方法,否则会自动调用该类的有参构造方法有时会导致程序运行错误。
以上就是我在mybatis中容易遇到的一些问题,整理出来希望能帮到大家!