Mybatis 学习-4

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="articels" 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);

  }

}

时间: 2024-10-17 09:58:13

Mybatis 学习-4的相关文章

MyBatis学习总结(五)——实现关联表查询(转载)

孤傲苍狼 只为成功找方法,不为失败找借口! MyBatis学习总结(五)--实现关联表查询 一.一对一关联 1.1.提出需求 根据班级id查询班级信息(带老师的信息) 1.2.创建表和数据 创建一张教师表和班级表,这里我们假设一个老师只负责教一个班,那么老师和班级之间的关系就是一种一对一的关系. 1 CREATE TABLE teacher( 2 t_id INT PRIMARY KEY AUTO_INCREMENT, 3 t_name VARCHAR(20) 4 ); 5 CREATE TAB

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

孤傲苍狼 只为成功找方法,不为失败找借口! MyBatis学习总结(七)--Mybatis缓存 一.MyBatis缓存介绍 正如大多数持久层框架一样,MyBatis 同样提供了一级缓存和二级缓存的支持 一级缓存: 基于PerpetualCache 的 HashMap本地缓存,其存储作用域为 Session,当 Session flush 或 close 之后,该Session中的所有 Cache 就将清空. 2. 二级缓存与一级缓存其机制相同,默认也是采用 PerpetualCache,Hash

MyBatis:学习笔记(3)——关联查询

MyBatis:学习笔记(3)--关联查询 关联查询 理解联结 SQL最强大的功能之一在于我们可以在数据查询的执行中可以使用联结,来将多个表中的数据作为整体进行筛选. 模拟一个简单的在线商品购物系统,如果我们将用户信息和订单信息都保存在user表中,这样就不存在联结关系,因为我们仅仅操作一张表就好. 但是这是非常不明智的选择,举例来说,一个用户可以拥有多个订单,如果保存在一个表中,势必会导致用户信息的多次出现,因为每个订单绑定的用户信息都是相同的. 所以我们尽量要将不同的信息存储与不同的表中,但

MyBatis学习总结(六)——调用存储过程(转载)

孤傲苍狼 只为成功找方法,不为失败找借口! MyBatis学习总结(六)--调用存储过程 一.提出需求 查询得到男性或女性的数量, 如果传入的是0就女性否则是男性 二.准备数据库表和存储过程 1 create table p_user( 2 id int primary key auto_increment, 3 name varchar(10), 4 sex char(2) 5 ); 6 7 insert into p_user(name,sex) values('A',"男");

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

孤傲苍狼 只为成功找方法,不为失败找借口! MyBatis学习总结(八)--Mybatis3.x与Spring4.x整合 一.搭建开发环境 1.1.使用Maven创建Web项目 执行如下命令: mvn archetype:create -DgroupId=me.gacl -DartifactId=spring4-mybatis3 -DarchetypeArtifactId=maven-archetype-webapp -DinteractiveMode=false 如下图所示: 创建好的项目如下

mybatis学习笔记(1)

之前做项目的时候,DAO层写了一些spring jdbc,用起来的确不是很方便,今天特意去学习了新的框架:mybatis.把之前用spring-jdbc写的内容换成了mybatis框架搭建的内容. 首先你要到mybatis的官网去下mybatis的jar包:mybatis-3.2.7.jar.由于我是在spring的基础上去搭建mybatis所以还要去弄一个mybatis-spring-1.2.2.jar, 这个连接的包好像在spring官方是找不到的,需要自己去网上找. 进入正题.首先在src

Mybatis学习笔记(二) 之实现数据库的增删改查

开发环境搭建 mybatis 的开发环境搭建,选择: eclipse j2ee 版本,mysql 5.1 ,jdk 1.7,mybatis3.2.0.jar包.这些软件工具均可以到各自的官方网站上下载.首先建立一个名字为 MyBaits 的 dynamic web project 1. 可以创建maven项目,依赖的包mybatis-3.2.0-SNAPSHOT.jar,mysql-connector-java-5.1.22-bin.jar <!-- mybatis包 --> <depe

【Todo】Mybatis学习-偏理论

之前写过好几篇Mybatis相关的文章: http://www.cnblogs.com/charlesblc/p/5906431.html  <SSM(SpringMVC+Spring+Mybatis)框架程序on IDEA> 还有这个: http://www.cnblogs.com/charlesblc/p/5939505.html   <在上已个Java Spring MVC项目基础上加MyBatis> 还有这篇单独处理Mybatis内容的: http://www.cnblog

MyBatis学习总结(一)——MyBatis快速入门(转载)

孤傲苍狼 只为成功找方法,不为失败找借口! MyBatis学习总结(一)--MyBatis快速入门 一.Mybatis介绍 MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装.MyBatis可以使用简单的XML或注解用于配置和原始映射,将接口和Java的POJO(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录. 二.mybatis快速入门 2.1.准备

MyBatis学习总结(三)——优化MyBatis配置文件中的配置(转载)

孤傲苍狼 只为成功找方法,不为失败找借口! MyBatis学习总结(三)--优化MyBatis配置文件中的配置 一.连接数据库的配置单独放在一个properties文件中 之前,我们是直接将数据库的连接配置信息写在了MyBatis的conf.xml文件中,如下: 1 <?xml version="1.0" encoding="UTF-8"?> 2 <!DOCTYPE configuration PUBLIC "-//mybatis.org