mybatis一对一

mybatis自动映射和手动映射

◇◆丶佛笑我妖孽 提交于 2020-03-01 08:16:32
一对一查询 第一种方法: <!-- 查询所有订单信息 --> <select id="findOrdersList" resultType="cn.itcast.mybatis.po.OrdersCustom"> SELECT orders.*, user.username, user.address FROM orders, user WHERE orders.user_id = user.id </select> 第二种方法: <!-- 查询订单关联用户信息使用resultmap --> <resultMap type="cn.itheima.po.Orders" id="orderUserResultMap"> <id column="id" property="id"/> <result column="user_id" property="userId"/> <result column="number" property="number"/> <result column="createtime" property="createtime"/> <result column="note" property="note"/> <!-- 一对一关联映射 --> <!-- property:Orders对象的user属性 javaType:user属性对应 的类型 -->

Mybatis 关联查询

主宰稳场 提交于 2020-02-29 16:05:05
关联查询 一对多关联查询 一对多关联查询指的是在查询一方对象的时候同时把跟他所关联的多方对象也查询出来,这里以篮球队和篮球运动员为例,一个篮球队关联着多个篮球队员。 多对一关联查询 多对一指的是在查询多方对象的时候,同时将其所关联的一方对象也查询出来。由于在查询多方对象时也是一个一个查询,所以多对一关联查询,其实就是一对一关联查询。即一对一关联查询的实现方式与多对一的实现方式是相同的。 自关联一对多查询 自关联查询就是自己充当多方,同时也充当一方,即多和一都在同一张表中,一般这样的表其实可以看做是一个树形结构,在数据库表中有一个外键,该外键表示当前数据的父节点。下面以公司职位为例创建一张自关联的表。 自关联多对一查询 多对一查询指的是多方可以看到一方,即给出一个员工编号,查看一下他的所有上级领导是谁 多对多关联查询 一个学生可以选多门课程,而一门课程可以由多个学生选择,这就是一个典型的多对多关联关系。所谓多对多关系,其实是由两个互反的一对多关系组成。即多对多关系都会通过一个中间表来建立,例如选课表。学生对于选课表来说是一对多,课程对于选课表来说也是一对多 来源: https://www.cnblogs.com/lucky1024/p/11130406.html

2020年,MyBatis常见面试题总结

空扰寡人 提交于 2020-02-26 04:49:49
Mybatis 技术内幕系列博客,从原理和源码角度,介绍了其内部实现细节,无论是写的好与不好,我确实是用心写了,由于并不是介绍如何使用 Mybatis 的文章,所以,一些参数使用细节略掉了,我们的目标是介绍 Mybatis 的技术架构和重要组成部分,以及基本运行原理。 博客写的很辛苦,但是写出来却不一定好看,所谓开始很兴奋,过程很痛苦,结束很遗憾。要求不高,只要读者能从系列博客中,学习到一点其他博客所没有的技术点,作为作者,我就很欣慰了,我也读别人写的博客,通常对自己当前研究的技术,是很有帮助的。 尽管还有很多可写的内容,但是,我认为再写下去已经没有意义,任何其他小的功能点,都是在已经介绍的基本框架和基本原理下运行的,只有结束,才能有新的开始。写博客也积攒了一些经验,源码多了感觉就是复制黏贴,源码少了又觉得是空谈原理,将来再写博客,我希望是“精炼博文”,好读好懂美观读起来又不累,希望自己能再写一部开源分布式框架原理系列博客。 有胆就来,我出几道 Mybatis 面试题,看你能回答上来几道(都是我出的,可不是网上找的)。 1、#{}和${}的区别是什么? 注:这道题是面试官面试我同事的。 答: ${}是 Properties 文件中的变量占位符,它可以用于标签属性值和 sql 内部,属于静态文本替换,比如${driver}会被静态替换为com.mysql.jdbc.Driver。 #

09. MyBatis的关系映射

