前几天研发的时候遇到了一个问题,需求是这样的,言简意赅就是要让查询结果多查出来几个字段。具体的实现也不用写太多的业务逻辑代码,就是改sql,我要在别人写好的sql语句上,来改进sql语句从而实现这个功能。但是看了Mapper层写的方法返回的集合的泛型实体类,发现该集合的泛型实体类中的属性并不能与查询结果的字段一一对应。
举个简单的例子,也就是说:XxxMapper.java文件中List<A> 方法名(参数1,参数2……)中的实体A中的属性只有name和gender。而我这个List<A> 方法名(参数1,参数2……)方法对应的sql语句,却是要查出来name、gender之外的age属性(有人会问了,一个实体类在设计的时候就是对应数据库的一张表啊,实体类的属性跟数据库那张表的字段一一对应,那这个age字段就不应该有啊。这里说明一下,其实这个age字段,是通过多表联查取到的,也就是说,这个age字段是在另外一张表上。)
那么这个时候就显而易见的出现了一个问题了,这个方法里面的泛型A,显然接不住age这个字段。因为属性就name和gender嘛,怎么接?
接不住怎么办?
Mybatis-plus有个注解能够很好的帮助我们解决了这个令人苦恼的问题,那就是@TableField。
@Tablefield是用来指定属性对应的字段名,@Tablefield(exist=false)用来表示该属性并不是对应数据库中的字段的。而该属性可能是因为前端的需要,在项目中必须使用。该注解的使用为加在实体类的属性上,而该属性必须是数据库中数据表中不存在的字段。
2023.1.11更新。补充对@Tablefield注解的详细说明。
@Tablefield注解可以指定字段的属性,常用来解决以下场景的问题:
1.对象中的属性名和字段名不一致的问题(非驼峰)
2.对象中的属性字段在表中不存在的问题(表中有这个字段但是代码中实体类属性名想另取)
对象中的属性字段在表中不存在的问题(表中压根没有这个字段,这种情况我在上面已经详细举例并且介绍了场景及使用效果,不再过多赘述。)
下面来针对1和2来进行场景举例和介绍:
场景1:假如代码中有个User实体类,User内有对象属性username,该字段对应数据库里面的User表的user_name字段,此时在实体类中的user_name属性上加上注解@Tablefield(value="user_name")即可
场景2:假如代码中有个User实体类,User内有对象属性eamil,该字段对应数据库面的User表的mail字段,此时在实体类中的eamil属性上加上注解@Tablefield(value="mail")即可。
在 MyBatis-Plus 中,@TableField 注解用于指定 Java 类字段和表列之间的映射。此注解的 updateStrategy 属性可用于指定在更新操作期间如何处理该字段。
该更新策略属性可以采用四种可能的值:
FieldStrategy.IGNORED:在更新操作期间将忽略该字段,如果该字段为null 将在数据库设置为null
FieldStrategy.NOT_NULL:该字段将插入或更新为非空。
FieldStrategy.NULL:该字段将插入或更新为空。
FieldStrategy.DEFAULT:当值不为 null 时将更新该字段
在您提供的示例中,使用的策略是 FieldStrategy.IGNORED,这意味着在更新此字段时,将不会更新数据库中的该列,并且此字段的任何现有值将被忽略,不包括在更新中。
我希望我的UserPrice模型的属性在它们为空或不验证数值时默认为0。这些属性是tax_rate、shipping_cost和price。classCreateUserPrices8,:scale=>2t.decimal:tax_rate,:precision=>8,:scale=>2t.decimal:shipping_cost,:precision=>8,:scale=>2endendend起初,我将所有3列的:default=>0放在表格中,但我不想要这样,因为它已经填充了字段,我想使用占位符。这是我的UserPrice模型:classUserPrice回答before_val
我有一个包含模块的模型。我想在模块中覆盖模型的访问器方法。例如:classBlah这显然行不通。有什么想法可以实现吗? 最佳答案 您的代码看起来是正确的。我们正在毫无困难地使用这个确切的模式。如果我没记错的话,Rails使用#method_missing作为属性setter,因此您的模块将优先,阻止ActiveRecord的setter。如果您正在使用ActiveSupport::Concern(参见thisblogpost),那么您的实例方法需要进入一个特殊的模块:classBlah
我有一个具有一些属性的模型:attr1、attr2和attr3。我需要在不执行回调和验证的情况下更新此属性。我找到了update_column方法,但我想同时更新三个属性。我需要这样的东西:update_columns({attr1:val1,attr2:val2,attr3:val3})代替update_column(attr1,val1)update_column(attr2,val2)update_column(attr3,val3) 最佳答案 您可以使用update_columns(attr1:val1,attr2:val2
我有这个html标记:我想得到这个:我如何使用Nokogiri做到这一点? 最佳答案 require'nokogiri'doc=Nokogiri::HTML('')您可以通过xpath删除所有属性:doc.xpath('//@*').remove或者,如果您需要做一些更复杂的事情,有时使用以下方法遍历所有元素会更容易:doc.traversedo|node|node.keys.eachdo|attribute|node.deleteattributeendend 关于ruby-Nokog
对于Rails模型,是否可以/建议让一个类的成员不持久保存到数据库中?我想将用户最后选择的类型存储在session变量中。由于我无法从我的模型中设置session变量,我想将值存储在一个“虚拟”类成员中,该成员只是将值传递回Controller。你能有这样的类(class)成员吗? 最佳答案 将非持久属性添加到Rails模型就像任何其他Ruby类一样:classUser扩展解释:在Ruby中,所有实例变量都是私有(private)的,不需要在赋值前定义。attr_accessor创建一个setter和getter方法:classUs
?博客主页:https://xiaoy.blog.csdn.net?本文由呆呆敲代码的小Y原创,首发于CSDN??学习专栏推荐:Unity系统学习专栏?游戏制作专栏推荐:游戏制作?Unity实战100例专栏推荐:Unity实战100例教程?欢迎点赞?收藏⭐留言?如有错误敬请指正!?未来很长,值得我们全力奔赴更美好的生活✨------------------❤️分割线❤️-------------------------
所以这可能有点令人困惑,但请耐心等待。简而言之,我想遍历具有特定键值的所有属性,然后如果值不为空,则将它们插入到模板中。这是我的代码:属性:#===DefaultfileConfigurations#default['elasticsearch']['default']['ES_USER']=''default['elasticsearch']['default']['ES_GROUP']=''default['elasticsearch']['default']['ES_HEAP_SIZE']=''default['elasticsearch']['default']['MAX_OP
假设我有以下类(class):classPersondefinitialize(name,age)@name=name@age=ageenddefget_agereturn@ageendend我有一组Person对象。是否有一种简洁的、类似于Ruby的方法来获取最小(或最大)年龄的人?如何根据它对它们进行排序? 最佳答案 这样做会:people_array.min_by(&:get_age)people_array.max_by(&:get_age)people_array.sort_by(&:get_age)
我想为我的Task模型创建一个status属性,该属性将按以下顺序指示它在三部分进度中的位置:打开=>进行中=>完成。它的工作方式类似于亚马逊包裹的交付方式:已订购=>已发货=>已交付。我想知道设置此属性的最佳方法是什么。我可能是错的,但创建三个独立的bool属性似乎有点多余。实现此目标的最佳方法是什么? 最佳答案 Rails4有一个内置的enummacro.它使用单个整数列并映射到键列表。classOrderenumstatus:[:ordered,:shipped,:delivered]end状态映射如下:{ordered:0,
我正在尝试将一个资源属性的默认值设置为另一个属性的值。我正在为我正在构建的tomcat说明书定义一个资源,其中包含以下定义。我想要可以独立设置的“名称”和“服务名称”属性。当未设置服务名称时,我希望它默认为为“名称”提供的任何内容。以下不符合我的预期:attribute:name,:kind_of=>String,:required=>true,:name_attribute=>trueattribute:service_name,:kind_of=>String,:default=>:name注意第二行末尾的“:default=>:name”。当我在Recipe的新block中引用我