mybatis一对一

【mybatis】一对一查询----resultType &resultMap

旧街凉风 提交于 2019-12-01 23:30:02
resultType实现一对一查询 需求:查询订单信息,关联查询创建订单的用户信息 分析:订单表是主查询表,用户表是关联表 使用内连接还是外连接? 由于orders表中有user_id这个外键,外键关联查询用户只能查询出一条记录,可以使用内连接。 SELECT orders.*, user.username, user.sex, user.address FROM orders, USER WHERE orders.user_id=user.id 写过sql语句,就需要根据查询对象创建pojo 1、创建pojo对象 将sql查询的结果映射到pojo中,这个pojo包括所有的查询列名。如果已有的pojo类不能包含所有的对象,那就需要创建一个新的pojo。 创建pojo继承包含查询字段较多的pojo类。 2、定义mapper.xml中的statement <mapper namespace="com.mybatis.mapper.OrdersMapperCustomer"> <select id="findOrdersUser" resultType="com.mybatis.pojo.OrderCustomer"> SELECT orders.*, user.username, user.sex, user.address FROM orders, USER WHERE orders

mybatis初步----查询之resultMap和resultType

江枫思渺然 提交于 2019-12-01 23:29:53
2019独角兽企业重金招聘Python工程师标准>>> MyBatis的每一个查询映射的返回类型都是ResultMap,只是当我们提供的返回类型属性是resultType的时候,MyBatis对自动的给我们把对应的值赋给resultType所指定对象的属性,而当我们提供的返回类型是resultMap的时候,将数据库中列数据复制到对象的相应属性上,可以用于复制查询,两者不能同时用。 1、resultType 返回单个实例 <select id="selectUser" parameterType="int" resultType="User"> select * from user where id = #{id} </select> 返回List集合 <select id="selectUserAll" resultType="User" > <!-- resultMap="userMap" --> select * from user </select> 2、resultMap 简单查询: <resultMap type="User" id="userMap"> <id column="id" property="id"/> <result column="name" property="name"/> </resultMap> column:数据库中列名称,property

Mybatis-利用resultMap 输出复杂pojo

∥☆過路亽.° 提交于 2019-12-01 23:23:54
个:复杂的sql语句查询的数据集的字段和 pojo的字段不相同,需要用到resultMap做一个对应。 ---------------- mybatis 中使用 resultMap 完成高级输出结果映射。 1.1.1 resultMap 使用方法 如果查询出来的列名和 pojo 的属性名不一致,通过定义一个 resultMap 对列名和 pojo 属性名之间作一个映射关系。 1 、定义 resultMap 2 、使用 resultMap 作为 statement 的输出映射类型 1.1.2 将下边的 sql 使用 User 完成映射 SELECT id id_,username username_ FROM USER WHERE id=#{value} User 类中属性名和上边查询列名不一致。 ================== 1.1 resultMap resultType 可以指定 pojo 将查询结果映射为 pojo ,但需要 pojo 的属性名和 sql 查询的列名一致方可映射成功。 如果sql查询字段名和pojo的属性名不一致,可以通过resultMap将字段名和属性名作一个对应关系 ,resultMap 实质上还需要将查询结果映射到 pojo 对象中。 resultMap 可以实现将查询结果映射为复杂类型的 pojo ,比如在查询结果映射对象中包括 pojo 和

mybatis中resultMap 标签的使用

