可以通过关系映射查询出来 请看下面\x0d\\x0d\在mybatis中,没有级联的概念,但是可以利用集合来实现类似的功能。\x0d\mybatis30添加了association和collection标签专门用于对多个相关实体类数据进行级联查询,但仍不支持多个相关实体类数据的级联保存和级联删除 *** 作。因此在进行实体类多对多映射表设计时,需要专门建立一个关联对象类对相关实体类的关联关系进行描述。\x0d\\x0d\插入关联表:\x0d\\x0d\ insert into wife (name,h_id) values (#{name},#{husbandhid})\x0d\\x0d\\x0d\关联映射:嵌入式、继承式 引入式等\x0d\先在数据库建立好主外键关系\x0d\\x0d\在xml里面写一个resultMap作为返回类型,如果是多对一 用association 一对多用collection \x0d\例子\x0d\\x0d\\x0d\ \x0d\ \x0d\ \x0d\ \x0d\ \x0d\ \x0d\\x0d\\x0d\\x0d\\x0d\ \x0d\ \x0d\ --ofType集合中的类型\x0d\ \x0d\ \x0d\ \x0d\\x0d\\x0d\\x0d\ select w,h from wife w left join husband h on wh_id=hhid\x0d\\x0d\\x0d\注意:\x0d\1、关联查询一定要带有关联对象的id(主外键),否则集合只会有一条记录存在(认为你查询的是一个对象)\x0d\如:\x0d\select hname,hage,wwname from wife w left join husband h on hhid=wh_id\x0d\\x0d\2、表连接中不同表有同名字段的时候:a和b都有name字段\x0d\\x0d\ \x0d\ \x0d\ \x0d\ \x0d\ \x0d\ \x0d\ \x0d\ \x0d\\x0d\ select aid aid,aname aname,bid,bname from a,b where aid=bid \x0d\首先,mybatis本身不会判断是否是多表查询,mybatis的多表查询和单表查询其实没有什么区别,你都需要一个对象接收返回值。 例如:select uname name,pgrade grade from table_1 u,table_2 p where uid = pid。这里你从两张表里查出两个字段n这个sql有问题的吧,如果已经配置了关联关系了,就不用写left join了,直接写select from students,不过新手我还是建议不要写关联,直接把resultmap写一个既有students的属性又有class的属性的map,然后再select s,c from student s left join classInfo c on sclassInfo_id = cid,这样返回的resultmap就是两个对象都有的map了,自己再创建一个对象,里面和resultmap相对应就可以了首先,楼主需了解何为
动态sql,何为
静态sql,这是他们的区别:
静态 SQL:静态 SQL
语句一般用于嵌入式 SQL 应用中,在程序运行前,SQL 语句必须是确定的,例如 SQL 语句中涉及的列名和表名必须是存在的。静态 SQL 语句的编译是在应用程序运行前进行的,编译的结果会存储在数据库内部。而后程序运行时,数据库将直接执行编译好的 SQL 语句,降低运行时的开销。静态SQL在编译时已经确定了引用的表和列。 宿主变量不改变表和列信息。 可以使用主变量改变查询参数值, 但是不能用主变量代替表名或列名。
动态 SQL:动态 SQL 语句是在应用程序运行时被编译和执行的,不在编译时确定 SQL 的表和列,而是让程序在运行时提供,并将SQL 语句文本传给 DBMS 执行。 静态 SQL 语句在编译时已经生成执行计划。 而动态 SQL 语句,只有在执行时才产生执行计划。动态 SQL 语句首先执行 PREPARE 语句要求 DBMS 分析、确认和优化语句,并为其生成执行计划。例如,使用 DB2 的交互式工具 CLP 访问数据库时,用户输入的 SQL 语句是不确定的,因此 SQL 语句只能被动态地编译。动态 SQL 的应用较多,常见的 CLI 和 JDBC 应用程序都使用动态 SQL。
下面是一个典型的在MyBatis中使用动态SQL:
<update id="update" parameterType="orgformatdynamicproxymybatisbeanUser"> UPDATE users <trim prefix="SET" prefixOverrides=","> <if test="name != null and name != ''"> name = #{name} </if> <if test="age != null and age != ''"> , age = #{age} </if> <if test="birthday != null and birthday != ''"> , birthday = #{birthday} </if> </trim> where id = ${id}</update>关联查询中的一对多在项目中很常见。下图是一个一对多的简单模型:主表用户表,从表订单表,一个用户可以下多个订单,所以,它们的关系是一对多关联关系。
MyBatis 实现一对多采用的是 <resultMap>,在<resultMap>里面用<collection>子标签配置多方信息。
我们想查询所有用户及其订单信息,一个用户可以下若多个订单。SQL 语句如下:
order_info 表 与 user_info 表,通过 user_id 外键关联。
步骤如下:
注意:
评论列表(0条)