etmvc+jQuery EasyUI使用教程(三)


本章我们来学习一下ActiveRecord中的关联,即一对一、一对多、多对一等关联问题!

1、先新建一个authors表和books表

create table authors(
id int primary key auto_increment,
name varchar(10) default null
)

create table books(
id int primary key auto_increment,
name varchar(10) default null,
authorId int 
)

2、我们认为authors表和books表是一对多的关系,即一个author拥有多个book,建立对应的域模型对象

Author.java

package models;

import java.util.List;

import com.et.ar.*;
import com.et.ar.annotations.*;

@Table(name = "authors")
public class Author extends ActiveRecordBase {
	@Id
	private Integer id;
	@Column
	private String name;

	@HasMany(foreignKey = "authorId", dependent = DependentType.DELETE, order = "id")
	private List<Book> books;

	// get,set...
	public Integer getId() {
		return id;
	}

	public void setId(Integer id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public List<Book> getBooks() {
		return books;
	}

	public void setBooks(List<Book> books) {
		this.books = books;
	}
}

Book.java

package models;

import com.et.ar.*;
import com.et.ar.annotations.*;

@Table(name = "books")
public class Book extends ActiveRecordBase {
	@Id
	private Integer id;
	@Column
	private Integer authorId;
	@Column
	private String name;

	@BelongsTo(foreignKey = "authorId")
	private Author author;

	// get,set...
	public Integer getId() {
		return id;
	}

	public void setId(Integer id) {
		this.id = id;
	}

	public Integer getAuthorId() {
		return authorId;
	}

	public void setAuthorId(Integer authorId) {
		this.authorId = authorId;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public Author getAuthor() {
		return author;
	}

	public void setAuthor(Author author) {
		this.author = author;
	}

}

3、这里解释一下这三种关联关系:

(1)、一对多:一对多关联是指一个类(比如Author)拥有另一个类(比如Book)的多个实例,用@HashMany注解描述,如上面的Author类;
@HasMany有几个属性:
foreignKey指定多方的外键,必须指定。
dependent指定在删除主表时做何操作,可选。有DELETE,DESTROY,NULLIFY,DELETE是简单的删除从表记录;DESTROY是再以级联的方式销毁从表对应的对象,如果这种级联关系有二级以上,则使用DESTROY会比较合适;NULLIFY是将从表的外键置为NULL值而并不删除。
order指定获取从表对应的记录时的排序字段,可选。

(2)、多对一:是指一个类属于另一个类,比如上面的Book类,使用@BelongsTo注解描述多对一关系。

(3)、一对一:一对一是一对多的特例,使用@HasOne描述,如:

	@Table(name="authors")   
	public class Author extends ActiveRecordBase{   
	    @Id private Integer id;   
	    @Column private String name;   
	       
	    @HasOne(foreignKey="authorId")   
	    private Book book;   
	    //get,set...  
	} 

@HasOne注解的其他用法同@HasMany

4、定义了模型对象之间的关联之后,新建一个AuthorController,用于操作模型对象:

package controllers;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import models.Author;
import models.Book;
import models.User;

import com.et.mvc.JsonView;
import com.et.mvc.View;
import com.et.mvc.JspView;

public class AuthorController extends ApplicationController {

	/**
	 * 查询全部作者及书籍
	 */
	public JsonView index() throws Exception {

		List<Author> authors = Author.findAll(Author.class);
		
		//List<User> users = User.findAll(User.class);
		Map<String, Object> result = new HashMap<String, Object>();
		result.put("success", true);
		for (Author author : authors) {
			//result.put(author.getId().toString(), author.getName());
			result.put(author.getId().toString(), author.getBooks());
			// System.out.println(user.getName());
		}
		JsonView view = new JsonView(result);
		view.setContentType("text/html;charset=utf-8");// 允许指定ContentType
		return view;
	}
	
	public void create() throws Exception {
		Author author = new Author();   
		author.setName("author1");   
		List<Book> books = new ArrayList<Book>();   
		for(int i=0; i<3; i++){   
		    Book book = new Book();
		    book.setName("book" + i);   
		    books.add(book);   
		}   
		author.setBooks(books);   
		author.save(); 
		redirect("index");
		//return "hello,test2";
	}
	
	public void delete() throws Exception {
		Author author = Author.find(Author.class, 5);   
		author.destroy(); 
		redirect("index"); // 重定向到列表页面
	}
}

5、调试运行,访问:http://localhost:8080/myDemo/author/index,列出当前Author及其Book

6、访问:http://localhost:8080/myDemo/author/create,新建一个Author及其Book

7、访问:http://localhost:8080/myDemo/author/delete,级联删除编号为5的Author及其Book

这章就到这,下章开始进入JQuery easyUI,这也是为什么我们这几章一直不好好弄界面的原因。


  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值