实体类News

package org.mythsky.hibernatedemo;

import javax.persistence.*;

@Entity
@Table(name="news_inf")
public class News {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
private String title;
private String content; public Integer getId() {
return id;
} public void setId(Integer 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;
}
}

hibernate.cfg.xml

<?xml version='1.0' encoding='utf-8'?>

<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"> <hibernate-configuration> <session-factory> <!-- Database connection settings -->
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="connection.url">jdbc:mysql://10.200.151.28/demo</property>
<property name="connection.username">root</property>
<property name="connection.password">password</property> <!-- JDBC connection pool (use the built-in) -->
<property name="connection.pool_size"></property> <!-- SQL dialect -->
<property name="dialect">org.hibernate.dialect.MySQL5InnoDBDialect</property> <!-- Disable the second-level cache -->
<!--<property name="cache.provider_class">org.hibernate.cache.internal.NoCacheProvider</property>--> <!-- Echo all executed SQL to stdout -->
<property name="show_sql">true</property> <property name="hibernate.format_sql">true</property> <!-- Drop and re-create the database schema on startup -->
<property name="hbm2ddl.auto">update</property>
<mapping class="org.mythsky.hibernatedemo.News"></mapping>
<!--<mapping resource="News.hbm.xml"/>--> </session-factory> </hibernate-configuration>

注意这里IDE会提示

但如果不用这个的话在创建表的时候会报错

测试类NewsManager

package org.mythsky.hibernatedemo;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.boot.MetadataSources;
import org.hibernate.boot.registry.BootstrapServiceRegistryBuilder;
import org.hibernate.boot.registry.StandardServiceRegistry;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.cfg.Configuration;
import org.hibernate.mapping.MetadataSource;
import org.hibernate.service.ServiceRegistry; public class NewsManager {
public static void main(String[] args){
ServiceRegistry serviceRegistry=new StandardServiceRegistryBuilder().configure().build();
SessionFactory sessionFactory=new MetadataSources(serviceRegistry).buildMetadata().buildSessionFactory();
Session session=sessionFactory.openSession();
Transaction tx=session.beginTransaction();
News news=new News();
news.setTitle("my world");
news.setContent("hello world");
session.save(news);
tx.commit();
session.close();
sessionFactory.close();
}
}

运行可以看到sql

属性映射

@Formula

@Formula("(select concat(title,content) from news_inf where id=id)")
private String fullContent;

fullContent字段不会保存在表中,测试

News n=(News)session.get(News.class,);
System.out.println(n.getFullContent());

输出

@Transient

使用此注解的字段不会保存在表中

@Enumerated

枚举

public enum Season {
spring,summer,autumn,winter
}

修改News

@Enumerated(EnumType.ORDINAL)
private Season season;

EnumType.ORDINAL保存的是枚举的值,例如1,EnumType.STRING保存的是名称,例如spring

@Lob @Basic

@Lob用来保存大数据类型

byte[],Byte[]或java.io.Serializable保存为Blob

char[],Character[]或java.lang.String保存为Clob

@Lob
@Basic(fetch = FetchType.LAZY)
private byte[] pic;

@Basic(fetch = FetchType.LAZY)表示延迟加载,@Basic(fetch = FetchType.EAGER,optional = false),optional表示是否允许null

@Temporal

@Temporal(TemporalType.DATE)
private Date birth;

TemporalType.DATE,TemporalType.TIME,TemporalType.TIMESTAMP分别对应数据库的类型

映射集合属性

List集合

Person.java

package org.mythsky.hibernatedemo;

import javax.persistence.*;
import java.util.ArrayList;
import java.util.List; @Entity
@Table(name = "person_inf")
public class Person {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
private String name;
private int age;
@ElementCollection(targetClass = String.class)
@CollectionTable(name = "school_inf",joinColumns = @JoinColumn(name = "person_id",nullable = false))
@Column(name = "school_name")
@OrderColumn(name = "list_order")
private List<String> schools=new ArrayList<>(); 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 int getAge() {
return age;
} public void setAge(int age) {
this.age = age;
} public List<String> getSchools() {
return schools;
} public void setSchools(List<String> schools) {
this.schools = schools;
} }

