Category与Article双向一对多关联

(1)将CategoryDao进行实现

public class CategoryDaoImpl extends BaseDao<Category> implements CategoryDao {

@Override

public boolean addCategory(Category category) {

try {

super.add(category);

return true;

} catch (Exception e) {

e.printStackTrace();

return false;

}

}

@Override

public Category getCategoryById(int id) {

return super.getById(id);

}

@Override

public List<Category> getAllCategorys() {

return super.getAll();

}

}

(2)将ArticleDao进行实现

public class ArticleDaoImpl extends BaseDao<Article> implements ArticleDao {

@Override

public boolean addArticle(Article article) {

try {

super.add(article);

return true;

} catch (Exception e) {

e.printStackTrace();

return false;

}

}

@Override

public Article getArticleById(int id) {

return super.getById(id);

}

@Override

public List<Article> getAllArticles() {

return super.getAll();

}

@Override

public List<Article> getArticelsByCategory(int categoryId) {

Map<String,Object> params = new HashMap<String,Object>();

params.put("cid", categoryId);

return super.getList("SelectByCategory", params);

}

@Override

public List<Article> getArticlesByTitle(String title) {

Map<String,Object> params = new HashMap<String,Object>();

params.put("title", title);

return super.getList("SelectByTitle", params);

}

}

》》》》》》》》》》》》》》》》》》》》》

由于Article对User和Category做了多对一关联,所以添加数据时外键添加会有问题

所以,在制作映射文件前,要对Article实体类进行修改,将表中外键列的对应属性加入到实体类中

//多对一的引用

private Category category;

private int cateId;

//多对一的引用

private User user;

private int userId;

-------注意上面对实体类的修改,增加两个基于外键的属性设置(userId,cateId)

public void setCategory(Category category) {

  this.setCateId(category.getId());

this.category = category;

}

public void setUser(User user) {

  this.setUserId(user.getId());

this.user = user;

}

--------------注意上面代码的修改,将两个原有属性set方法加入的红色代码

======================================

(3)Category映射文件

<?xml version="1.0" encoding="UTF-8" ?>

<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"

"http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="cn.smartapp.blogs.pojo.Category">

<resultMap type="Category" id="CategoryResult">

<id column="cid" property="id" />

<result column="cate_name" property="cateName" />

<!-- 一对多关联的设置 -->

<collection property="articles" ofType="Article" javaType="java.util.Set">

<id column="aid" property="id"/>

<result column="art_title" property="title"/>

<result column="art_content" property="content"/>

<result column="art_pubtime" property="pubTime" javaType="java.util.Date"/>

</collection>

</resultMap>

<insert id="insertPojo" parameterType="Category" useGeneratedKeys="true">

