Hibernate学习(一)创建数据表
(1)生成数据库表的创建:
// 默认读取hibernate.cfg.xml文件
Configuration cfg = new Configuration().configure(); // 生成并输出sql到文件(当前目录)和数据库
SchemaExport export = new SchemaExport(cfg); // 创建表结构,第一个true 表示在控制台打印sql语句,第二个true 表示导入sql语句到数据库
export.create(true, true);
(2)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>
<!-- 必须去配置的属性 -->
<!-- 配置数据库连接的基本信息: -->
<property name="hibernate.connection.driver_class">
com.mysql.jdbc.Driver
</property>
<property name="hibernate.connection.url">
jdbc:mysql:///hibernate
</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password">123456</property>
<!-- Hibernate的方言 -->
<!-- 生成底层SQL不同的 -->
<property name="hibernate.dialect">
org.hibernate.dialect.MySQLDialect
</property> <!-- 可选的属性 -->
<!-- 显示SQL -->
<property name="hibernate.show_sql">true</property>
<!-- 格式化SQL -->
<property name="hibernate.format_sql">true</property>
<!-- hbm:映射 to DDL: create drop alter -->
<property name="hibernate.hbm2ddl.auto">update</property> <!-- 通知Hibernate加载那些映射文件 -->
<mapping resource="cn/lonecloud/domain/User.hbm.xml" />
<mapping resource="cn/lonecloud/domain/Customer.hbm.xml" />
<mapping resource="cn/lonecloud/domain/Order.hbm.xml" /> </session-factory>
</hibernate-configuration>
(3)log4j.properties文件
### direct log messages to stdout ###
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.err
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n ### direct messages to file mylog.log ###
log4j.appender.file=org.apache.log4j.FileAppender
log4j.appender.file.File=c\:mylog.log
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n ### set log levels - for more verbose logging change 'info' to 'debug' ### log4j.rootLogger=off, stdout
(4)User.java
package cn.lonecloud.domain; import java.io.Serializable;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.Date; public class User implements Serializable,Cloneable { private String id;
private String name;
private String password;
private Date birthday;
public User(){
System.out.println("user");
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password; }
public void setPassword(String password) {
this.password = password;
}
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
@Override
public Object clone() throws CloneNotSupportedException {
Class clazz = User.class;
User user =null;
try {
user = (User)clazz.newInstance();
/*user.setBirthday(this.birthday);
user.setId(this.id);
user.setPassword(this.password);
user.setName(this.name);*/
Field[] declaredFields = clazz.getDeclaredFields();
for(Field field :declaredFields){
Class<?> parameterTypes = field.getType();
String fieldName = field.getName();
String methodName = "set"+fieldName.substring(0,1).toUpperCase()+field.getName().substring(1);
Method method = clazz.getDeclaredMethod(methodName, parameterTypes);
field.setAccessible(true);
method.invoke(user,field.get(this));
}
return user;
} catch (Exception e) {
e.printStackTrace();
}
return null;
} }
(5).user.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="cn.lonecloud.domain" >
<class name="User" table="t_user" select-before-update="false">
<!--hibernate为我们生成主键id-->
<id name="id">
<generator class="uuid" />
</id> <!--默认把类的变量映射为相同名字的表列,当然我们使用column属性修改表字段-->
<property name="name" column="names"></property>
<property name="password"></property>
<property name="birthday" type="date"></property> <!--当为日期类型的时候标明date类型--> </class>
</hibernate-mapping>
6.Customer.java
package cn.lonecloud.domain; import java.io.Serializable;
import java.util.HashSet;
import java.util.Set; public class Customer implements Serializable { private String id; private String customerName; private Set<Order> orders = new HashSet<Order>(); public String getId() {
return id;
} public void setId(String id) {
this.id = id;
} public String getCustomerName() {
return customerName;
} public void setCustomerName(String customerName) {
this.customerName = customerName;
} public Set<Order> getOrders() {
return orders;
} public void setOrders(Set<Order> orders) {
this.orders = orders;
} }
7.Customer.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="cn.lonecloud.domain" >
<class name="Customer" table="t_customer" lazy="true">
<!--hibernate为我们生成主键id-->
<id name="id">
<generator class="uuid" />
</id> <!--默认把类的变量映射为相同名字的表列,当然我们使用column属性修改表字段-->
<property name="customerName" column="customerName"></property>
<set name="orders" lazy="extra" fetch="join" cascade="all-delete-orphan"> <!-- lazy fetch -->
<key column="customer_id"></key>
<one-to-many class="cn.lonecloud.domain.Order"/>
</set> </class>
</hibernate-mapping>
8.Order.java
package cn.lonecloud.domain;
import java.io.Serializable;
public class Order implements Serializable{
private String id;
private String orderNumber;
private float price;
private Customer customer;
public Customer getCustomer() {
return customer;
}
public void setCustomer(Customer customer) {
this.customer = customer;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getOrderNumber() {
return orderNumber;
}
public void setOrderNumber(String orderNumber) {
this.orderNumber = orderNumber;
}
public float getPrice() {
return price;
}
public void setPrice(float price) {
this.price = price;
}
}
9.Order.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="cn.lonecloud.domain" >
<class name="Order" table="t_order" >
<!--hibernate为我们生成主键id-->
<id name="id">
<generator class="uuid" />
</id> <!--默认把类的变量映射为相同名字的表列,当然我们使用column属性修改表字段-->
<property name="orderNumber" column="orderNumber"></property>
<property name="price" column="price"></property>
<many-to-one name="customer" class="cn.lonecloud.domain.Customer">
<column name="customer_id"/>
</many-to-one>
</class>
</hibernate-mapping>
Hibernate学习(一)创建数据表的更多相关文章
- oracle的学习 第二节:创建数据表
学习内容: A.创建数据库和表空间 B.创建用户和分配权限 C.创建数据表 一.创建数据库和表空间 (一)SQL语言的基本概念 1.概念 高级的结构化查询语言:沟通数据库服务器和客户的重要桥梁. PL ...
- 学习笔记之--Navicat Premium创建数据表
1.打开Navicat Premium,点击连接,选择MySQL,创建新连接.输入安装MySQL是的用户名和密码.点击确定. 2.admin数据连接已经创建成功.下面为admin新建数据库,输入数据库 ...
- MySQL学习笔记_2_MySQL创建数据表(上)
MySQL创建数据表(上) 一.创建数据表的SQL语句模型[弱类型] CREATETABLE [IF NOT EXISTS] 表名称( 字段名1列的类型[属性][索引], 字段名2 列的类型[属性][ ...
- Mysql学习(慕课学习笔记4)创建数据表、查看数据表、插入记录
创建数据表 Create table [if not exists] table_name(column_name data_type,…….) UNSIGNED 无符号SIGNED 有符号 查看创建 ...
- MySQL学习笔记_4_MySQL创建数据表(下)
MySQL创建数据表(下) 五.数据表类型及存储位置 1.MySQL与大多数数据库不同,MySQL有一个存储引擎概念.MySQL可以针对不同的存储需求选择不同的存储引擎. 2. showengines ...
- MySQL学习笔记_3_MySQL创建数据表(中)
MySQL创建数据表(中) 三.数据字段属性 1.unsigned[无符号] 可以让空间增加一倍 比如可以让-128-127增加到0-255 注意:只能用在数值型字段 2.zerofill[前导零] ...
- 吴裕雄--天生自然MySQL学习笔记:MySQL 创建数据表
创建MySQL数据表需要以下信息: 表名 表字段名 定义每个表字段 语法 以下为创建MySQL数据表的SQL通用语法: CREATE TABLE table_name (column_name col ...
- 【spring boot】spring boot 2.0 项目中使用mysql驱动启动创建的mysql数据表,引擎是MyISAM,如何修改启动时创建数据表引擎为【spring boot 2.0】
默认创建数据表使用的引擎是MyISAM 2018-05-14 14:16:37.283 INFO 7328 --- [ restartedMain] org.hibernate.dialect.Dia ...
- mysql之创建数据库,创建数据表
写在前面 项目中用到mysql数据库,之前也没用过mysql,今天就学下mysql的常用的语法,发现跟sql server的语法极其相似.用起来还是蛮简单的. 一个例子 1.创建一个名为School的 ...
- SpringBoot+Mybatis 自动创建数据表(适用mysql)
Mybatis用了快两年了,在我手上的发展史大概是这样的 第一个阶段 利用Mybatis-Generator自动生成实体类.DAO接口和Mapping映射文件.那时候觉得这个特别好用,大概的过程是这样 ...
随机推荐
- shopnc验证码显示不了
data/config文件编码问题,要utf-8无bom
- html5移动端meta自动适应标签
控制显示区域各种属性: <meta content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-sc ...
- MySQL大表优化方案
转:https://segmentfault.com/a/1190000006158186?hmsr=toutiao.io&utm_medium=toutiao.io&utm_sour ...
- linux_网站计量单位
IP 独立IP数,是不同IP地址的计算机访问网站时被计算的总次数,独立IP数是衡量网站流量的一个重要指标,一般一天内相同IP地址的客户端访问网页只被计算为一次,记录独立IP的时间为一天或一个月,目前通 ...
- linkin大话数据结构--List
List:Collection子接口 List是有序的集合,集合中每个元素都有对应的顺序序列.List集合可使用重复元素,可以通过索引来访问指定位置的集合元素(顺序索引从0开始),List集合默认按元 ...
- Java Cookie和Session
*/ .hljs { display: block; overflow-x: auto; padding: 0.5em; color: #333; background: #f8f8f8; } .hl ...
- js调用系统虚拟键盘
<input type="text" id="tt" /> <script language="javascript" t ...
- ferror,clearerr和EOF含义
1.我们并不是实时操纵文件,也不是实时生效,它依赖于缓冲区.非缓冲模式编程与常规区别,就是实时与不实时的区别. 2.//fgetc fputc, fgets fputs, fgetwc fputwc, ...
- form表单中get和post两种提交方式的区别
一.form表单中get和post两种提交方式的区别? 1.get提交表单中的内容在链接处是可见的.post不可见 2.post相比于get是安全的 3.post不收限制大小,get有限制大小(黑马视 ...
- JavaBean,List,Map,json格式之间转化方式
public class TestBean { private String id; private String name; private String password; public Stri ...