梦想的初衷 提交于 2019-12-01 23:20:40
注:此篇博客与上一篇 “MyBatis的概述以及基本使用” 是衔接一起的 resultMap 标签: 用来描述如何从数据库结果集中来加载对象 (敲黑板!!)主管数据库的字段和实体类属性的匹配,真正的作用在于联查 我们直接看案例: 这是我的数据库(如下): 这是我的实体类(如下): 这是修改后的实体类(如下): 这是我的 Mapper(如下): 上一次的博客中有说我的方法是如何写的,这里我就不再详细说明了,直接展示结果,这是修改前的(如下): 这是修改后的(如下): 如此便说明了: 当我们的实体类的名字写错了,或者因其他需求更改时,那么我们到最后查出来的数据错的那一行是没有值的,因为反射找的时候是根据名字来找的,而错误的名字是找不到的,但是 resultMap 是可以做到的。 那怎么用那? 只要 Mapper 改一下即可: 我们再去查一遍: 这就出来了。。。 至于联查我们先说一对一: 我们先在 entity 下再创建一个实体类,列如我的(如下,小编瞎写找了一个电影类型的表): 这是数据库的数据: Branch 也要加一个 movietype 的对象 我们的Mapper也要改一下: 这样一条list集合里面就会携带movieType对象,我们到方法里执行一下就可以到控制台得到结果了(如下): 完整的结果如下: 完毕 [Branch [branchid=1, name123=财务,

RequestType和RequestMap

五迷三道 提交于 2019-12-01 22:45:21
MyBatis中在查询进行select映射的时候,返回类型可以用resultType,也可以用resultMap,resultType是直接表示返回类型的,而resultMap则是对外部ResultMap的引用,但是resultType跟resultMap不能同时存在。 在MyBatis进行查询映射时,其实查询出来的每一个属性都是放在一个对应的Map里面的,其中键是属性名,值则是其对应的值。 ①当提供的返回类型属性是resultType时,MyBatis会将Map里面的键值对取出赋给resultType所指定的对象对应的属性。所以其实MyBatis的每一个查询映射的返回类型都是ResultMap,只是当提供的返回类型属性是resultType的时候,MyBatis对自动的给把对应的值赋给resultType所指定对象的属性。 ②当提供的返回类型是resultMap时,因为Map不能很好表示领域模型,就需要自己再进一步的把它转化为对应的对象,这常常在复杂查询中很有作用。 二、ResultType Blog.java public class Blog { private int id; private String title; private String content; private String owner; private List<Comment> comments;

一文理清Mybatis中resultType与resultMap之间的关系和使用场景

元气小坏坏 提交于 2019-12-01 22:32:18
1.概要 Mybatis ORM半自动映射框架对java开发工程师来说应该是必会的框架之一。它的好处这里不是我们讨论的重点。令很多刚刚入行的java开发小伙伴迷茫的是 resultType 与 resultMap 的使用。今天来探讨一下这个问题。 2.resultType与resultMap 接下来我们就来讲一下Mybatis中resultType与resultMap之间的关系和使用场景。 2.1 resultType 从 select 语句中返回的期望类型的类的完全限定名或别名。 注意如果返回的是集合,那应该设置为集合包含的类型,而不是集合本身。可以使用 resultType 或 resultMap,但不能同时使用。 2.2 resultMap 从这条语句中返回的期望类型的类的完全限定名或别名。 注意如果返回的是集合,那应该设置为集合包含的类型,而不是集合本身。可以使用 resultType 或 resultMap,但不能同时使用。 2.3 共同点 resultType 与 resultMap 首先都是用来归纳查询类型sql的结果集,对查询结果进行你需要的结构描述。对于同一个 select 标签中二者不能共存。这一点对很多人来说很好理解。重要的是不同点和对应的使用场景。 2.4 二者分别的使用场景 对于查询结构需要返回的简单pojo,结果都可以映射到一致的hashMap上

一文理清Mybatis中resultType与resultMap之间的关系和使用场景

て烟熏妆下的殇ゞ 提交于 2019-12-01 22:27:08
1.概要 Mybatis ORM半自动映射框架对java开发工程师来说应该是必会的框架之一。它的好处这里不是我们讨论的重点。令很多刚刚入行的java开发小伙伴迷茫的是 resultType 与 resultMap 的使用。今天来探讨一下这个问题。 2.resultType与resultMap 接下来我们就来讲一下Mybatis中resultType与resultMap之间的关系和使用场景。 2.1 resultType 从 select 语句中返回的期望类型的类的完全限定名或别名。 注意如果返回的是集合,那应该设置为集合包含的类型,而不是集合本身。可以使用 resultType 或 resultMap,但不能同时使用。 2.2 resultMap 从这条语句中返回的期望类型的类的完全限定名或别名。 注意如果返回的是集合,那应该设置为集合包含的类型,而不是集合本身。可以使用 resultType 或 resultMap,但不能同时使用。 2.3 共同点 resultType 与 resultMap 首先都是用来归纳查询类型sql的结果集,对查询结果进行你需要的结构描述。对于同一个 select 标签中二者不能共存。这一点对很多人来说很好理解。重要的是不同点和对应的使用场景。 2.4 二者分别的使用场景 对于查询结构需要返回的简单pojo,结果都可以映射到一致的hashMap上

MyBatis的基本注解

做~自己de王妃 提交于 2019-12-01 19:35:17
MyBatis的基本注解: 增删改查 @Select("select * from teacher") public List<Teacher> selAll(); //增删改返回值都是int @Insert("insert into teacher values(default,#{name})") public int add(Teacher teacher); @Update("update teacher set name=#{name} where id=#{id}") public int update(Teacher teacher); @Delete("delete from teacher where id=#{id}") public int delete(int id);    注解映射: 1.普通映射 @Select ( "select * from mybatis_Student where id=#{id}" ) public Student getStudent ( int id) ; @Insert ( "insert into mybatis_Student (name, age, remark, pic,grade_id,address_id) values (#{name},#{age},#{remark}, #{pic},#{grade.id

震惊!!!SSM居然是这样的!

北战南征 提交于 2019-12-01 19:30:20
SSM框架 SSM ( Spring+SpringMVC+MyBatis )框架集由 Spring 、 MyBatis 两个开源框架整合而成( SpringMVC 是 Spring 中的部分内容)。常作为数据源较简单的 web 项目的框架。 一、 Spring 部分    Spring 就像是整个项目中装配 bean 的大工厂,在配置文件中可以指定使用特定的参数去调用实体类的构造方法来实例化对象。也可以称之为项目中的粘合剂。    Spring 的核心思想是 IoC (控制反转),即不再需要程序员去显式地 `new` 一个对象,而是让 Spring 框架帮你来完成这一切。 1 、 Spring 的运行流程 第一步:加载配置文件 ApplicationContext ac = new ClassPathXmlApplicationCont ext("beans.xml"); , ApplicationContext 接口,它由 BeanFactory 接口派生而来,因而提供了 BeanFactory 所有的功能。配置文件中的 bean 的信息是被加载在 HashMap 中的,一个 bean 通常包括, id , class , property 等, bean 的 id 对应 HashMap 中的 key , value 呢就是 bean 第二步:调用 getBean 方法,

MyBatis注解

对着背影说爱祢 提交于 2019-12-01 19:09:06
1.MyBatis中使用@Results注解来映射查询结果集到实体类属性。 (1)@Results的基本用法。当数据库字段名与实体类对应的属性名不一致时,可以使用@Results映射来将其对应起来。     column为数据库字段名,porperty为实体类属性名,jdbcType为数据库字段数据类型,id为是否为主键。 如上所示的数据库字段名class_id与实体类属性名classId,就通过这种方式建立了映射关系。名字相同的可以省略。 (2)@One的用法。当我们需要通过查询到的一个字段值作为参数,去执行另外一个方法来查询关联的内容,而且两者是一对一关系时,可以使用@One注解来便捷的实现。 比如当我们需要查询学生信息以及其所属班级信息时,需要以查询到的class_id为参数,来执行ClassesMapper中的selectById方法,从而获得学生所属的班级信息。 (3)@ResultMap的用法。当这段@Results代码需要在多个方法用到时,为了提高代码复用性,我们可以为这个@Results注解设置id,然后使用@ResultMap注解来复用这段代码。 (3)@Many的用法。与@One类似,只不过如果使用@One查询到的结果是多行,会抛出TooManyResultException异常,这种时候应该使用的是@Many注解,实现一对多的查询