自作多情 提交于 2020-02-20 01:56:59
MyBatis的关系映射 1. 关联关系概述 2. 一对一关系 3. 一对多关系 4. 多对多关系 1. 关联关系概述 在关系型数据库中,多表之间存在着三种关联关系,分别为一对一、一对多和多对多 关系 说明 一对一 在任意一方引入对方主键作为外键 一对多 在“多”的一方,添加“一”的一方的主键作为外键 多对多 产生中间关系表,引入两张表的主键作为外键,两个主键成为联合主键或使用新的字段作为主键 在Java中,通过对象也可以进行关系描述 关系 说明 一对一的关系 就是在本类中定义对方类型的对象,如A类中定义B类类型的属性b, B类中定义A类类型的属性a 一对多的关系 就是一个A类类型对应多个B类类型的情况,需要在A类中以集合的方式引入B类类型的对象,在B类中定义A类类型的属性a 多对多的关系 在A类中定义B类类型的集合,在B类中定义A类类型的集合 2. 一对一关系 在现实生活中,一对一关联关系是十分常见的。例如,一个人只能有一个身份证,同时一个身份证也只会对应一个人。 在 07. MyBatis的核心配置 所讲解的< resultMap>元素中,包含了一个< association>子元素,MyBatis就是通过该元素来处理一对一关联关系的。 在< association>元素中的属性 属性 作用 property 指定映射到的实体类对象属性,与表字段一一对应 column

MyBatis多表操作

China☆狼群 提交于 2020-02-19 04:30:08
mybatis注解开发 简单的注解开发: 复杂的注解开发: 一对一查询: @One注解完成一对一配置:select指定另一个接口中的方法进行调用获取想要的值 一对多 @Many注解完成一对多配置:select指定另一个接口中的方法进行调用获取想要的值 多对多 mybatis的延迟加载 在One或Many注解中,使用FetchType属性可以指定加载的方式是懒加载或者立即加载。 设置为LAZY代表懒加载,效果为:当不使用关联的JavaBean时,只查询当前JavaBean中的字段,只有使用到关联的JavaBean时才去执行sql语句查询它。 设置为EAGER代表立即加载,效果为:查询JavaBean时就立刻把关联的JavaBean全部查询出来。 任务 1. 一对一和一对多的案例完成。使用两种方式进行配置 2. 多对多的配置中,把双方的查询都完成。使用两种方式配置 3. 把一对一,一对多和多对多的案例使用注解方式配置。 注意:如果使用注解配置,映射配置文件一定要删除。不能同时存在注解配置和映射文件配置。J 来源: https://www.cnblogs.com/maomaodesu/p/12329631.html

mybatis注解开发

自作多情 提交于 2020-02-16 23:38:19
在mybatis中针对CRUD一共有四个注解: @Select(),@Delete(),@Insert(),@Update() 示例: 在mybatis-config.xml中 < mappers > < ! -- < package name = "net.togogo.dao" > < / package > -- > < mapper class = "net.togogo.dao.IUserDao" > < / mapper > < / mappers > /** * 查询所有操作 * @return */ @Select ( "select * from user" ) List < User > findAll ( ) ; /** * 根据Id查询 */ @Select ( "select * from user where id = #{id}" ) User findById ( Integer id ) ; 当User类中的属性名和数据库的字段名不一致时可以这样: 一对一 mybatis-config.xml中: < mapper class = "net.togogo.dao.IAccountDao" > < / mapper > IAccountDao.java中 package net . togogo . dao ; import net . togogo

Mybatis面试问题集锦

