(mybatis)直接执行sql结果为空,但是session.selectList出的list结果中包含了一个属性为null的bean对象

(mybatis)直接执行sql结果为空,但是session.selectList出的list结果中包含了一个属性为null的bean对象,第1张

今天碰巧遇到这个问题了,原因是关联表查询的问题,第一个表关联查的时候对应的关联表中的记录有多条的情况,这时候第一个表有记录但是关联的时候就没有合适的值(根据你要查的列而定);比如c left join d 这个时候要是c中的一条记录对应d中的可能有多条记录,而你要查的列又都是d中的字段,出来的就是all element is null 但是size=1;

解决办法:1将你获取的list去除null元素;

2查询的时候加d的判断条件,比如did is not null

创建数据库

选择开始菜单中→程序→Management SQL Server 2008→SQL Server Management Studio命令,打开SQL Server Management Studio窗口,并使用Windows或 SQL Server身份验证建立连接。

对象资源管理器窗口中展开服务器,然后选择数据库节点

右键单击数据库节点,从d出来的快捷菜单中选择新建数据库命令。

执行上述 *** 作后,会d出新建数据库对话框。在对话框、左侧有3个选项,分别是常规、选项和文件组。完成这三个选项中的设置会后,就完成了数据库的创建工作,

在数据库名称文本框中输入要新建数据库的名称。例如,这里以“新建的数据库”。

在所有者文本框中输入新建数据库的所有者,如sa。根据数据库的使用情况,选择启用或者禁用使用全文索引复选框。

在数据库文件列表中包括两行,一行是数据库文件,而另一行是日记文件。通过单击下面的添加、删除按钮添加或删除数据库文件。

切换到选项页、在这里可以设置数据库的排序规则、恢复模式、兼容级别和其他属性。

切换到文件组页,在这里可以添加或删除文件组。

完成以上 *** 作后,单击确定按钮关闭新建数据库对话框。至此“新建的数据”数据库创建成功。新建的数据库可以再对象资源管理器窗口看到。

问题:运行 mybatis-generator 是报错: Failed to execute goal orgmybatisgenerator:mybatis-generator-maven-plugin:135Access denied for user ‘root‘@‘localhost‘ (using password: NO)

前提是:我在DOS命令下等正常连接mysql,那就排除mysql服务是否启动相关的问题;我是新手,常常犯的错误就是单词拼写错误,那接下来我就比对两个有做mysql配置相关的文件做了检查,一个是applicationproperties,另一个是 mybatis-generatorxml ,在对比的过程中我就发现这两个文件的mysql密码是对不上的,瞬间six屎啦!

前段时间跟踪 MyBatis 源码,分析 MyBatis 的分页查询结果后,发现传入的 IPage 参数结果已经包含了查询数据了,以为分页查询语句的关键在于第一个入参必须是 IPage ,而不需要返回值了呢。

昨天发现不是这么回事儿,本文再回顾一下 MyBatis 分页插件的用法及三个发现:

本文讲解答上面三个问题。

第一步 ,设置分页查询插件。

第二步 ,编写分页查询 DAO 方法:

该方法执行完成后,查询数据会存储到 iPage 参数中,可以直接获取方法返回值。值得注意的是,这个方法必须有返回值。

我最初以为,查询结果都存储到参数中了,是不是方法定义中可以不用返回值了。昨天编码时就随手写成这样了:

结果,执行报 了 SQL 异常:

纳闷了半天,这分页查询怎么就变成了单条查询了呢?对比旧项目代码,还原分页查询方法,正常了。

结论 :MyBatisPlus 分页方法返回值必须是 IPage ,不能为 void 。

以往页面的分页查询,每页数据都很少,没有发现这个问题。

这次实现的是一个批处理任务,一次处理的数据要尽量大。 iPage 分页参数 size 初始设置为 1000,发现日志输出的记录数总是 500 条 ,分页参数失效了,为何呢?

使用客户端连接数据库查询,一次能取 1000 条,而 MyBatisPlus 分页查询,这个 500 条是谁控制的呢?能否修改呢?

答案是 : PaginationInterceptor 限制了单页条数 500,如果需要,可以这样修改:

业务要求某个任务设计成多机、并行任务,且要保证数据一致。Quartz 框架的分布式任务只能保证任务被一个节点执行,不符合需求,Spring Task 倒是可以实现。

所以问题就变成分布式锁的设计了,参考 Quartz 的集群方案中的锁机制,实现基于数据库行锁的锁。

没测试基于行锁的分布式锁之前,我以为某个事务执行 select for update 之后,其他事务再对相同记录执行该 *** 作的话,应该会报异常,导致锁获取失败。

测试发现,某条记录被锁定之后,交互流程大概是这样的:

结论 :数据库记录的行锁是排他的,其他事务会阻塞等待。

辛丑年腊月二十八,上述就是今年最后一个工作日的总结。

收拾收拾,准备迎接农历新年!

SqlSessionFactoryBuilder 的实例化分两步。第一步 解析配置文件 得到configuration对象,第二步实例化DefaultSqlSessionFactory记录configuration。

sqlSessionFactoryopenSession()这一步就厉害了,完成了事务管理对象实例化、执行器实例化、执行器代理(拦截器链)。到这一步为止完成了defaultSqlSessionFactory会话创建。

sqlSessiongetMapper()是通过从configuration的mapperRegistry中获取mapperclass的MapperProxyFactory对象,再用MapperProxyFactory对象生产出一个MapperProxy的代理对象。到这里完成了对mapper类代理对象的创建,后续调用mapper类的方法时将会由mapperProxy处理。

userMapperqueryUser()真正做事的时候到了。由上文可知mapper类的方法被调用时将会由mapperProxy代替处理,所以第一站就是mapperProxy的invoke()

由下图可知,缓存的位置位于CachingExecutor中的localCache,

而Executor是在openSession时创建,由此可知一级缓存是sqlSesssion级别的。

cacheKey的组成:ms, parameter, rowBounds, boundSql

由下图可知,二级缓存与MappedStatement有关,在MappedStatement中共享一个Cache对象,而MappedStatement位于configuration,所以二级缓存可以跨sqlSession。

以上就是关于(mybatis)直接执行sql结果为空,但是session.selectList出的list结果中包含了一个属性为null的bean对象全部的内容,包括:(mybatis)直接执行sql结果为空,但是session.selectList出的list结果中包含了一个属性为null的bean对象、maven搭建spring mvc mybatis 是怎样连接数据库的、新手spring整合mybatis报错连接数据库失败等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/sjk/9274717.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-26
下一篇2023-04-26

发表评论

登录后才能评论

评论列表(0条)

    保存