hibernate动态创建表

hibernate动态创建表,第1张

你这种设计有问题啊。每注册一个会员创建一个表,重新加载hbm,是不是还要刷新一次sessionFactory如果有人不停注册,那你的服务还跑不跑了?

你计算贡献值完全可以放在一个表中通过1对多或者HQL来过滤。

如果非要分表做,那就远离hbm,通过sessioncreateSQLQuery()调用本地sql语句对数据库直接进行 *** 作。

=================

理解错了,抱歉。这个可以结合你的数据库来看了。 我对pgsql比较熟, pgsql支持子表, 可以建立一个父表,然后每个月建立一个子表,查询的时候直接查询父表, pgsql会根据查询条件里的时间范围自动决定是在所有子表中查还是在特定子表中查。select from 父表是可以检索到所有值的,这个机制在物理上又实现了数据水平切分和可管理性。

所以如果支持父-子表机制的数据库里,可以通过数据库本身的特性来实现,hbm不需要改变,映射到父表即可。insert时候会自动写入子表。如果子表不存在则写入父表。

如果在不支持父-子机制的数据库里,查询通过createSQLQuery来做,Hibernate支持将未映射的查询结果Transform为特定的类型的对象。例如:

querysetResultTransformer(TransformersaliasToBean(MyObjectclass));

querylist();

insert通过时间字段计算出要写入的数据表,通过insert来执行写入。

总之,我给出的意见就是,支持子表特性的数据库HBM来实现,不支持子表特性或者想脱离数据库依赖那就用SQL来实现。

ClassforName("oraclejdbcdriverOracleDriver");

Connection conn=DriverManagergetConnection("数据库url","帐号","密码");

state=conncreateStatement();

stateexecuteUpdate("create 建表语句");

stateexecuteUpdate("insert 插入数据")------>插入的值由页面获得,注意字符串拼接。

然后就是关闭连接,stateclose();connclose();

核心代码就是这些,具体应用你可以多写几个方法(增删改查),都是类似的,注意异常的处理,关闭连接最好在finally中进行。

aravel提供了3种 *** 作数据库方式:DB facade(原始方式)、查询构造器和Eloquent ORM。下面我将逐一讲解。 数据库的配置文件在config目录下的databasePHP里。打开这个文件,找到MySQL的配置项。 这里有个env,它其实是调用了laravel根目录下的e

CREATE TABLE Sample(

name varchar(12),

field0 varchar(1),

field1 varchar(1),

fieldN varchar(1)

}

然后看实际运行时候的需要,动态分配字段给系统使用,也许需要一个这样的结构来描述分配情况:

public class Available

{

public int CurrentUnusedFieldNumber;

public Hashtable FieldToRealName;

}

也许某一时刻的数据状况是这样的: CurrentUnusedFieldNumber=3, 哈西表FieldToRealName包含内容是("field0"="SomeId", "field1"="AnyName", "field2=IsOk")

现在的问题是如果要配合Hibernate,如何来处理?以上段的数据使用状况为例子,如果我们的类定义是这样:

public class Entity01

{

public string Name;

public string SomeId;

public string AnyName;

public bool IsOk;

}

也许只需要修改一下xxxhbmxml,把 SomeId 和 field0 做成对应就ok了。但是在运行时我们怎么知道会有这样的类定义?除非我们做动态代码生成,自动编译也许可以,但是问题也许就到其他方面去了;如果我们不用动态定义,那么类就只能是这样:

public class Entity01

{

public string Name;

public Hashtable ExtraFieldAndValues;

}

使用的时候,用 entity01ExtraFieldAndValuessetValue("AnyName", "boss") 的方式来引用,也许这样是修改最少的了,但是问题是Hibernate不支持这样的方法。

JSP页面中嵌入动态图表的两种方法 :在JSP页面中插入Applet小程序 ;通过JavaBean动态生成图像。

JSP是一种广泛应用的网页设计技术 ,它是一种HTML和Java脚本混合的编程技术 ,它结合了HTML的静态特性和Java语言的动态能力 ,因此用它进行动态网页设计非常方便。在进行图像处理时 ,一般处理静态非常容易 ,但是 ,在实际应用中常常需要动态地在网页中生成二维的图形

基于JFreeChart开发的一个时序图的绘制。代码如下:

实例中createDataset()方法用于创建数据集合对象。时序图的数据集合与其他数据集合不同,它需要添加一个时间段内的所有数据,通常采用TimeSeries类进行添加。该实例中通过Math类的random()方法进行随机生成。

import javaawt;

import javaawteventActionEvent;

import

javaawteventActionListener;

import javaioBufferedInputStream;

import

javaioDataInputStream;

import javaioFileOutputStream;

import

javaioIOException;

import javanetURL;

import

javanetURLConnection;

import javatextDateFormat;

import

javatextParseException;

import javatextSimpleDateFormat;

import

javautilCalendar;

import javautilDate;

import javautilRandom;

import javaxswingJApplet;

import javaxswingTimer;

import orgjfreechart;

import

orgjfreechartannotationsCategoryTextAnnotation;

import

orgjfreechartaxisCategoryAnchor;

import

orgjfreechartaxisCategoryAxis;

import

orgjfreechartaxisCategoryLabelPositions;

import

orgjfreechartaxisDateAxis;

import

orgjfreechartaxisDateTickUnit;

import

orgjfreechartaxisDateTickUnitType;

import

orgjfreechartaxisValueAxis;

import

orgjfreechartlabelsStandardCategoryItemLabelGenerator;

