hibernate 映射基本属性
新建一个po,News
public class News { private Long id; private String title; private String content; private String fullContent; public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public String getContent() { return content; } public void setContent(String content) { this.content = content; } public String getfullContent() { return fullContent; } public void setfullContent(String fullContent) { this.fullContent = fullContent; } }
对应的News.hbm.xml
<?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping package="com.hibernate.demo.po"> <class name="News" table="news" lazy="true"> <id name="id" column="news_id"> <!-- generate optimal identity strategy according to the configured dialect --> <generator class="native"/> </id> <property name="title" type="string" not-null="true"/> <property name="content" type="string" /> <!-- 通过formula指定该属性值没有对应的实际数据列 该属性值将由系统根据表达式来生成 --> <property name="fullContent" formula="(select concat(nt.title,nt.content) from news nt where nt.news_id = news_id)"/> </class> </hibernate-mapping>
测试类:NewsManager.java
import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.Transaction; import org.hibernate.cfg.Configuration; import com.hibernate.demo.po.News; /** * * ---test1--- * 打开注释1的内容,保存news到数据库,然后把注释1重新注释掉,然后打开注释2,观察控制台输出的sql * 会发现,getfullContent()取到了你要的值,但是观察数据库news表,并没有fullContent字段 * * @author apprentice * */ public class NewsManager { public static void main(String[] args){ //实例化Configuration,默认加载hibernate.cfg.xml Configuration cfg = new Configuration().configure("hibernate.cfg.xml"); //工厂模式,创建sessionFactory SessionFactory sf = cfg.buildSessionFactory(); //实例化session Session session = sf.getCurrentSession(); //事务开始 Transaction tx = session.beginTransaction(); /* 注释1 News news = new News(); news.setTitle("学海无涯"); news.setContent("泰山不辞杯土,大海不拒细流"); session.save(news); */ /* 注释2 News news2 =(News)session.load(News.class,new Long(1)); System.out.println(news2.getfullContent()); tx.commit(); */ } }
test1对应的News.hbm.xml
<?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping package="com.hibernate.demo.po"> <class name="News" table="news" lazy="true"> <id name="id" column="news_id"> <!-- generate optimal identity strategy according to the configured dialect --> <generator class="native"/> </id> <property name="title" type="string" not-null="true"/> <property name="content" type="string" /> <!-- 通过formula指定该属性值没有对应的实际数据列 该属性值将由系统根据表达式来生成 --> <property name="fullContent" formula="(select concat(nt.title,nt.content) from news nt where nt.news_id = news_id)"/> </class> </hibernate-mapping>
对应的news表结构
CREATE TABLE news( news_id BIGINT AUTO_INCREMENT PRIMARY KEY, title VARCHAR(255) NOT NULL, content VARCHAR(255) )
test2
修改News.hbm.xm
<?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping package="com.hibernate.demo.po"> <class name="News" table="news" lazy="true"> <id name="id" column="news_id"> <!-- generate optimal identity strategy according to the configured dialect --> <generator class="native"/> </id> <property name="title" type="string" not-null="true"/> <property name="content" type="string" /> <!-- 数据库定义了一个insert 触发器,设置full_content --> <property name="fullContent" column="full_content" type="string" generated="insert"/> </class> </hibernate-mapping>
news表结构改为
CREATE TABLE news( news_id BIGINT AUTO_INCREMENT PRIMARY KEY, title VARCHAR(255) NOT NULL, content VARCHAR(255) full_content VARCHAR(255) )
对应的insert触发器
DELIMITER | CREATE TRIGGER tri_full_content_gen BEFORE INSERT ON news FOR EACH ROW BEGIN SET new.full_content=CONCAT(new.title,new.content); END; |
测试代码:
import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.Transaction; import org.hibernate.cfg.Configuration; import com.hibernate.demo.po.News; /** * * ---test2--- * * @author apprentice * */ public class NewsManager { public static void main(String[] args){ //实例化Configuration,默认加载hibernate.cfg.xml Configuration cfg = new Configuration().configure("hibernate.cfg.xml"); //工厂模式,创建sessionFactory SessionFactory sf = cfg.buildSessionFactory(); //实例化session Session session = sf.getCurrentSession(); //事务开始 Transaction tx = session.beginTransaction(); News news = new News(); news.setTitle("学海无涯"); news.setContent("泰山不辞杯土,大海不拒细流"); session.save(news); tx.commit(); } }
结果截图:
相关推荐
而MyEclipse作为一款强大的Java集成开发环境,提供了对Hibernate的良好支持,包括自动生成Hibernate映射文件的功能。本文将详细介绍如何在MyEclipse中创建和使用Hibernate映射文件。 首先,理解Hibernate映射文件...
首先,我们需要了解Hibernate映射文件的基本结构。通常,一个映射文件以`.hbm.xml`为扩展名,它使用XML格式来描述Java类和数据库表的对应关系。映射文件包含了类名、表名、字段及其数据类型等信息。例如: ```xml ...
综上所述,"Hibernate映射配置实例大全"涵盖的内容广泛,包括基本的配置文件设置、实体类的XML和注解映射、集合映射、加载策略、事务管理和缓存配置等。通过深入学习和实践这些实例,开发者可以熟练地运用Hibernate...
在Hibernate中,数组映射是将数据库表的一列或多列数据映射到Java对象的一个数组属性上。数组可以是基本类型数组或对象类型的数组。这种映射方式简化了数据访问,并提高了代码的可读性和可维护性。 ### 配置数组...
在Hibernate中,`Session`是操作数据库的基本单元,它负责管理对象的状态。而`Transaction`则用于处理数据库事务,确保数据的一致性。通常在每次数据库操作前后,都会进行`beginTransaction`和`commit/...
**标题解析:**“hibernate映射心得 原创” 这个标题表明了本文将主要探讨作者在使用Hibernate框架进行对象关系映射(ORM)时的个人理解和经验。Hibernate是一个流行的Java ORM框架,它允许开发者用面向对象的方式...
首先,我们需要了解一个基本的Hibernate映射文件结构: ```xml <hibernate-mapping> <!-- 映射类的属性 --> </hibernate-mapping> ``` 这里的`<class>`标签表示映射到特定的Java类,其属性`name`指定了对应的...
下面我们将详细介绍如何在MyEclipse中自动生成Hibernate映射文件。 首先,我们需要建立数据库连接。在MyEclipse中,可以通过`Window`菜单打开`MyEclipse Database Explorer`视图。在这里,你可以创建新的数据库连接...
### 深入理解Hibernate映射文件 #### Hibernate概述与角色 Hibernate是一个开源的对象关系映射(ORM)框架,它让开发人员能够用面向对象的方式处理数据库操作,从而避免了大量的SQL编写工作。Hibernate的设计理念...
自动生成Hibernate映射文件的功能可以帮助我们快速构建项目,避免手动编写XML配置的繁琐工作。 要自动生成Hibernate映射文件,首先确保你已安装了MyEclipse的Hibernate插件。接下来,按照以下步骤操作: 1. **创建...
1. `<project>`:根元素,定义项目的基本属性,如default(默认目标)、basedir(基目录)、name(项目名称)和description(项目描述)。 2. `<target>`:定义构建目标,可以有依赖关系(depends),并可以设置条件...
此外,自定义对象的映射是Hibernate映射中的一个重要部分。通过在实体类上使用@Entity注解,并使用@Id注解指定主键字段,可以将一个Java类映射到数据库的一张表。字段则通过@Column注解来指定列名和属性,如长度、...
在本篇文章中,我们将深入探讨Hibernate映射模板及其相关知识点。 首先,我们要理解的是Hibernate的核心概念——对象关系映射。ORM允许开发者用面向对象的方式来处理数据库,避免了直接编写SQL语句,提高了代码的...
在构建网上商城系统时,数据库的设计与管理是一个关键环节,特别是在使用对象关系映射(ORM)框架如Hibernate时。Hibernate是一种流行的Java ORM框架,它允许开发者以面向对象的方式来操作数据库,减少了传统SQL代码...
一、 环境搭建和基本映射 在使用 Hibernate 注解映射之前,需要添加相关的 jar 包,包括 hibernate-annotations.jar、ejb3-persistence.jar 和 hibernate-commons-annotations.jar。 在实体类中,可以使用 JPA 的...
在Java开发中,Hibernate作为一款强大的对象关系映射(ORM)框架,极大地简化了数据库操作。本文将深入探讨Hibernate中实体映射的一对一关联关系的两种实现方式:共享主键方式和唯一外键方式。 首先,我们要理解...
例如,如果集合元素是基本类型,我们可以直接映射;如果是复杂类型的对象,就需要指定对应的实体类。 3. **一对一(One-to-One)映射** 在集合映射中,一对一关系通常表现为单个实体与集合的关系。例如,一个用户...
在Java的持久化框架Hibernate中,集合映射是将数据库中的表关系映射到对象的集合属性上,以便更好地管理和操作数据。这篇文章将深入探讨Hibernate中的集合映射机制,包括其基本概念、类型以及如何在实际开发中进行...