实体类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. AngularJS实战之路由ui-view传参

    angular路由传参 首页 <!DOCTYPE html> <html ng-app="app"> <head> <title>路 ...

  2. Linux下VNC配置使用总结:开启+桌面配置+安全访问

    操作环境:CentOS 5.3 + Windows XP SP3 32bit + RealVNC 4.1.2 i386 + TigerVNC. 参考:潇湘隐者-Linux系统VNC配置实践总结,萨米的 ...

  3. 20155205 《Java程序设计》实验四 Android程序设计

    20155205 <Java程序设计>实验四 Android程序设计 一.实验内容及步骤 (一) Android Stuidio的安装测试 参考<Java和Android开发学习指南 ...

  4. 可执行 jar | 到底如何执行

    dog │ pom.xml │ └───src └───main └───java └───cn └───zno Dog.java bark │ pom.xml │ └───src └───main ...

  5. 微信接入时tomcat的端口调整

    必须以http://或https://开头,分别支持80端口和443端口. www.xx.com 等同于 www.xx.com:80 但tomcat默认端口是8080,需要修改为80 修改方法: TO ...

  6. Cacti Install Error

    Cacti Error happened while installing: ERROR: Your MySQL TimeZone database is not populated. Please ...

  7. vc6中向vs2010迁移的几个问题

    vc6版本支持的库编译:CJ60lib 1. 用vs2010打开CJ60库的源码的dsw,强制打开 (1)设置项目属性的语言 因为,如果代码字符的编码集不一样,则会出现函数冲定义,参数冲突等问题,这可 ...

  8. springJDBC和SpringJDBCTemplate解决方案探究

    先来看一个纯JDBC的例子,体会一下springJDBC和SpringJDBCTemplate两者的区别 一个Customer类 package com.mkyong.customer.model; ...

  9. [置顶] 获取网络数据中的数组显示成ListView的简单流程

    首先说一下  这是我自己的个人笔记,如果想看看,不用看细节,可以看流程. 定义一个线程池 ExecutorService pool = Executors.newFixedThreadPool(15) ...

  10. 用户访问网页流程、DNS 解析流程

    一.用户访问流程 二.DNS解析流程 DNS( Domain Name System)是“域名系统”的英文缩写,是一种组织成域层次结构的计算机和网络服务命名系统,它用于 TCP/IP 网络,它所提供的 ...