测试PersonManager.java

package org.mythsky.hibernatedemo;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.boot.MetadataSources;
import org.hibernate.boot.registry.StandardServiceRegistry;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder; public class PersonManager {
public static void main(String[] args){
SessionFactory sessionFactory;
StandardServiceRegistry registry = new StandardServiceRegistryBuilder()
.configure() // configures settings from hibernate.cfg.xml
.build();
try {
sessionFactory = new MetadataSources( registry ).buildMetadata().buildSessionFactory();
Session session = sessionFactory.openSession();
session.beginTransaction();
Person person=new Person();
person.setAge();
person.setName("Tom");
person.getSchools().add("小学");
person.getSchools().add("中学");
session.save(person);
session.getTransaction().commit();
session.close();
}
catch (Exception e) {
StandardServiceRegistryBuilder.destroy( registry );
}
}
}

注意在hibernate.cfg.xml中配置

<mapping class="org.mythsky.hibernatedemo.Person"></mapping>

运行后添加了两张表

map集合

@ElementCollection(targetClass = Float.class)
@CollectionTable(name = "score_inf",joinColumns = @JoinColumn(name = "person_id",nullable = false))
@MapKeyColumn(name = "subject_name")
@MapKeyClass(String.class)
@Column(name = "mark")
private Map<String,Float> scores=new HashMap<>();

修改测试代码

Person person=new Person();
person.setAge();
person.setName("Jerry");
person.getSchools().add("小学");
person.getSchools().add("中学");
person.getScores().put("语文",90f);
person.getScores().put("数学",100f);
session.save(person);

可以看到新增的表

联合主键

Person2.java

package org.mythsky.hibernatedemo;

import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;
import java.io.Serializable; @Entity
@Table(name = "person_inf2")
public class Person2 implements Serializable {
@Id
private String first;
@Id
private String last;
private int age; @Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false; Person2 person2 = (Person2) o; return getFirst().equals(person2.getFirst())&&getLast().equals(person2.getLast());
} @Override
public int hashCode() {
int result = getFirst() != null ? getFirst().hashCode() : ;
result = * result + (getLast() != null ? getLast().hashCode() : );
return result;
} public String getFirst() {
return first;
} public void setFirst(String first) {
this.first = first;
} public String getLast() {
return last;
} public void setLast(String last) {
this.last = last;
} public int getAge() {
return age;
} public void setAge(int age) {
this.age = age;
}
}

这里采用first和last作为联合主键,需要注意重写equals和hashCode方法。

映射组件属性

Name.java

package org.mythsky.hibernatedemo;

import org.hibernate.annotations.Parent;

import javax.persistence.Column;
import javax.persistence.Embeddable; @Embeddable
public class Name {
@Column(name = "fitstname")
private String first;
@Column(name = "lastname")
private String last;
@Parent
private Person owner; public String getFirst() {
return first;
} public void setFirst(String first) {
this.first = first;
} public String getLast() {
return last;
} public void setLast(String last) {
this.last = last;
} public Person getOwner() {
return owner;
} public void setOwner(Person owner) {
this.owner = owner;
} public Name(String first, String last) { this.first = first;
this.last = last;
} public Name() { }
}

注意Name需要实现Serializable接口,Person中将原来的String name去掉,换乘Name name;

private Name name;

修改测试代码

Person person=new Person();
person.setAge();
// person.setName("Jerry");
Name name=new Name();
name.setFirst("myth");
name.setLast("sky");
person.setName(name);

运行可以看到如下结果