insert into blog_category(cate_name) values(#{cateName})

</insert>

<select id="SelectById" resultMap="CategoryResult" parameterType="int">

select

tc.id as cid,

tc.cate_name,

ta.id as aid,

ta.art_title,

ta.art_content,

ta.art_pubtime,

ta.pub_user_id,

ta.cate_id

from blog_category as tc inner join blog_article as ta

on tc.id=ta.cate_id

where tc.id=#{id}

</select>

<select id="SelectAll" resultMap="CategoryResult">

select

tc.id as cid,

tc.cate_name,

ta.id as aid,

ta.art_title,

ta.art_content,

ta.art_pubtime,

ta.pub_user_id,

ta.cate_id

from blog_category as tc inner join blog_article as ta

on tc.id=ta.cate_id

</select>

</mapper>

(4)Article映射文件

<?xml version="1.0" encoding="UTF-8" ?>

<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"

"http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="cn.smartapp.blogs.pojo.Article">

<resultMap type="Article" id="ArticleResult">

<id column="aid" property="id" />

<result column="art_title" property="title" />

<result column="art_content" property="content" />

<result column="art_pubtime" property="pubTime" javaType="java.util.Date"/>

<!-- 多对一的设置(Article与User) -->

<association property="User" foreignColumn="pub_user_id">

<id column="uid" property="id" />

<result column="user_name" property="userName" />

<result column="user_pass" property="password" />

<result column="nick_name" property="nickName" />

</association>

<!-- 多对一的设置(Article与Category) -->

<association property="Category" foreignColumn="cate_id">

<id column="cid" property="id" />

<result column="cate_name" property="cateName" />

</association>

</resultMap>

<insert id="insertPojo" parameterType="Article" useGeneratedKeys="true">

insert into blog_article(art_title,art_content,art_pubtime,pub_user_id,cate_id)

values(#{title},#{content},#{pubTime},#{userId},#{cateId})

<selectKey >

</selectKey>

</insert>

<select id="SelectById" resultMap="ArticleResult" parameterType="int">

select

ta.id as aid,

ta.art_title,

ta.art_content,

ta.art_pubtime,

ta.pub_user_id,

ta.cate_id,

tu.id as uid,

tu.user_name,

tu.user_pass,

tu.nick_name,

tc.id as cid,

tc.cate_name

from blog_user as tu inner join blog_article as ta on tu.id=ta.pub_user_id

inner join blog_category as tc on tc.id=ta.cate_id where ta.id=#{id}

</select>

<select id="SelectAll" resultMap="ArticleResult">

select

ta.id as aid,

ta.art_title,

ta.art_content,

ta.art_pubtime,

ta.pub_user_id,

ta.cate_id,

tu.id as uid,

tu.user_name,

tu.user_pass,

tu.nick_name,

tc.id as cid,

tc.cate_name

from blog_user as tu inner join blog_article as ta on tu.id=ta.pub_user_id

inner join blog_category as tc on tc.id=ta.cate_id

</select>

<select id="SelectByCategory" resultMap="ArticleResult">

select

ta.id as aid,

ta.art_title,

ta.art_content,

ta.art_pubtime,

ta.pub_user_id,

ta.cate_id,

tu.id as uid,

tu.user_name,

tu.user_pass,

tu.nick_name,

tc.id as cid,

tc.cate_name

from blog_user as tu inner join blog_article as ta on tu.id=ta.pub_user_id

inner join blog_category as tc on tc.id=ta.cate_id where tc.id=#{cid}

</select>

<select id="SelectByTitle" resultMap="ArticleResult">

select

ta.id as aid,

ta.art_title,

ta.art_content,

ta.art_pubtime,

ta.pub_user_id,

ta.cate_id,

tu.id as uid,

tu.user_name,

tu.user_pass,

tu.nick_name,

tc.id as cid,

tc.cate_name

from blog_user as tu inner join blog_article as ta on tu.id=ta.pub_user_id

inner join blog_category as tc on tc.id=ta.cate_id where ta.title like #{title}

</select>

</mapper>

=========================

(5)测试Article级联添加操作

public class ArticleDaoAddTest {

@Test

  public void test() {

    ArticleDao articleDao = new ArticleDaoImpl();

    CategoryDao categoryDao = new CategoryDaoImpl();

    Article article = new Article();   //新建一个即将被添加的Article对象

    article.setTitle("今天是个写Java代码的好日子!");  //指定标题

Calendar calendar = Calendar.getInstance(); //创建日期对象

article.setPubTime(calendar.getTime()); //设置发布时间为当前时间

    Category category = categoryDao.getCategoryById(1);  //查询指定分类

article.setCategory(category);  //将指定的分类设置到Article对象(为文章指定分类)

User user = new User();  //创建一个用户

user.setId(4);  //指定用户为数据库表中id为4的用户

article.setUser(user);  //为文章指定发布用户

article.setContent("哈哈哈哈哈哈。。。。");  //设置文章的内容

boolean doFlag = articleDao.addArticle(article);  //添加文章

Assert.assertTrue(doFlag);

}

(6)测试Category与Article一对多关联是否好用

public class CategoryDaoSelectTest {

@Test

public void test() {

  CategoryDao categoryDao = new  CategoryDaoImpl();

  Category category = categoryDao.getCategoryById(1);

  int articleCount = category.getArticels().size();

  //由于做了关联关系,所以一个分类(Category)中包含多个文章(Article)

  for (Article article: category.getArticels()) {

    System.out.println(article.getTitle());

  }

    Assert.assertEquals(articleCount, 5);

  }

}

Mybatis 学习-4的更多相关文章

  1. MyBatis学习总结(二)——使用MyBatis对表执行CRUD操作(转载)

    本文转载自:http://www.cnblogs.com/jpf-java/p/6013540.html 上一篇博文MyBatis学习总结(一)--MyBatis快速入门中我们讲了如何使用Mybati ...

  2. MyBatis学习总结(八)——Mybatis3.x与Spring4.x整合(转载)

      孤傲苍狼 只为成功找方法,不为失败找借口! MyBatis学习总结(八)--Mybatis3.x与Spring4.x整合 一.搭建开发环境 1.1.使用Maven创建Web项目 执行如下命令: m ...

  3. MyBatis学习总结(七)——Mybatis缓存(转载)

      孤傲苍狼 只为成功找方法,不为失败找借口! MyBatis学习总结(七)--Mybatis缓存 一.MyBatis缓存介绍 正如大多数持久层框架一样,MyBatis 同样提供了一级缓存和二级缓存的 ...

  4. (原创)mybatis学习二,spring和mybatis的融合

    mybatis学习一夯实基础 上文介绍了mybatis的相关知识,这一节主要来介绍mybaits和spring的融合 一,环境搭建 1,jar包下载,下载路径为jar包 2,将包导入到java工程中 ...

  5. (原创)mybatis学习一,夯实基础

    一,what?(是什么) MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装.MyBatis可 ...

  6. MyBatis学习--简单的增删改查

    jdbc程序 在学习MyBatis的时候先简单了解下JDBC编程的方式,我们以一个简单的查询为例,使用JDBC编程,如下: Public static void main(String[] args) ...

  7. MyBatis学习总结(二)——使用MyBatis对表执行CRUD操作

    上一篇博文MyBatis学习总结(一)——MyBatis快速入门中我们讲了如何使用Mybatis查询users表中的数据,算是对MyBatis有一个初步的入门了,今天讲解一下如何使用MyBatis对u ...

  8. 【Todo】Mybatis学习-偏理论

    之前写过好几篇Mybatis相关的文章: http://www.cnblogs.com/charlesblc/p/5906431.html  <SSM(SpringMVC+Spring+Myba ...

  9. MyBatis学习系列三——结合Spring

    目录 MyBatis学习系列一之环境搭建 MyBatis学习系列二——增删改查 MyBatis学习系列三——结合Spring MyBatis在项目中应用一般都要结合Spring,这一章主要把MyBat ...

  10. MyBatis学习系列二——增删改查

    目录 MyBatis学习系列一之环境搭建 MyBatis学习系列二——增删改查 MyBatis学习系列三——结合Spring 数据库的经典操作:增删改查. 在这一章我们主要说明一下简单的查询和增删改, ...

随机推荐

  1. SQL生成随机数

    ALTER FUNCTION [dbo].[ufn_Random] ( @A INT, @B INT ) RETURNS INT AS BEGIN /* 功能:生成随机数 */ ,) , SELECT ...

  2. CSS在线字体库,外部字体的引用方法

    目录: 1:CSS家族五大字体 2:360和谷歌外部字体引用方法 3:谷歌外部字体引用方法详解 4:@font-face用法详解 一: {font-family:serif,sans-serif,fa ...

  3. Queue 应用——拓扑排序

    1. 拓扑排序 题目描述:对一个有向无环图(Directed Acyclic Graph, DAG)G进行拓扑排序,是将G中所有顶点排成线性序列,是的图中任意一堆顶点u和v,若边(u, v)在E(G) ...

  4. [51NOD1537] 分解(递推,矩阵快速幂)

    题目链接:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1537 思路:一开始用二项式拆了一下,发现这个式子的形式总能变成 ...

  5. JS实现 键盘操作

    JS实现 键盘操作: 详情可以去其逛网查看其API并下载,地址:http://craig.is/killing/mice <!DOCTYPE html PUBLIC "-//W3C// ...

  6. ASP.Net MVC4中封装CSS和js冗余代码(不让其大篇的显示在前台上)

    (1)封装CSS和JS代码,使用调用的方式在前台进行调用.是开发看起来简洁和易于管理,可达到重用.   由于asp.netMVC4 框架 ,在封装js和CSS的时候,有如下规范: using Syst ...

  7. 小型网站如何防范DDoS攻击

    ddos(Distributed Denial of Service,分布式拒绝服务攻击),俗称洪水攻击.是在传统的DoS攻击基础之上产生的新的破坏力更强的攻击方式.分布式拒绝服务攻击是指借助于客户/ ...

  8. SAP研究贴之--发票校验提示移动平均价为负

    近日,应付岗密集出现发票校验时移动平均价为负值导致过账失败的情况,采购经理又是拍桌子.又是摔杯子的.财务经理安排任务彻底清查,找出问题原因.哎,毫无头绪啊...测试机模拟业务吧流程:合同(系统外)-采 ...

  9. 字符设备 register_chrdev_region()、alloc_chrdev_region() 和 register_chrdev() (转载)

    1. 字符设备结构体 内核中所有已分配的字符设备编号都记录在一个名为 chrdevs 散列表里.该散列表中的每一个元素是一个 char_device_struct 结构,它的定义如下: static ...

  10. C/C++中static关键字作用总结

    来来来,来看这篇文章: http://www.cnblogs.com/biyeymyhjob/archive/2012/07/19/2598815.html 总结一下: 1.先来介绍它的第一条也是最重 ...