java xml 集合,集合映射中的映射列表(使用xml文件)

本篇文章帮大家学习集合映射中的映射列表(使用xml文件),包含了集合映射中的映射列表(使用xml文件)使用方法、操作技巧、实例演示和注意事项,有一定的学习价值,大家可以用来参考。

如果持久化类具有List对象,我们可以通过映射文件中的类的元素或注释来映射List。

在这里,我们正在使用论坛的场景,其中一个问题有多个答案。

在这里,我们使用论坛的场景,其中一个问题有多个答案。我们来看看如何在映射文件中实现列表(List):

...

...

注: List 和 Map是基于索引的集合,因此将在表中创建一个额外的列进行索引。

集合映射中的映射列表(List)示例

在这个例子中,我们将看到列表(List)在集合映射的完整示例。 这是List中存储字符串值而不是实体引用的示例,这就是为什么要在列表元素中使用element标签而不是one-to-many标签的元素。

这个示例项目的完整结构如下图所示 -

1)创建持久化类

这个持久化类定义了类的属性,包括List。

package com.yiibai;

import java.util.List;

public class Question {

private int id;

private String qname;

private List answers;

public int getId() {

return id;

}

public void setId(int id) {

this.id = id;

}

public String getQname() {

return qname;

}

public void setQname(String qname) {

this.qname = qname;

}

public List getAnswers() {

return answers;

}

public void setAnswers(List answers) {

this.answers = answers;

}

}

2)创建持久化类的映射文件

在这里,我们创建了用于定义列表的question.hbm.xml文件。

/p>

"-//Hibernate/Hibernate Mapping DTD 3.0//EN"

"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

3)创建配置文件

此文件包含有关数据库和映射文件的信息。

文件:hibernate.hnm.xml 内容如下 -

/p>

"-//Hibernate/Hibernate Configuration DTD 3.0//EN"

"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

update

com.mysql.jdbc.Driver

jdbc:mysql://localhost:3306/test

root

123456

org.hibernate.dialect.MySQL5InnoDBDialect

true

4)创建存储数据的类

在这个类(MainTest.java)中,用来存储Question类的数据。使用HQL来获取Answer类的所有记录,包括答案。 在这个示例中,它从功能相关的两个表中获取数据。

package com.yiibai;

import java.util.ArrayList;

import java.util.Iterator;

import java.util.List;

import org.hibernate.*;

import org.hibernate.boot.MetadataSources;

import org.hibernate.boot.registry.StandardServiceRegistry;

import org.hibernate.boot.registry.StandardServiceRegistryBuilder;

import org.hibernate.cfg.*;

public class MainTest {

public static void main(String[] args) {

// 但在5.1.0版本汇总,hibernate则采用如下新方式获取:

// 1. 配置类型安全的准服务注册类,这是当前应用的单例对象,不作修改,所以声明为final

// 在configure("cfg/hibernate.cfg.xml")方法中,如果不指定资源路径,默认在类路径下寻找名为hibernate.cfg.xml的文件

final StandardServiceRegistry registry = new StandardServiceRegistryBuilder()

.configure("hibernate.cfg.xml").build();

// 2. 根据服务注册类创建一个元数据资源集,同时构建元数据并生成应用一般唯一的的session工厂

SessionFactory sessionFactory = new MetadataSources(registry)

.buildMetadata().buildSessionFactory();

/**** 上面是配置准备,下面开始我们的数据库操作 ******/

Session session = sessionFactory.openSession();// 从会话工厂获取一个session

// creating transaction object

Transaction t = session.beginTransaction();

ArrayList list1 = new ArrayList();

list1.add("java is a programming language");

list1.add("java is a platform");

ArrayList list2 = new ArrayList();

list2.add("Servlet is an Interface");

list2.add("Servlet is an API");

Question question1 = new Question();

question1.setQname("Java 是什么?");

question1.setAnswers(list1);

Question question2 = new Question();

question2.setQname("Hibernate 是什么?");

question2.setAnswers(list2);

session.persist(question1);

session.persist(question2);

t.commit();

// 查询数据

Query query = session.createQuery("from Question");

List list = query.list();

Iterator itr = list.iterator();

while (itr.hasNext()) {

Question q = itr.next();

System.out.println("Question Name: " + q.getQname());

// printing answers

List list21 = q.getAnswers();

Iterator itr2 = list21.iterator();

while (itr2.hasNext()) {

System.out.println(itr2.next());

}

}

session.close();

System.out.println("success");

}

}

执行上面代码,得到以下输出结果 -

log4j:WARN No appenders could be found for logger (org.jboss.logging).

log4j:WARN Please initialize the log4j system properly.

log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.

Sun Mar 26 05:18:56 CST 2017 WARN: Establishing SSL connection without server's identity verification is not recommended. According to MySQL 5.5.45+, 5.6.26+ and 5.7.6+ requirements SSL connection must be established by default if explicit option isn't set. For compliance with existing applications not using SSL the verifyServerCertificate property is set to 'false'. You need either to explicitly disable SSL by setting useSSL=false, or set useSSL=true and provide truststore for server certificate verification.

Hibernate: select max(id) from question_100

Hibernate: insert into question_100 (qname, id) values (?, ?)

Hibernate: insert into question_100 (qname, id) values (?, ?)

Hibernate: insert into answer_100 (qid, type, answer) values (?, ?, ?)

Hibernate: insert into answer_100 (qid, type, answer) values (?, ?, ?)

Hibernate: insert into answer_100 (qid, type, answer) values (?, ?, ?)

Hibernate: insert into answer_100 (qid, type, answer) values (?, ?, ?)

Hibernate: select question0_.id as id1_1_, question0_.qname as qname2_1_ from question_100 question0_

Question Name: What is Java?

Hibernate: select answers0_.qid as qid1_0_0_, answers0_.answer as answer3_0_0_, answers0_.type as type2_0_ from answer_100 answers0_ where answers0_.qid=?

java is a programming language

java is a platform

Question Name: What is Servlet?

Hibernate: select answers0_.qid as qid1_0_0_, answers0_.answer as answer3_0_0_, answers0_.type as type2_0_ from answer_100 answers0_ where answers0_.qid=?

Servlet is an Interface

Servlet is an API

Question Name: What is Java?

Hibernate: select answers0_.qid as qid1_0_0_, answers0_.answer as answer3_0_0_, answers0_.type as type2_0_ from answer_100 answers0_ where answers0_.qid=?

java is a programming language

java is a platform

Question Name: What is Servlet?

Hibernate: select answers0_.qid as qid1_0_0_, answers0_.answer as answer3_0_0_, answers0_.type as type2_0_ from answer_100 answers0_ where answers0_.qid=?

Servlet is an Interface

Servlet is an API

Question Name: What is Java?

Hibernate: select answers0_.qid as qid1_0_0_, answers0_.answer as answer3_0_0_, answers0_.type as type2_0_ from answer_100 answers0_ where answers0_.qid=?

java is a programming language

java is a platform

Question Name: What is Servlet?

Hibernate: select answers0_.qid as qid1_0_0_, answers0_.answer as answer3_0_0_, answers0_.type as type2_0_ from answer_100 answers0_ where answers0_.qid=?

Servlet is an Interface

Servlet is an API

Question Name: Java 是什么?

java is a programming language

java is a platform

Question Name: Hibernate 是什么?

Servlet is an Interface

Servlet is an API

success

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值