mybatis中树形结构的bean的关系映射

最近用mybatis写一个小程序,涉及到树形结构的关系映射,比如一个分类,本身具有多对一的关系,那么它是如何映射呢?直接贴代码:

Cate.java

@Table(name="cate")
public class Cate extends AbstractModel {
	/**
	 *
	 */
	private static final long serialVersionUID = 1L;
	@Id
	@GeneratedValue(strategy=GenerationType.IDENTITY)
	private Long id;
	private String name;

	private String mark;
	private String img;
	private Long pid;
	public Cate() {
		super();
	}
	private Date insertTime;
	private int sortNum;
	private String intro;
	private List<Cate> ch = new ArrayList<Cate>();
	private Cate parentCate;
	private int status;

	public String getImg() {
		return img;
	}
	public void setImg(String img) {
		this.img = img;
	}
	public Date getInsertTime() {
		return insertTime;
	}
	public void setInsertTime(Date insertTime) {
		this.insertTime = insertTime;
	}
	public int getSortNum() {
		return sortNum;
	}
	public void setSortNum(int sortNum) {
		this.sortNum = sortNum;
	}
	public String getIntro() {
		return intro;
	}
	public void setIntro(String intro) {
		this.intro = intro;
	}
	public Long getId() {
		return id;
	}
	public void setId(Long id) {
		this.id = id;
	}
	public Cate(String name) {
		super();
		this.name = name;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getMark() {
		return mark;
	}
	public void setMark(String mark) {
		this.mark = mark;
	}
	public Long getPid() {
		return pid;
	}
	public void setPid(Long pid) {
		this.pid = pid;
	}
	public List<Cate> getCh() {
		return ch;
	}
	public void setCh(List<Cate> ch) {
		this.ch = ch;
	}

	public Cate getParentCate() {
		return parentCate;
	}
	public void setParentCate(Cate parentCate) {
		this.parentCate = parentCate;
	}
	public int getStatus() {
		return status;
	}
	public void setStatus(int status) {
		this.status = status;
	}

}

Cate.xml

<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.cxgt.mvc.gede.dao.CateDao">
  <resultMap type="com.cxgt.mvc.gede.pojo.Cate" id="cateResult">
        <id column="id" property="id"/>
        <result column="name" property="name"/>
        <result column="pid" property="pid"/>
        <result column="mark" property="mark"/>
        <result column="img" property="img"/>
        <result column="insertTime" property="insertTime"/>
        <result column="intro" property="intro"/>
        <result column="sortNum" property="sortNum"/>
        <result column="status" property="status"/>
        <!-- 多对一的关系 -->
        <!-- property: 指的是属性的值, javaType:指的是属性的类型-->
        <association property="parentCate" javaType="com.cxgt.mvc.gede.pojo.Cate" column="pid" select="get">
        </association>
         <collection property="ch" ofType="com.cxgt.mvc.gede.pojo.Cate" column="id" select="getCh">
        </collection>
    </resultMap>
	<!-- 单行插入 -->
	<insert id="insert" parameterType="com.cxgt.mvc.gede.pojo.Cate">
		INSERT INTO
			cate
		(
			name,
			pid,
			mark,
			img,
			insertTime,
            intro,
            sortNum,
            status

		)
			VALUES
		(
			#{name},
			#{pid},
			#{mark},
			#{img},
			#{insertTime},
			#{intro},
			#{sortNum},
			#{status}
		)
	</insert>
	 <!-- 删除用户 -->
    <delete id="delete" parameterType="java.lang.Long">
        delete from cate where id=#{id}
    </delete>
    <select id="get" resultMap="cateResult">
        select * from cate where id=#{id}
    </select>
     <select id="findAll" resultMap="cateResult">
        select * from cate where pid is null;
    </select>
     <select id="getCh" parameterType="java.lang.Long" resultMap="cateResult"><!-- resultType="com.cxgt.mvc.gede.pojo.Cate" -->
        select * from cate where pid=#{pid};
    </select>
     <update id="update" parameterType="com.cxgt.mvc.gede.pojo.Cate" >
    update cate
    set name = #{name,jdbcType=VARCHAR},
      pid = #{pid,jdbcType=BIGINT},
      mark = #{mark,jdbcType=VARCHAR},
      img = #{img,jdbcType=VARCHAR},
      insertTime = #{insertTime,jdbcType=DATE},
      intro = #{intro,jdbcType=VARCHAR},
      sortNum = #{sortNum,jdbcType=INTEGER},
      status = #{status,jdbcType=INTEGER}
    where id = #{id,jdbcType=BIGINT}
  </update>
</mapper>

这样就可以啦,树形结构就可以出现啦~

时间: 2024-10-13 11:34:48

mybatis中树形结构的bean的关系映射的相关文章

数据库中树形结构的存储

上个星期的内容,今天来记一下.一棵树是可以存储在数据中的,方法也很多,在听张老师讲的过程中,说是邻接表和路径枚举是比较常用的方法. 邻接表:添加一个节点是很方便的,但是查询具体的某个节点很费时(树很高).数据量比较少时适合使用: 路径枚举:存储的数据有相同的前缀或后缀,使用比较方便(比如身份证就是有特定的前缀),但是要依赖高级程序来维护路径中的字符串,并且验证字符串的正确性的开销很大: 也可以考虑把两者结合起来使用. 下面是别人整理好的方法:http://www.cnblogs.com/kiss

项目中树形结构的添加与立即删除该数据问题

立即添加是可以的,但是想把刚添加的那条数据删除就不行了.得不到数据的id值: 处理方法:我写了一个sql语句,在添加之后,把数据中最大的id值取出来,添加在节点上,这样就可以保证立即添加的数据,就可以立即删除了. $.ajax({ type: 'POST', url: '/yxt-admin/admin/address/insert', data:{ name:name, pid:treeNode.id, codeValue:$('#code_value').textbox('getValue'

树形结构的数据库的存储

程序设计过程中,我们常常用树形结构来表征某些数据的关联关系,如企业上下级部门.栏目结构.商品分类等等,通常而言,这些树状结构需要借助于数据库完成持久化.理想中树形结构应该具备如下特征:数据存储冗余度小.直观性强:检索遍历过程简单高效:节点增删改查CRUD操作高效. 列举了一个食品族谱的例子进行讲解,通过类别.颜色和品种组织食品,树形结构图如下: 1,对树形结构最直观的分析莫过于节点之间的继承关系上,通过显示地描述某一节点的父节点,从而能够建立二维的关系表,则这种方案的Tree表结构通常设计为:{

Atitit 常见的树形结构 红黑树 &#160;二叉树 &#160;&#160;B树 B+树 &#160;Trie树&#160;attilax理解与总结

Atitit 常见的树形结构 红黑树  二叉树   B树 B+树  Trie树 attilax理解与总结 1.1. 树形结构-- 一对多的关系1 1.2. 树的相关术语: 1 1.3. 常见的树形结构 红黑树  二叉树   B树 B+树  Trie树2 1.4. 满二叉树和完全二叉树..完全二叉树说明深度达到完全了.2 1.5. 属的逻辑表示 树形比奥死,括号表示,文氏图,凹镜法表示3 1.6. 二叉树是数据结构中一种重要的数据结构,也是树表家族最为基础的结构.3 1.6.1. 3.2 平衡二叉

026 hibernate操作树形结构

树形结构:也就是目录结构,有父目录.子目录.文件等信息,而在程序中树形结构只是称为节点. 一棵树有一个根节点,而根节点也有一个或多个子节点,而一个子节点有且仅有一个父节点(当前除根节点外),而且也存在一个或多个子节点. 也就是说树形结构,重点就是节点,也就是我们需要关心的节点对象. 节点:一个节点有一个ID.一个名称.它所属的父节点(根节点无父节点或为null),有一个或多的子节点等其它信息. Hibernate将节点抽取出成实体类,节点相对于父节点是“多对一”映射关系,节点相对于子节点是“一对

树形结构的数据库表Schema设计-基于左右值编码

树形结构的数据库表Schema设计 程序设计过程中,我们常常用树形结构来表征某些数据的关联关系,如企业上下级部门.栏目结构.商品分类等等,通常而言,这些树状结构需要借助于数据库完 成持久化.然而目前的各种基于关系的数据库,都是以二维表的形式记录存储数据信息,因此是不能直接将Tree存入DBMS,设计合适的Schema及其对 应的CRUD算法是实现关系型数据库中存储树形结构的关键. 理想中树形结构应该具备如下特征:数据存储冗余度小.直观性强:检索遍历过程简单高效:节点增删改查CRUD操作高效.无意

Mybatis中输出映射resultType与resultMap的区别

(原文地址:http://blog.csdn.net/acmman/article/details/46509375) 1.resultType 使用resultType进行输出映射,只有查询出来的列名和pojo(实体bean)中的属性名一致,该列才可以映射成功. 如果查询出来的列名和pojo中的属性名全部不一致,没有创建pojo对象.只要查询出来的列名和pojo中的属性有一个一致,就会创建pojo对象. 1.1输出pojo对象和pojo列表 不管是输出的pojo单个对象还是一个列表(list中

Mybatis源码分析(第二章)------映射文件的解析(1)

2.1 映射文件解析过程分析 MyBatis 的配置文件由 XMLConfigBuilder 的 parseConfiguration 进行解析,该方法依次解析了 <properties>.<settings>.<typeAliases> 等节点.至于 <mappers> 节点,parseConfiguration 则是在方法的结尾对其进行了解析.该部分的解析逻辑封装在 mapperElement 方法中: 1 private void mapperElem

全网最通俗易懂理清mybatis中SqlSession、SqlSessionTemplate、SessionFactory和SqlSessionFactoryBean之间的关系

摘自:https://www.cnblogs.com/xiaoming0601/p/12166160.html 我潇洒的灰大狼又回来啦.今天送大家的一句话是: 保持耐心,永远年轻,永远热泪盈眶. 前言 先容我哭一会儿,呜呜呜~昨晚写了一半的文章,还没保存就盖上盖子准备回家,拔下电源准备把电脑塞进书包带回家完成时,懒惰阻止了我,最终还是没带回家,于是,遭报应了,今天早上来,电脑直接就是没电关机了,开机后写的文章再也找不回来了...(不争气的mac真是对不起我前面特地写了一篇文章来夸赞mac真香啊.