MyBatis

Mybatis 分页查询

假如想象 提交于 2020-12-16 06:02:27
<select id="getAllMateriel" resultType="Materiel" parameterType="Page"> Select *,(select count(*) from Materiel_Info)as total FROM ( select ROW_NUMBER()Over(order by MaterielCode desc) as rowId,* from Materiel_Info) as mytable <where> <if test="start !=null and end !=null"> rowId between #{start} and #{end} </if> <if test="materielCode != null and materielCode !=''"> AND materielCode like '%${materielCode}%' </if> <if test="materielName !=null and materielCode !=''"> AND materielName like '%${materielName}%' </if> <if test="spec !=null and spec !=''"> AND spec like '%${spec}%' </if> </where> <

你还在用分页?试试 MyBatis 流式查询,这个你知道吗?

╄→尐↘猪︶ㄣ 提交于 2020-12-16 01:12:35
基本概念 流式查询指的是查询成功后不是返回一个集合而是返回一个迭代器,应用每次从迭代器取一条查询结果。流式查询的好处是能够降低内存使用。 如果没有流式查询,我们想要从数据库取 1000 万条记录而又没有足够的内存时,就不得不分页查询,而分页查询效率取决于表设计,如果设计的不好,就无法执行高效的分页查询。因此流式查询是一个数据库访问框架必须具备的功能。 流式查询的过程当中,数据库连接是保持打开状态的,因此要注意的是:执行一个流式查询后,数据库访问框架就不负责关闭数据库连接了,需要应用在取完数据后自己关闭。 先分享一个MyBatis知识点思维导图给大家 MyBatis 流式查询接口 MyBatis提供了一个叫org.apache.ibatis.cursor.Cursor的接口类用于流式查询,这个接口继承了java.io.Closeable和java.lang.Iterable接口,由此可知: Cursor 是可关闭的; Cursor 是可遍历的。 除此之外,Cursor 还提供了三个方法: isOpen():用于在取数据之前判断 Cursor 对象是否是打开状态。只有当打开时 Cursor 才能取数据; isConsumed():用于判断查询结果是否全部取完。 getCurrentIndex():返回已经获取了多少条数据 因为 Cursor 实现了迭代器接口,因此在实际使用当中,从

mysql SQL_CALC_FOUND_ROWS 特性: 一条 sql 语句同时查出总数及分页结果

末鹿安然 提交于 2020-12-15 09:43:13
展示分页列表是一个常见的开发需求, 需要查询出总数及分页数据. 传统分页查询做法 传统上, 这个一般是通过两条 sql 去实现. 先是查询总数, 比如这样: select count(*) from programmer where age >= 35; 然后再查分页结果: select * from programmer where age >= 35 limit 0, 10; 如果是简单的查询还好, 但对于一些复杂的涉及很多条件的查询, 往往需要重复那些条件. 注: 在 mybatis 中, 你可以把公共的条件抽取出来做成一个可复用模块, 不过这样一来结构就相对复杂了, 也不是那么直观. 那么, 是否有方式可以避免上述麻烦, 一条语句就可以查出总数及分页结果呢? 那就要用到 mysql 里的 SQL_CALC_FOUND_ROWS 特性了. SQL_CALC_FOUND_ROWS 特性 SQL_CALC_FOUND_ROWS 特性, 简单的讲, 就是可以让你在 limit 的分页查询中, 也能一起查到总数, 对于上述的代码示例, 具体是这样去操作的: select SQL_CALC_FOUND_ROWS * from programmer where age >= 35 limit 0, 10; 基本上, 就还是前述的分页查询, 但 select 后面增加了 SQL_CALC

Could not autowire. No beans of ‘xxx” type found(三种方法)

拈花ヽ惹草 提交于 2020-12-14 06:26:08
我当时提示错误是,不影响使用,可是就是报错让人不爽。 Could not autowire. No beans of 'RequestMappingHandlerMapping' type found. @Autowired private RequestMappingHandlerMapping requestMappingHandlerMapping; 后来改成@Resource注入,就不报错了, @Resource private RequestMappingHandlerMapping requestMappingHandlerMapping ; @ Autowired和@Resource区别一个是默认按照类型,一个默认按照名字;我小小的测试了下Autowired会拿着这个默认名称找类型,找不到就报错了。可是又能运行我就没深研究了。 这个要是自己写的实体,可以在实体上加对应的@Service("名称"),或者@Repository。 网上其他方法: 1.问题描述   在Idea的spring工程里,经常会遇到 Could not autowire. No beans of 'xxxx' type found 的错误提示。但程序的编译和运行都是没有问题的,这个错误提示并不会产生影响。但红色的错误提示在有些有强迫症的程序员眼里,多多少少有些不太舒服。 2. 原因 原因可能有两个

我整理了 15 张 Vim 速查表,喜欢收藏

旧时模样 提交于 2020-12-14 06:23:57
来源:www.jianshu.com/p/6aa2e0e39f99 去年上半年开始全面使用 Linux 进行开发和娱乐了,现在已经回不去windows了。 话归正传,在linux上一直使用vim,慢慢熟悉了它的命令,才终于领悟了什么是编辑器之神。 最近抽空整理了这份速查表,收获颇丰,并分享给大家。 tips : 关注公众号: Java后端,每日技术博文推送。 进入vim vim配置 移动光标 屏幕滚动 插 入文本类 删除命令 复制粘贴 撤销 搜索及替换 书签 visual模式 行方式命令 宏 窗口操作 文件及其他 - End - 技 术 连 载 目 录 ( 可 点 击 跳 转 即 可 阅 读 ) : 面试题系列教程 点击 --> 面试题 技术干货连载目录 跳转 Maven系列教程 点击 --> Maven技术干货连载目录 跳转 MyBatis系列教程 点击 --> MyBatis技术干货连载目录 跳转 JVM调优总结系列教程 点击 --> JVM调优技术干货连载目录 跳转 点 击 在 看 , 愿 你 我 不 再 陌 生 本文分享自微信公众号 - 程序员书单(CoderBooklist)。 如有侵权,请联系 support@oschina.cn 删除。 本文参与“ OSC源创计划 ”,欢迎正在阅读的你也加入,一起分享。 来源: oschina 链接: https://my

