实体类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. ubuntu 设置DNS

    sudo vi /etc/resolv.conf #加入nameserver 114.114.114.114

  2. 学以致用八---centos7.2 安装vim8+支持python3

    目的:打造基于python的vim环境 也是在地铁上突然产生的一个想法,平时都是在pycharm上练习python,但有时候会提示激活码过期,又得上网找激活码,够折腾的.那何不在linux环境下来搭建 ...

  3. 整理mianshi2

    1.性能优化相关https://www.cnblogs.com/cr330326/p/8011523.html 2.CountDownLatchjava共享锁实现原理及CountDownLatch解析 ...

  4. (spfa) Highway Project (zoj 3946 )

    http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=5718   Highway Project Time Limit: 2 Seco ...

  5. panda

    这个项目很有意思,麻雀虽小五脏俱全. 页面使用rem和media query来设置字体和元素宽高image居中需要用到position 后端mysql使用阿里云的rds:nodejs的mysql模块的 ...

  6. linux命令 find的应用

    1.列出当前目录及子目录下所有文件和文件夹 2.在 /home目录下查找以 “.txt”结尾的文件名 3.在当前目录下查找所有以“.txt”结尾的文件 4基于目录深度搜索(向下最大深度限制为3) 5. ...

  7. [ASE][Daily Scrum]11.11

    各位1111快乐,不知道大家的卡上还剩多少钱啊~~~ TCP server目前遇到一点小瓶颈,不过server的两个人承诺说明天就可以搞定,给他们加油!~! 今天的plan~ View Shilin ...

  8. 关于质能等效的两个思想实验 Two Ideological Experiments on Mass-Energy Equivalence

    大家知道,物质和能量是等效的,虽然质能方程已暗示了这种等效关系,但并非显而易见.此等效性可以从以下两个思想实验中获知. 实验一:一台电子称上放置一个金属物体,加热它,称的读数将会略微增加.这是因为金属 ...

  9. Windows核心编程:第7章 线程调度、优先级和关联性

    Github https://github.com/gongluck/Windows-Core-Program.git //第7章 线程调度.优先级和关联性.cpp: 定义应用程序的入口点. // # ...

  10. 用C#中的键值对遍历数组或字符串元素的次数

    代码如下: string strs = "ad6la4ss42d6s3"; Dictionary<char, int> dic = new Dictionary< ...