一对多,是最常见的一种设计.就是 A 表的一条记录,对应 B 表的多条记录,且 A 的主键作为 B 表的外键.这主要看以哪张表为中心,下面的测试数据中,从employee 表来看,一个员工对应一个部门,是一对一关系,如果从部门角度来看,则是一对多的关系,一个部门对应多个员工,本节主要研究一对多的关系. 查询部门的时候将部门对应的所有员工信息也查询出来 数据表建立 新建数据表department,有两个字段,插入两条数据如下: id dept_name 1 CIA 2 FSB 新建数据表emplo…
上一篇文章介绍了基于Mybatis对数据库的增.删.改.查.这一篇介绍下关联查询(join query). 三张表:user article blog 表的存储sql文件: /* Navicat MySQL Data Transfer Source Server : localhost Source Server Version : 50620 Source Host : localhost:3306 Source Database : mybatis Target Server Type :…
先说下问题产生的背景: 最近在做一个用到MyBatis的项目,其中有个业务涉及到关联查询,我是将两个查询分开来写的,即嵌套查询,个人感觉这样更方便重用: 关联的查询使用到了动态sql,在执行查询时就出现了如下错误:Caused by: org.apache.ibatis.reflection.ReflectionException: There is no getter for property named 'id' in 'class java.lang.Integer' 因为出现了这个问题,…
关联有嵌套查询和嵌套结果两种方式,本文是按照嵌套结果这种方式来说明的 上一章介绍了多对一的关系,用到了<association></association>,这是一个复杂类型的关联.我们选择一个示例来回顾下,比如:一个博客有一个用户,关联映射就工作于这种结果之上.首先看下,我们在本文中要用到的表结构字段: 博客 blog : id title author_id 作者 author: id username password email bio favourite_section…
Mybatis模糊查询的实现不难,如下实例:在UserMapper.xml中根据用户名模糊查询用户: <!-- 模糊查询用户 --> <select id="findSomeUser" resultMap="userResultMap" parameterType="java.lang.String"> SELECT * FROM user WHERE username LIKE CONCAT('%',#{value},'…
mybatis中参数为list集合时使用 mybatis in查询 一.问题描述mybatis sql查询时,若遇到多个条件匹配一个字段,sql 如: select * from user where id in ('23','45','34') , 那么在 mybatis 中该如何实现呢? 二.实现思路1.方法一: java中将满足条件的值 list 转成符合格式的 sql 字符串2.方法二: mybatis的xml文件是基于OGNL表达式实现的,可以将满足条件的list直接传入到xml中,进…
MyBatis关联查询和懒加载错误 今天在写项目时遇到了个BUG.先说一下背景,前端请求更新生产订单状态,后端从前端接收到生产订单ID进行查询,然后就有问题了. 先看控制台报错: org.apache.ibatis.executor.ExecutorException: Statement returned more than one row, where no more than one was expected. 很明显,预期查出一条记录的结果查出了多条记录.因为在实现 service 层代…
Ibatis/Mybatis模糊查询 根据网络内容整理 Ibatis中 使用$代替#.此种方法就是去掉了类型检查,使用字符串连接,不过可能会有sql注入风险. Sql代码 select * from table1 where name like '%$name$%' 使用连接符.不过不同的数据库中方式不同. mysql: select * from table1 where name like concat('%', #name#, '%') oracle: select * from tabl…