1. 程式人生 > >mybatis遞歸,一對多代碼示例

mybatis遞歸,一對多代碼示例

maven 簡單 學習 tab ret 通過 utf8 spring display

今天需要做一個功能,根據專業,有不同的章節,章節下面有對應的習題,

由於只有這麽兩級,可以不用使用遞歸,直接查詢父集,之後foreach查詢子集放入對應的list集合。

雖然實現了,感覺畢竟,太low。

有同事跟我說可以使用mybatis的遞歸實現,就學習了下。

對應的bean裏面需要有對應的list<bean> lists的引用。

直接上代碼

對應的sql語句

CREATE TABLE `goods_category` (
  `goodscateid` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(255
) DEFAULT NULL, `parentid` int(11) DEFAULT NULL, `description` varchar(255) DEFAULT NULL, `displayorder` int(11) DEFAULT NULL, `commissionrate` double DEFAULT NULL, `enabled` int(11) DEFAULT NULL, PRIMARY KEY (`goodscateid`) ) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8;
/*Data for the table `goods_category` */ insert into `goods_category`(`goodscateid`,`name`,`parentid`,`description`,`displayorder`,`commissionrate`,`enabled`) values (1,java,0,111,NULL,NULL,NULL),(2,spring,1,222,NULL,NULL,NULL),(3,springmvc,1,333,NULL,NULL,NULL),(4,struts,1,444,NULL,NULL
,NULL),(5,jdbc,0,555,NULL,NULL,NULL),(6,hibernate,5,666,NULL,NULL,NULL),(7,mybatis,5,777,NULL,NULL,NULL),(8,jdbctemplate,5,888,NULL,NULL,NULL),(9,beanfactory,3,999,NULL,NULL,NULL),(10,factorybean,3,000,NULL,NULL,NULL);

實體類

@JsonIgnoreProperties({"displayorder","commissionrate","enabled"})
public class GoodsCategoryVo {
    private Integer goodscateid;
    private String name;
    private Integer parentid;
    private String description;
    private Integer displayorder;
    private Double commissionrate;
    private Integer enabled;
    private List<GoodsCategoryVo> catelist;
get 。。。 set。。。 tostring。。。

dao層

public interface GoodsMapper {
    List<GoodsCategoryVo> getCategory(Integer pid);
}

mapper.xml

<resultMap id="getSelf" type="com.bscc.beans.GoodsCategoryVo">
        <id column="goodscateid" property="goodscateid"></id>
        <result column="name" property="name"></result>
        <collection property="catelist" select="getCategory"
            column="goodscateid"></collection>
        <!--查到的cid作為下次的pid -->
    </resultMap>

    <select id="getCategory" resultMap="getSelf">
        select * from goods_category where  parentid=#{pid}
        ORDER BY displayorder,goodscateid
    </select>

之後直接訪問對應的方法,即可查詢出來

@RequestMapping("/getGoodsList")
    @ResponseBody
    public List<GoodsCategoryVo> getGoodsList(){
        // pid指定為0
        List<GoodsCategoryVo> list = goodsMapper.getCategory(0);
        return list;
    }

結果,可以使用json在線工具

[
    {
        "goodscateid": 1,
        "name": "java",
        "parentid": 0,
        "description": "111",
        "catelist": [
            {
                "goodscateid": 2,
                "name": "spring",
                "parentid": 1,
                "description": "222",
                "catelist": []
            },
            {
                "goodscateid": 3,
                "name": "springmvc",
                "parentid": 1,
                "description": "333",
                "catelist": [
                    {
                        "goodscateid": 9,
                        "name": "beanfactory",
                        "parentid": 3,
                        "description": "999",
                        "catelist": []
                    },
                    {
                        "goodscateid": 10,
                        "name": "factorybean",
                        "parentid": 3,
                        "description": "000",
                        "catelist": []
                    }
                ]
            },
            {
                "goodscateid": 4,
                "name": "struts",
                "parentid": 1,
                "description": "444",
                "catelist": []
            }
        ]
    },
    {
        "goodscateid": 5,
        "name": "jdbc",
        "parentid": 0,
        "description": "555",
        "catelist": [
            {
                "goodscateid": 6,
                "name": "hibernate",
                "parentid": 5,
                "description": "666",
                "catelist": []
            },
            {
                "goodscateid": 7,
                "name": "mybatis",
                "parentid": 5,
                "description": "777",
                "catelist": []
            },
            {
                "goodscateid": 8,
                "name": "jdbctemplate",
                "parentid": 5,
                "description": "888",
                "catelist": []
            }
        ]
    }
]

mybatis遞歸就是這麽的簡單。

說下mybatis一對多實現

對應的bean

public class Dept {
    private Integer id;
    private String deptName;
    private String locAdd;
    private List<Emp> emps

@JsonIgnoreProperties("dept")
public class Emp {
    private Integer id;
    private String name;
    private Dept dept;

dao層

public interface DeptMapper {
    public Dept getDeptById(Integer id);
}
public interface EmpMapper {
    public Emp getEmpByDeptId(Integer deptId); 
}

mapper.xml文件

<mapper namespace="com.bscc.mapper.DeptMapper">
 <resultMap id="DeptResultMap" type="com.bscc.beans.Dept">
   <id property="id" column="id"/>
   <result property="deptName" column="deptName"/>
   <result property="locAdd" column="locAdd"/>
   <!-- private List<Emp> emps; column="id"寫被集合對象主鍵,select按照外鍵鍵查詢,通過deptid查出emp給dept-->   
   <collection property="emps" column="id" ofType="Emp" select="com.bscc.mapper.EmpMapper.getEmpByDeptId"/>
 </resultMap>
 <select id="getDeptById" parameterType="Integer" resultMap="DeptResultMap">
        select * from tbl_dept where id=#{id}
 </select>
</mapper>

<mapper namespace="com.bscc.mapper.EmpMapper">
 <resultMap  id="EmpResultMap" type="com.bscc.beans.Emp">
   <id property="id" column="id"/>
   <result property="name" column="name"/>
 </resultMap>
 <select id="getEmpByDeptId" parameterType="Integer" resultMap="EmpResultMap">
   select * from tbl_emp where deptId=#{deptId}
 </select>
</mapper>

對應的controller方法

@RequestMapping("/getDeptById")
    @ResponseBody
    public Dept getDeptById() {
        Dept deptById = deptMapper.getDeptById(1);
        return deptById;
    }

無非就是比簡單查詢復雜一些罷了。

代碼目錄

技術分享圖片

OK!!!

對應的github地址

https://github.com/chywx/MavenProject6oneToMany

mybatis遞歸,一對多代碼示例