关于数据库列名和实体类名称不一致的情况

很多时候我们会因为数据库列名和实体类名称不一致的情况,导致无法执行正常的业务逻辑功能,关于这个问题我有以下几点总结:

  1. 首先是设计数据库和实体类的时候,尽量保证数据库表的字段名称和实体类的属性名保持一致,这样可以防止后期做映射,如果不考虑代码的规范性的话是推荐使用的,这里的规范性指的是,数据库表的字段名如果有多个单词,那么尽量使用下划线进行分隔,实体类的属性是采用驼峰命名
  2. 如果从代码的规范性上来考虑的话,可以使用结果集映射来完成,就是说使用resultMap进行映射或者使用as关键字,但是推荐使用前一种
    • 关于resultMap,有以下几个注意点:
      • 首先,为了代码更加整洁,在使用映射的时候,最好是如果数据库表的字段名和实体类的属性名一致的时候,不需要进行映射
      • 然后就是就是如果数据库表的字段名是主键的话,最好使用id而不是用result来进行映射,但是使用result来映射也可以正常运行

关于映射的注解

还有就是在进行参数传递的时候,如果mapper层的方法的形参和xml文件中的实参不一致的时候,可以使用@Param注解,这个注解有一个属性value,用于指定xml文件的实参的名称,因此即使mapper层接口的方法的形参名和xml文件的实参名称不一致依然可以完成值的注入

然后还有一个注解@RequetsParam,见名知义,就是请求参数,就是解决请求参数和controller方法的形参不一致的情况,该注解有一个属性value表示url路径中的参数。

在编写controller层的方法的时候,当该方法的参数是对象类型的时候,实际上在url拼接传参的时候,将对象的属性作为参数拼接到url中,就可以实现值的注入,这是因为springmvc为我们做好了映射的工作

在插入数据的时候注意的问题

  1. 还有就是需要注意的一点就是在插入数据的时候不使用where条件子句,因为插入是直接插入,不需要什么条件,只需要知道向哪个表中插入即可
  2. 在进行插入数据操作的时候,如果数据库表的字段id是主键自增的,在插入的时候,可以不插入主键这一个数据,但是在表的后面需要声明插入的字段名称:
insert into t_user(name,age) values(#{name},#{age})

只能使用这种形式才能忽略表中的字段,其他方式都会报错,因此在今后的实践中,最好是在插入数据的时候,也声明表的字段名称

在设计mapper层接口的方法的时候

注意的点是当xml中的sql语句的参数比较多的时候,应该优先考虑传递对象类型的参数,因为传入对象类型的参数的时候,mybatis会根据数据库表的名称与与实体类的属性名称一致的来进行注入

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