import

orgjfreechartplotCategoryPlot;

import

orgjfreechartplotPlotOrientation;

import

orgjfreechartplotXYPlot;

import

orgjfreechartrenderercategoryBarRenderer;

import

orgjfreecharttitleTextTitle;

import

orgjfreedatacategoryCategoryDataset;

import

orgjfreedatacategoryIntervalCategoryDataset;

import orgjfreechartaxisNumberAxis;

import

orgjfreedatacategoryDefaultCategoryDataset;

import

orgjfreedataganttTask;

import orgjfreedataganttTaskSeries;

import

orgjfreedataganttTaskSeriesCollection;

import

orgjfreedatatimeDay;

import orgjfreedatatimeSecond;

import

orgjfreedatatimeTimeSeries;

import

orgjfreedatatimeTimeSeriesCollection;

import

orgjfreedataxyXYDataset;

public class shixutu extends JApplet {

//PLOT_FONT是一静态的字体常量对象,使用此对象可以避免反复用到的字体对象被多次创建

private static final Font PLOT_FONT = new Font("黑体", FontITALIC ,

18);

JFreeChart chart;

//创建数据动态更新的监听

class DataGenerator extends Timer

implements ActionListener {

private static final long serialVersionUID =

3977867288743720504L;

String

equID;

//设备ID号

int

totalTask;

//任务数

String[][]

strTask;

//任务情况

public void

actionPerformed(ActionEvent actionevent) {

addTotalObservation();

} DataGenerator()

{

super(1000,

null);

addActionListener(this);

Systemoutprintln("super");

}

}

//将更新的数据添加到chart中

private void addTotalObservation()

{

Systemoutprintln("addTotalObservation");

//设置新的数据集

chartgetXYPlot()setDataset(createDataset());

//通知Jfreechart

数据发生了改变,重新绘制柱状图

if

(chart != null)

{

chartfireChartChanged();

}

}

private static void

processChart(JFreeChart chart)

{

//设置标题字体

chartgetTitle()setFont(new Font("隶书", FontBOLD,

26));

//设置背景色

chartsetBackgroundPaint(new

Color(252,175,134));

XYPlot plot = chartgetXYPlot();

//获取图表的绘制属性

plotsetDomainGridlinesVisible(false);

//设置网格不显示

//获取时间轴对象

DateAxis dateAxis = (DateAxis)

plotgetDomainAxis();

dateAxissetLabelFont(PLOT_FONT);

//设置时间轴字体

//设置时间轴标尺值字体

dateAxissetTickLabelFont(new

Font("宋体",FontPLAIN,12));

dateAxissetLowerMargin(00);

//设置时间轴上显示的最小值

//获取数据轴对象

ValueAxis valueAxis =

plotgetRangeAxis();

valueAxissetLabelFont(PLOT_FONT);

//设置数据字体

DateFormat format = new SimpleDateFormat("mm分ss秒");

//创建日期格式对象

//创建DateTickUnit对象

DateTickUnit dtu = new

DateTickUnit(DateTickUnitTypeSECOND,30,format);

dateAxissetTickUnit(dtu);

//设置日期轴的日期标签 } //将结果输出在文件中

private static

void writeChartAsImage(JFreeChart chart)

{

FileOutputStream fos_jpg =

null;

try

{

fos_jpg = new

FileOutputStream("D:\\test\\shixutujpg");

ChartUtilitieswriteChartAsJPEG(fos_jpg, 1, chart, 400, 300,

null);

} catch (Exception e)

{

eprintStackTrace();

} finally

{

try

{

fos_jpgclose();

} catch (Exception e)

{

}

}

}

//创建数据集合对象

public static XYDataset createDataset()

{

//实例化TimeSeries对象

TimeSeries timeseries = new

TimeSeries("Data");

Second second = new Second();

//实例化Day

double d =

50D;

//添加一年365天的数据

for (int i = 0; i < 500; i++)

{

d = d + (Mathrandom() - 05) 10;

//创建随机数据

timeseriessecond(day, d);

//向数据集合中添加数据

second = (Second)

secondnext();

}

TimeSeriesCollection timeSeriesCollection =

new

TimeSeriesCollection(timeseries);

//返回数据集合对象

return timeSeriesCollection; } //Applet程序初始化

public void init()

{

// 1

得到数据

XYDataset dataset =

createDataset();

// 2

构造chart

chart =

ChartFactorycreateTimeSeriesChart(

"时序图示范", //

图表标题

"时间", //

目录轴的显示标签--横轴

"数值", //

数值轴的显示标签--纵轴

dataset, //

数据集

false,

false, //

是否生成工具

false //

是否生成URL链接

);

// 3

处理chart中文显示问题

processChart(chart);

// 4

chart输出

//writeChartAsImage(chart);

// 5 chart

以swing形式输出

//6使用applet输出

ChartPanel chartPanel = new

ChartPanel(chart);

chartPanelsetPreferredSize(new

javaawtDimension(800,500));

getContentPane()add(chartPanel); (new

DataGenerator())start();

}

public void

paint(Graphics g)

{

if

(chart != null)

{

chartdraw((Graphics2D) g,

getBounds());

}

}

public void destroy() {

}

}

以上就是关于hibernate动态创建表全部的内容,包括:hibernate动态创建表、怎样用java代码动态生成数据库表、怎样用laravel动态创建数据库表等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/9280364.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-26
下一篇 2023-04-26

发表评论

登录后才能评论

评论列表(0条)

保存