看提示信息是eq方法报的,应该是column字段问题
@Test public void Batch(){ Displacementinfor displacementinfor = new Displacementinfor(); displacementinfor.setEquipname("趋势GNSS高精定位仪"); displacementinfor.setLongitude(102.123456f); Displacementinfor displacementinfor1 = new Displacementinfor(); displacementinfor1.setEquipname("大趋势"); displacementinfor1.setLongitude(34.123456f); List<Displacementinfor> displacementinfors = Arrays.asList(displacementinfor, displacementinfor1); boolean saveBatch = displacementinforService.saveBatch(displacementinfors); System.out.println(displacementinforService); }
网站规定,免费课程不提供源代码。建议你自己敲一敲,练一练。也可以参考其他同学分享出来的。
区别很多啊,例如mp方便的条件构造器,逻辑删除,自动填充等等,这些都是hibernate没有的,你如果对两个框架深入了解,就自然会知道。
getOne是在通用service中定义的方法,如果用的是mapper,应该是selectOne,你看看你是不是找错地方了。
同学,MP的入门课程到7-1就结束了。我还有其他课程,有兴趣你可以学习一下。
《MyBatis-Plus进阶》地址:https://www.imooc.com/learn/1171
《MyBatis-Plus + SpringBoot实现简单权限管理》地址:https://www.imooc.com/learn/1294
同学,你这样创建条件构造器试试Wrappers.<User>lambdaQuery()
你配置的MapperScan注解中的路径是否包含了service的路径,如果包含了,是不可以的,MapperScan的路径只能包含mapper接口。还有service实现类中加@service注解了吗?测试类,是否跟启动类在相同的目录下或者子目录下?
。。。。。忘记写属性注入了问题怎么撤销
找到问题就好,确实写错注解了,应该在配置类上增加@Configuration注解。
多表操作只能自己写sql了。MP主要是提供了方便的单表操作方法。
从你的这个需求上看,如果没有单独的作业service、controller,动作的发起者是老师,一般可以写在teacher对应的service中,在teacherService中注入studentMapper,作业Mapper,单独写一个方法实现老师收取学生作业,最后可以在teacheController中调用这个方法。如果单独写作业的service、controller,那么老师收取学生作业这个方法的业务逻辑可以写在作业service中,然后作业controller中暴露给外界。
可以这样写,前提是开发公司项目时,公司的规范中,不要求必须写service接口。
你好,同学,我个人认为:
1、使用通用service的话,简单的逻辑可以写在controller中,例如就是前台传个id,你进行删除,或者查询返回给前端,你直接调用通用service的方法就可以了,不用在service层再写一遍方法。
2、如果是复杂的逻辑,建议是写在service层里,你自己写实现方法即可。而且你的service不是继承mp的通用service吗,就一层service啊,不用再套一层service。
你好,UserService上增加@Service注解了吗?
MP的条件构造器可以实现类似于if这种动态sql,例如条件构造器的eq,ne, like等方法,都有一个两个参数的和三个参数的重载方法,三个参数的那类方法。第一个参数是一个boolean类型的值,就是用来做条件判断的,判断该句是否最终加入到sql中,为true就加入,为false就不加人。我在课程中有讲。
你指的是字段忽略策略吧。可以,默认是更新实体的时候忽略为null的属性。而且这个策略你可以修改,例如某个属性改为空串忽略或者不忽略,我课程里都讲了。
没太明白你的意思,你是要在其他service中写方法,方法中一堆crud操作,然后在这个方法中用另一个注入的service链式调用,还想加事务,是吗?如果是这样,在方法中加事务注解就可以了呀。
你好,同学,你说的转化是保存到数据库中,还是想转换成json数据给前端呀。我试验了一下,保存数据是没有问题的,实体类中如果字段为LocalDate。如果你使用的是mysql数据库,可以对应的表字段类型为date,如果你使用的是datetime,那么保存的日期正常,时间是00:00:00。如果是要将pojo对象转换成json串的话,不同的框架处理的方式有些不一样,fastjson和jackson2都有格式化的注解,你试试是否可行,如果还不能转换,可自定义该类型的转换方法,也是不同框架的实现方式不一样。
我再重发一遍,刚才在你下面留言,不知道为啥被截断了。这不是子查询,MP应该是解决不了这个问题,我的办法就是使用OrderMaster的Mapper先查询OrderMaster。然后用OrderDetail的Mapper根据主表的主键查询从表数据,最后把从表数据赋值到OrderMaster对象上。就是两次查询。
还有个办法就是用mybatis原生的resultMap中配置collection的这种方式。
同学你好,这个问题可能没有标准答案,我说说我的看法,使用MP,你的service可以继承mp的通用service。在通用service中已经把操作本实体的mapper给你注入进来了。你可以在service中实现一个根据年龄查询用户的方法。如果其他service要用,有一种方式是把这个service注入到另一个service中,直接调用,但这种使用方式有争议,有的单位不让这么干,因为同层依赖了。
方式二,你这个查询可以写在Mapper中,就是原生的Mybatis怎么写,你就怎么写,然后哪个service使用,就把这个Mapper注入到哪个service中。
方式三,你的这个需求很简单,一句就能解决,我感觉多次编写也无伤大雅,可以重复编写。
mp的代码生成器,默认不支持生成JSR注解。
同学,没明白你的意思,数据库连接逻辑怎么放到业务层?如果你整合springboot,数据库的连接是连接池给你维护的。分层的目的是为了逻辑清晰,易于扩展和维护。单表查询可以在业务层继承mp的通用service。它自己注入了dao层的mapper接口。两张表连接确实只能自己写sql。
你好,十分抱歉,网站规定免费课程不提供源代码。我看有的同学在评论区和问答区把自己参照视频敲的代码分享出来了,你可以找找,参考一下。
官方那么写是为了让你清晰的看到,Map中的key是什么,value是什么,是为了直观展示。程序中没有这种写法。我也是new个Map,暂时没研究出什么更优雅的方法。
你好,一对多查询原生Mybatis就支持的,可以用<collection>标签,你上网查查,很多教程的。
正常情况下是好使的,我怀疑应该是你的@MapperScan注解,配置的包扫描路径不对或扫描范围过大。@MapperScan中的路径应该只包含Mapper接口,不能扩大范围将Service接口等也扫描进去了,不然它为认为你的service接口也是Mapper接口,从而导致错误。
据我了解,MP不支持联合主键。
这部分目前我没录制视频,官网有代码生成器的教程,写的比较详细,不但可以生成实体,还可以生成Mapper接口,xml文件,service及Controller,官方教程地址为:https://mybatis.plus/guide/generator.html
代码生成器