mybatis高级查询
mapper.xml中的全部代碼
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.hisoft.mapper.OrderMapper"><!-- 一對一查詢 --><resultMap id="orderuser" type="Order" autoMapping="true"><id column="oid" property="id"/><association property="user" javaType="User" autoMapping="true"><id column="uid" property="id"/></association></resultMap><!-- 一對多查詢 --><resultMap id="orderuserdetail" type="Order" autoMapping="true" extends="orderuser"><!-- <id column="id" property="id"/><association property="user" javaType="User" autoMapping="true"><id column="id" property="id"/></association> --><collection property="order" javaType="List" ofType="OrderShow" autoMapping="true"><id column="odid" property="id"/></collection></resultMap><!-- 多對多查詢 --><resultMap id="orderuserdetailitem" type="Order" autoMapping="true" extends="orderuser"><!-- <id column="id" property="id"/><association property="user" javaType="User" autoMapping="true"><id column="id" property="id"/></association> --><collection property="order" javaType="list" ofType="OrderShow" autoMapping="true"><id column="odid" property="id"/><association property="item" javaType="Item" autoMapping="true"><id column="iid" property="id"/></association></collection></resultMap><select id="selectAllUserAndOrder" resultMap="orderuser">select u.id uid,u.user_name,u.password,u.name,u.age,u.sex,u.birthday,u.created,u.updated,o.idoid,o.user_id,o.order_number from tb_user u, tb_order o where u.id = o.user_id and u.id=#{id}</select><select id="selectUserOrderAndDetail" resultMap="orderuserdetail">selectu.id uid,u.user_name,u.password,u.name,u.age,u.sex,u.birthday,u.created,u.updated,o.idoid,o.user_id,o.order_number,od.id odid,od.order_id,od.item_id,od.total_price,od.statusfrom tb_user u,tb_order o,tb_orderdetail odwhere u.id = o.user_id and o.id = od.order_id and o.order_number = #{orderNumber}</select><select id="selectUserOrderDetailAndItem" resultMap="orderuserdetailitem">selectu.id uid,u.user_name,u.password,u.name,u.age,u.sex,u.birthday,u.created,u.updated,o.idoid,o.user_id,o.order_number,od.id odid,od.order_id,od.item_id,od.total_price,od.status,i.id iid,i.item_name,i.item_price,i.item_detailfrom tb_user u,tb_order o,tb_orderdetail od,tb_item iwhere u.id = o.user_id and o.id = od.order_id and i.id = od.item_id and o.order_number =#{orderNumber}</select></mapper>select 標簽中resultMap屬性的值就是對應resultMap標簽中id的值
resultMap 標簽中 id表示唯一標識 type就是返回值類型 autoMapping="true"表示打開自動映射 ,extends表示繼承某個標簽的內(nèi)容
association 中property屬性的值是order實體類類中定義User類的變量名稱user javaType就是User 表示類型
id標簽中column屬性的值表示數(shù)據(jù)庫的字段名 property表示實體類的變量名
collection 標簽中的property是指order實體類中的變量名order, javaType值order實體類中的List集合 ,ofType是指order實體類中List集合的泛型
注解
一對一查詢注解 @Results({@Result(column = "sid",property = "sid"),@Result(column = "gid",property = "grade",one = @One(select="com.hisoft.dao.GradeMapper.selectGrade"))})@Select("select * from student")public List<Student> selectAllStudentAndGrade();當通過學生信息查找對應班級信息的時候,就是一對一查找,因為一個學生只能對應一個班級,
@Results相當于resultMap標簽 ,@Result相當于id標簽 是對應匹配的意思
@Result(column = “gid”,property =“grade”,one=@One(select=“com.hisoft.dao.GradeMapper.selectGrade”)) })
因為是通過查詢學生表的信息中的班級表的外鍵來查找對應的班級信息,所以這行代碼中的column 的值是學生表的外鍵字段,property 的值表示傳入?yún)?shù)的類型 ,也就是學生實體類中引入的班級類,com.hisoft.dao.GradeMapper.selectGrade這句代碼的意識是引入這個路徑下的sql語句,該路徑下的內(nèi)容為:
public interface GradeMapper {@Results({@Result(column = "grid",property = "grid"),@Result(column = "class",property = "gcalss")})@Select("select * from grade where grid = #{gid}")public Grade selectGrade();} 一對多注解 內(nèi)容是通過班級查找學生信息,一個班級對應多個學生 @Results({@Result(column = "grid",property = "grid"),@Result(column = "class",property = "gcalss"),@Result(column = "grid",property = "list",many=@Many(select = "com.hisoft.dao.StudentMapper.selectAllStudent"))})@Select("select * from grade")public List<Grade> selectGradeAndStudent();與一對一注解內(nèi)容大致相同
com.hisoft.dao.StudentMapper.selectAllStudent路徑下內(nèi)容如下:
以下是各自實體類的內(nèi)容:
學生實體類:
班級實體類:
public class Grade {int grid;String gcalss;List<Student> list;省略set/get/tosTring 無參構造 有參構造方法}不管是一對一或者是一對多查詢,查詢的時候把要查詢的后表的實體類放入到前表的實體類中,是最為合適并且容易記住的(個人理解),
總結
以上是生活随笔為你收集整理的mybatis高级查询的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 关于Mybatis的各种配置文件
- 下一篇: mybatis中$和#的区别