1.注解内拼写 Mybatis SQL 脚本 @Repository public interface CustomerFeedMapper extends BaseCrudMapper<CustomerFeed> { @Select("<script>" + "SELECT customer_id,COUNT(customer_id) total " + "FROM t_customer_feed " + "&…
使用IDEA创建maven项目,File→New→Project→maven→Next→填写GroupId(例:com.zyl)和ArtifactId(mybatis-demo-parent)→Next,创建完成后,将src目录删除.鼠标右击项目名创建module,就是创建出了子模块. 注意:1.所有类都应该写在包下,如果不写包会出现模块之间依赖了,但是编写代码时使用不了该类的现象 2.添加tomcat后,要将Artifacts中的Output Layout中右边的Artifacts所有内容添加…
一.多表联合查询 二.子查询 三.动态条件查询 LESSON 4 Displaying Data from Multiple Tables-------------------------------------------------------- 查询s_emp表中最大的工资数,并且显示出这个最大工资数的员工名字 select last_name,max(salary)from s_emp; 多表查询 查询多张表的时候会产生笛卡尔积 为了防止笛卡尔积的产生,我们需要使用某些条件把两张表或多张…
mybatis使用注解替代xml配置时,遇到判断条件是否为null或者为空时,@Select很难搞定,不知道怎么办? mybatis3中增加了使用注解来配置Mapper的新特性,使用 SelectProvider来动态生成sql. 典型的使用场景 1. 无参数@SelectProvide方法在Mapper接口方法上和@SelectProvide指定类方法上,均无参数:UserMapper.java: 1     @SelectProvider(type = SqlProvider.class, …
我们在使用SpringData JPA框架时,进行条件查询,如果是固定条件的查询,我们可以使用符合框架规则的自定义方法以及@Query注解实现. 如果是查询条件是动态的,框架也提供了查询接口. JpaSpecificationExecutor 和其他接口使用方式一样,只需要在你的Dao接口继承即可(官网代码). public interface CustomerRepository extends CrudRepository<Customer, Long>, JpaSpecification…
//获取动态条件的集合List<Long> list = new ArrayList<Long>(); Long sysUserId = currentUser.getSysUserId(); if (sysUserId != null) { SysUser sysUser = sysUserRepository.findOne(sysUserId); if (sysUser != null) { String groupItemIds = sysUser.groupItemIds…
### 1. 抽象方法中多个参数的问题 在使用MyBatis时,接口中的抽象方法只允许有1个参数,如果有多个参数,例如: Integer updatePassword( Integer id, String password); 在最终运行时,Java源代码会被编译成.class文件,就会丢失参数名称,所以,运行时会提示“找不到某参数”的错误: Caused by: org.apache.ibatis.binding.BindingException: Parameter 'password'…
一.使用注解配置映射器 动态sql: 用的并不是很多,了解下: Student.java 实体bean: package com.cy.model; public class Student{ private Integer id; private String name; private Integer age; public Student(){ } public Student(String name, Integer age){ this.name = name; this.age =…
参考:https://blog.csdn.net/qq_36614559/article/details/80354511 public List<AssetsDevicetypeRefactor> fetchDevicetypeByInfosysid(Integer infosysid){ AssetsDevicetypeRefactorExample example = new AssetsDevicetypeRefactorExample(); example.or().andIscus…
继续运行testFindAll方法.把其他类的断点都删除掉. 只在这里加了断点,所以直接就跳转到这里了.RoutingStatementHandler里面的query方法 继续往下走,断点又回到了这里.delegate变成了一个叫做PrparedStatementHandler 找PrparedStatementHandler PrparedStatementHandler里面找到query方法.然后加断点. preparedStatement就是JDBC里面的对象.ps.execute不仅能执…
delete方法没有并SqlSession的delete方法,而是调用的Upadte方法. 在测试类这里加断点. 实际的方法体内也加断点 运行测试方法,选择debug的方式 走到断点这里.会看到factory是DefaultSqlSessionFactory session是DefaultSqlSession 找借口的实现类 选中SqlSession 选中SqlSession并鼠标右键---show Implementations 显示它的所有实现 然后就显示了两个.通过刚才的断点调试我们知道是…
就是自己写实现类的方式来开发 直接finish 把之前写的CRUD的代码复制到过来. 在把之前pom.xml里面的包的依赖也复制过来 复制到当前的pom.xml内 允许自动导入 以上步骤就是复制了一个完整的上一节的CRUD的工程 调整和改造 QueryVo删掉. 映射文件中.resultMap的内容并不需要.也删除掉. 这里也需要把resultMap改成resultType.并且值是完整的包的路径 实际的开发过程中用的都是代理dao的方式.所以这里只作为了解.选学的内容 实体类改成和数据表 内的…
1.创建一个Criteria实例net.sf.hibernate.Criteria这个接口代表对一个特定的持久化类的查询.Session是用来制造Criteria实例的工厂. Criteria crit = sess.createCriteria(Cat.class);crit.setMaxResults(50); List cats = crit.list(); 2.缩小结果集范围一个查询条件(Criterion)是net.sf.hibernate.expression.Criterion接口…
一.无匹配器的情况: Person person = new Person(); person.setName("test"); Role role = new Role(); role.setName("经理"); person.setRole(role); ... Example<Person> ex = Example.of(person); //动态查询 personRepository.findAll(ex); personRepository…
应用背景:以货品为例,在基础数据中配置货品的判断规则,要根据这个规则筛选出符合条件的集合. 创建货品类 public class Product { public string Name { get; set; } public string Code { get; set; } public string Unit { get; set; } } 主要实现方法 public void GetProducts() { #region 创建List 实际应用从数据库中取值 var products…
前言 我们知道在项目开发中之前使用数据库查询,都是基于jdbc,进行连接查询,然后是高级一点jdbcTemplate进行查询,但是我们发现还是不是很方便,有大量重复sql语句,与代码偶合,效率低下,于是就衍生出来ORM框架,如Mybatis,Hibernate,还有SpringBoot的,Spring Data JPA 条件查询 我们知道在mybatis mapper文件中条件查询符,如>=,<,之类是不能直接写的会报错的需要转移一下 如下图表 详细内容参考 常见的条件查询操作有 我们通过my…
使用Example类,or条件查询 SetmealExample setmealExample=new SetmealExample(); setmealExample.or().andNameLike("xxx"); setmealExample.or().andCodeLike("ddd"); setmealExample.or().andHelpCodeLike("条件"); Page<Setmeal> page= (Page&…
上一章我们已经讲完了关于Mybatis的分页用法,其实MyBatis 还具有的一个强大的特性之一通常是它的动态 SQL 能力. 如果你有使用 JDBC 或其他 相似框架的经验,你就明白要动态的串联 SQL 字符串在一起是十分纠结的,确保不能忘了空格或在列表的最后省略逗号.Mybatis中的动态 SQL 可以彻底处理这种痛苦.对于动态SQL,最通俗简单的方法就是我们自己在硬编码的时候赋予各种动态行为的判断,而在Mybatis中,用一种强大的动态 SQL 语 言来改进这种情形,这种语言可以被用在任意…
------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥------------- 实体类 public class Book { private Integer bookID; private String bookName; private String bookAuthor; private Integer bookPrice; public Book() { } public Integer getBookID() { return this.bookID; } public vo…
使用MongRepository public interface VideoRepository extends MongoRepository<Video, String> { Video findVideoById(String id); // 视频分页预览{title,coverImg} Page<Video> findByGradeAndCourse(Grade grade, Course course, Pageable page); } 问题 动态条件查询? 只查询指…
通过注解实现动态sql一共需要三部:1.创建表,2.创建entity类,3.创建mapper类, 4.创建动态sql的Provider类.1.和2.可以参见该系列其他文章,这里主要对3和4进行演示,并编写测试.(单元测试是一个好习惯,可以减少bug,避免后期修复的时间损耗) 1. 创建mapper.java package com.blueStarWei.mappers; import java.util.List; import java.util.Map; import org.apache…
扫描实现 Ioc 动态注入 参考: http://www.private-blog.com/2017/11/16/java-%e6%89%ab%e6%8f%8f%e5%ae%9e%e7%8e%b0-ioc-%e5%8a%a8%e6%80%81%e6%b3%a8%e5%85%a5/ 实现思路: 1.首先要通过 IO 去找到指定的路径(当前类的全路径)下的所有的 class文件: 2.通过反射机制 使用文件的全路径来 初始化对象: 3.接下来判断这个对象是否有使用了自定义的注解,如果有就保存到 cl…
先抛出一个问题,用过Mybatis的都知道,我们只需要定义一个Dao的接口,在里面写上一些CRUD相关操作,然后配置一下sql映射文件,就可以达到调用接口中的方法,然后执行sql语句的效果,为什么呢?我们并没有具体的CRUD操作的实现类啊? 前面说到得到SqlSessionFactory对象,得到SqlSessionFactory是为了得到sqlSession,.SqlSession对象完全包含以数据库为背景的所有执行SQL操作的方法.你可以用SqlSession实例来直接执行已映射的SQL语句…
不得不说,利用XML作为配置文件是一个非常好的想法,它可以轻松地实现配置集中化,而且修改之后无需再次编译.然而,由于大多数情况下开发者基本都会拿到程序的源码,加之对于各种XML配置文件一般情况下也只有开发者会去动,可以说XML在一定程度上也相当于程序代码,只是不用编译而已.因此很多人并不是很喜欢XML这种东西.早在Spring 2.5之前就有很多人对满天飞的XML配置叫苦不迭.从Spring 3开始,Java config开始出现,这一特性使得Spring能够摆脱XML配置文件.但是大多数人仍然…
一.mybatis 简单注解 关键注解词 : @Insert : 插入sql , 和xml insert sql语法完全一样 @Select : 查询sql, 和xml select sql语法完全一样 @Update : 更新sql, 和xml update sql语法完全一样 @Delete : 删除sql, 和xml delete sql语法完全一样 @Param : 入参 @Results : 结果集合 @Result : 结果 1.领域模型 : public class UserDO…
Mybatis常用注解对应的目标和标签如表所示: 注解 目标 对应的XML标签 @CacheNamespace 类 <cache> @CacheNamespaceRef 类 <cacheRef> @Results 方法 <resultMap> @Result 方法 <result> <id> @One 方法 <association> @Many   方法 <collection> @Insert @Update @Del…
目录 关于mybatis注解 初次简单使用mybatis注解示例 利用注解实现指定映射 使用注解实现表间关联(1对1) 关于mybatis注解 注解在java中特别常见,mybatis中也支持注解. mybatis的注解主要功能是:简化mapper.xml文件,简单的sql可以使用注解,而不用在取mapper.xml中写sql了,但是动态sql或者稍微复杂的sql,还得写在mapper.xml中. mybatis的注解和mapper.xml可以共存. 需要注意: mybatis配置文件在加载映射…
目录 1 拦截哪些方法 2 如何代理 3 代理对象 4 责任链设计模式 @ 如果没有自定义过拦截器, 可以看我前面的文章.如果不知道 JDK 动态代理怎么使用的, 可以看我这文章. 责任链设计模式理解起来很简单, 网上找个例子看看即可. mybatis 插件的原理使用的是动态代理和责任链来实现的. 1 拦截哪些方法 在前面说过, 可以通过注解 Intecepts 和 Signature 来进行指定拦截哪些方法. 然而, 并不是说所有的方法都可以拦截的. mybatis 拦截器所拦截的方法, 有如…
原文链接: Spring Boot 实战 -- MyBatis(注解版)使用方法 简介 MyBatis 官网 是这么介绍它自己的: MyBatis 是一款优秀的持久层框架,它支持定制化 SQL.存储过程以及高级映射.MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集.MyBatis 可以使用简单的 XML 或注解来配置和映射原生类型.接口和 Java 的 POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录. 示例代码 aw…
基于这段时间折腾redis遇到了各种问题,想着整理一下.本文主要介绍基于Spring+Mybatis以注解的形式整合Redis.废话少说,进入正题. 首先准备Redis,我下的是Windows版,下载后直接启动redis-server就行了,见下图: 一,先上jar包 二,创建实体类 package com.sl.user.vo; import java.io.Serializable; import com.fasterxml.jackson.databind.PropertyNamingSt…