《深入理解mybatis原理》 MyBatis的架构设计以及实例分析

你。 提交于 2020-12-13 21:49:09
MyBatis是目前非常流行的ORM框架,它的功能很强大,然而其实现却比较简单、优雅。本文主要讲述MyBatis的 架构 设计思路,并且讨论MyBatis的几个核心部件,然后结合一个select查询实例,深入代码,来探究MyBatis的实现。 一、MyBatis的框架设计 注:上图很大程度上参考了iteye 上的 chenjc_it 所写的博文 原理分析之二:框架整体设计 中的MyBatis架构体图,chenjc_it总结的非常好,赞一个! 1.接口层---和数据库交互的方式 MyBatis和 数据库 的交互有两种方式: a.使用传统的MyBatis提供的API; b. 使用Mapper接口 1.1.使用传统的MyBatis提供的API 这是传统的传递 Statement Id 和查询参数给 SqlSession 对象,使用 SqlSession 对象完成和数据库的交互; MyBatis 提供了非常方便和简单的API,供用户实现对数据库的增删改查数据操作,以及对数据库连接信息和 MyBatis 自身配置信息的维护操作。 上述使用 MyBatis 的方法,是创建一个和数据库打交道的 SqlSession 对象,然后根据 Statement Id 和参数来操作数据库,这种方式固然很简单和实用,但是它不符合面向对象语言的概念和面向接口编程的编程习惯。由于面向接口的编程是面向对象的大趋势,

mybatis批量插入语句(Oracle)

◇◆丶佛笑我妖孽 提交于 2020-12-13 14:16:53
mybatis配置文件里面sql写法(因为是oracle数据库,所以statement的写法和 MySQL 有些不同) <!-- 批量插入用户 --> <insert id="insertUserByBatch" parameterType="java.util.List"> INSERT INTO TEST1 (NAME,AGE) SELECT A.* FROM( <foreach collection="list" item="test1" index="index" separator=" UNION ALL "> SELECT #{test1.name,jdbcType=VARCHAR}, #{test1.age,jdbcType=INTEGER} FROM dual </foreach> ) A </insert> service层 public void insertUserByBatch(List<Test1> list) { // TODO Auto-generated method stub // 2.分页数据信息 int totalSize = list.size(); // 总记录数 int pageSize = 1000; // 每页N条 1000条每次 测试10w条 大概3s多 int totalPage = totalSize / pageSize; /

JVM 运行时数据区详解,写得非常好!

ⅰ亾dé卋堺 提交于 2020-12-13 12:59:30
Java技术栈 www.javastack.cn 关注阅读更多优质文章 作者:小小木的博客 www.cnblogs.com/wyc1994666/p/11795781.html 在接下来的几天想总结下,JVM相关的一些内容,比如下面的这三个内容算是比较核心知识点了 1. 运行时数据区域: 在运行时数据区里存储类Class文件元数据(方法区),对象和数组(堆),方法参数局部变量(栈)等。 2. 垃圾回收机制: java 语言的优势之一就是它的自动内存管理,主要回收运行时数据区域的堆内存里的数据 3. 类加载机制: 虚拟机首先需要把编译完成的字节码文件通过类加载器来加载到运行时数据区域 一个段Java代码的生命周期都会少不了上图这几个步骤,也就是Java代码首先会被编译成字节码文件,之后被类加载器加载到运行时数据区域,以及运行,垃圾收集器回收对象等等。 但今天我想介绍第一个知识点《运行时数据区域》 1 运行时数据区 Java虚拟机定义了一系列逻辑数据区域,有些是随着虚拟机的启动而创建,虚拟机的关闭而销毁。还有一部分是随着线程生命周期创建销毁的。 我们有必要深入了解这块的内容,因为它将决定服务器性能,首先我们需要对整个运行时区域由整体的认识并且了解了每个区域的生命周期以及作用之后才能通过相应的调参来提升系统性能。除此之外还有助于快速定位虚拟机的相关Error.

oracle mybatis 批量插入

六月ゝ 毕业季﹏ 提交于 2020-12-12 19:11:25
插入的值最好声明类型,否则可能出现些奇怪的错误。 <if test="list !=null and list.size()>0"> INSERT INTO b_prehour_event_count ( id, team_id, period, short_period, amount, create_time, del_flag ) <foreach collection="list" index="index" item="item" separator="union all"> SELECT #{item.id,jdbcType=VARCHAR}, #{item.teamId,jdbcType=VARCHAR}, #{item.period,jdbcType=VARCHAR}, #{item.shortPeriod,jdbcType=VARCHAR}, #{item.total,jdbcType=VARCHAR}, sysdate, 0 FROM dual </foreach> </if> 来源: oschina 链接: https://my.oschina.net/u/2831993/blog/1836605

环境搭建

我们两清 提交于 2020-12-12 18:18:34
创建项目 使用 IDEA 建立一个 Maven 项目。 打开 pom.xml 文件,修改 <packaging>war</packaging> 建立如下目录: 选中项目,点击刷新即可。 加入依赖 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>org.yun</groupId> <artifactId>ssm</artifactId> <version>1.0-SNAPSHOT</version> <packaging>war</packaging> <name>ssm</name> <description>SpringMVC + Spring + MyBatis</description> <properties> <project.build