java+hibernate+mysql的更多相关文章

  1. java向MySQL插入当前时间的四种方式和java时间日期格式化的几种方法(案例说明)

    转载地址:http://www.devba.com/index.php/archives/4581.html java向MySQL插入当前时间的四种方式和java时间日期格式化的几种方法(案例说明); ...

  2. java实现mysql的备份还原

    此文章是基于 1. 搭建Jquery+SpringMVC+Spring+Hibernate+MySQL平台 2. jquery+springMVC实现文件上传 一. 简介 备份和导入是一个互逆的过程. ...

  3. Spring MVC Hibernate MySQL Integration(集成) CRUD Example Tutorial【摘】

    Spring MVC Hibernate MySQL Integration(集成) CRUD Example Tutorial We learned how to integrate Spring ...

  4. (转)java向MySQL插入当前时间的四种方式和java时间日期格式化的几种方法(案例说明)

    java向MySQL插入当前时间的四种方式和java时间日期格式化的几种方法(案例说明);部分资料参考网络资源 1. java向MySQL插入当前时间的四种方式 第一种:将java.util.Date ...

  5. Java向mysql中插入时间的方法

    ava向MySQL插入当前时间的四种方式和java时间日期格式化的几种方法(案例说明);部分资料参考网络资源  java向MySQL插入当前时间的四种方式 第一种:将java.util.Date类型的 ...

  6. java连接mysql

    Java 连接 MySQL 需要驱动包,最新版下载地址为:http://dev.mysql.com/downloads/connector/j/,解压后得到jar库文件,然后在对应的项目中导入该库文件 ...

  7. java调用mysql服务做备份与恢复

    首先添加mysql的bin到环境变量,这样可以简写部分命令,并且做到不依赖系统mysql的具体安装路径. 重启计算机可以让添加的环境变量在java代码中调用时生效.(cmd中生效但java中调用没有生 ...

  8. Java实现MySQL数据库导入

    距离上班还有一段时间.现在总结一下如何使用Java语言实现MySQL数据库导入: 首先新建名为test的数据库: 其次执行下面Java代码: import java.io.File; import j ...

  9. Java实现MySQL数据库备份(二)

    权声明:本文为博主原创文章,未经博主允许不得转载. 博客<Java实现MySQL数据库备份(一)>使用I/O流的方式实现了MySQL数据库的备份,这种方法比较繁杂,下面介绍另一种备份MyS ...

随机推荐

  1. silverlight 定时器 System.Windows.Threading.DispatcherTimer

    声明 System.Windows.Threading.DispatcherTimer _MessageControler; //刷新 _MessageControler = new System.W ...

  2. SecureCRTv7.3 和 navicat110_mysql

    激活步骤: 一.首次使用: 1.保持SecureCRT未打开. 2.打开注册机keygen.exe文件(Windows vista ,7,8需要以管理员身份运行),点击[Patch]按钮,会让你选择文 ...

  3. bind研究(一)转载

    ## 阅读数:6537 最近自学JavaScript,学到bind方法这块儿有些地方不太明白,自己就查了些资料,结合自己的理解写了这篇文章以备后面回顾用...其实应该还是搬砖为主吧. 什么是this对 ...

  4. Django-配置、静态文件与路由

    -----配置文件 1.BASE_DIR BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))   2.DEBU ...

  5. android 数据库更新

    SQLiteOpenHelper封装       继承SQLiteOpenHelper类,在构造方法中分别需要传入Context,数据库名称,CursorFactory(一般传入null,为默认数据库 ...

  6. Android Studio开发之Gradle科普

    我们以前开发都是用 Eclipse ,而 Eclipse 大家都知道是一种 IDE (集成开发环境),最初是用来做 Java 开发的,而 Android 是基于 Java 语言的,所以最初 Googl ...

  7. 采用c3p0数据库连接池底层是jdbc的数据库的增删改查

    1.新建dbutils包,里面是JdbcUtils类: package cn.com.xxx.xxx.dbutil; import java.sql.Connection; import java.s ...

  8. delphi 过滤开头 结尾 全部 空格的函数

    function TrimAnsi(const S: AnsiString): Ansistring; var I, L: Integer; begin L := Length(S); I := ; ...

  9. bootstrap基础学习小记(三)网格简介

    网格系统:网格系统的实现原理非常简单,仅仅是通过定义容器大小,平分12份(也有平分成24份或32份,但12份是最常见的),再调整内外边距,最后结合媒体查询,就制作出了强大的响应式网格系统.Bootst ...

  10. C# 对象转XML 支持匿名类

    在网上找了很多关于对象转XML的,大多不支持匿名类转换,今天在stackoverflow找了一篇文章  但是有些许BUG  已经修复 public static class ObjectToXML { ...