♀尐吖头ヾ 提交于 2020-02-15 13:17:51
1、#{}和${}的区别是什么? 答:mybatis在处理#{}时,会将sql中的#{}替换为?号,调用PreparedStatement的set方法来赋值; mybatis在处理 $ { } 时,就是把 ${ } 替换成变量的值,完成的是简单的字符串拼接。 补充:在mybatis中使用#{}可以防止sql注入,提高系统安全性。MyBatis排序时使用order by 动态参数时需要注意,用$而不是# 2、Xml映射文件中,除了常见的select|insert|updae|delete标签之外,还有哪些标签? 答:还有很多其他的标签, 、 、 、 、 ,加上动态sql的9个标签,trim|where|set|foreach|if|choose|when|otherwise|bind等,其中 为sql片段标签,通过 标签引入sql片段, 为不支持自增的主键生成策略标签。 3、最佳实践中,通常一个Xml映射文件,都会写一个Dao接口与之对应,请问,这个Dao接口的工作原理是什么?Dao接口里的方法,参数不同时,方法能重载吗? 答:Dao接口,就是人们常说的Mapper接口,接口的全限名,就是映射文件中的namespace的值,接口的方法名,就是映射文件中MappedStatement的id值,接口方法内的参数,就是传递给sql的参数。Mapper接口是没有实现类的,当调用接口方法时

mybatis第四天

南笙酒味 提交于 2020-02-07 11:29:11
1.1.ResultMap和ResultType 1.1.1.ResultType resultType可以把查询结果封装到pojo类型中,但必须pojo类的属性名和查询到的数据库表的字段名一致。 ,如果sql查询到的字段与pojo的属性名不一致,则需要使用 resultMap 将字段名和属性名对应起来,进行手动配置封装,将结果映射到pojo中 。 1234 <!-- resultType实现--><select id="queryOrderUserByOrderNumber" resultType="com.lxy.mybatis.pojo.OrderUser"> select * from tb_order o left join tb_user u on o.user_id=u.id where o.order_number = #{number}</select> 1.1.2.ResultMap resultMap则是对外部ResultMap的引用 ,将 查询到的复杂数据(比如查询到几个表中数据)映射到一个结果集当中 。 1234567891011121314151617 <!-- resultmap实现 --> <resultMap id="OrderUserResultMap" type="com.lxy.mybatis.pojo.Order" autoMapping=

MyBatis学习_2_MyBatis的关联映射

最后都变了- 提交于 2020-02-06 18:12:30
一对一关联映射 举个例子,一个人对应一个身份证,人和身份证就是一对一关系 使用MyBatis框架处理他们之间一对一关联关系的步骤如下: 1.创建两张数据表用来做测试 USE eshop #创建数据表idcard ` idcard ` #插入测试数据 INSERT INTO idcard ( cno ) VALUES ( 320100197001010001 ) ; INSERT INTO idcard ( cno ) VALUES ( 320100197001010002 ) ; INSERT INTO idcard ( cno ) VALUES ( 320100197001010003 ) ; #创建数据表person CREATE TABLE person ( id INT PRIMARY KEY AUTO_INCREMENT , NAME VARCHAR ( 20 ) , age INT , sex VARCHAR ( 2 ) , cid INT , FOREIGN KEY ( cid ) REFERENCES idcard ( id ) ) ; ` person ` #插入测试数据 INSERT INTO person ( NAME , age , sex , cid ) VALUES ( 'zhangsan' , 22 , '男' , 1 ) ; INSERT INTO

Mybatis多表查询

微笑、不失礼 提交于 2020-02-06 06:24:33
水了好几天的文章今天开工 今儿个又是自闭的一天 讲点什么呢,讲mybaits跟多表数据库的关系 Mybatis多表查询 数据库之间的关系分为 一对一 一对多(前两种只看查询方向) 多对多(中间表) 一对一原则:共用一个主键或,一个表的外键 与另一个表的主键相关系 一对多:多的一方有外键 与主表相关系 多对多:第三张表与两主表相关 一对一查询 一对一查询的模型MapperScannerConfigurer 用户表和订单表的关系为:一个用户有多个订单,一个订单只从属于一个用户 一对一查询的需求:查询一个订单,与此同时查询出该订单所属的用户 对应的sql语句:select * from orders o,user u where o.uid=u.id; 创建Order和User实体 public class Order { private int id ; private Date ordertime ; private double total ; //代表当前订单从属于哪一个客户 private User user ; //表与表之间靠主键联系 实体之间靠引用联系 } public class User { private int id ; private String username ; private String password ; private Date