maven 插件如何生成联合主键的entity,需要怎么配置generatedKey

maven 插件如何生成联合主键的entity,需要怎么配置generatedKey,第1张

装myeclipse吧,数据库视图里面有,直接用myeclipse连接数据库,找到表,右键,然后选hibernate reverse engineering就可以进自动生成映射的界面了。当然eclipse里你也可以找一下。

获取自动生成的键值,int id primary key auto_increment;

ClassforName("commysqljdbcDriver");

Connection conn = DriverManager

getConnection("jdbc:mysql://localhost/BBSuser=root&password=root"); //连接数据库

connsetAutoCommit(false); //不自动提交

String sql = "insert into article values (null,0,,,,now(),0)";

PreparedStatement pstat = connprepareStatement(sql,StatementRETURN_GENERATED_KEYS);

//创建一个默认 PreparedStatement 对象,该对象能获取自动生成的键,适合insert语句

//(该语句能自动生成键值)autoGeneratedKeys - 指示是否应该返回自动生成的键的标志

//它是 StatementRETURN_GENERATED_KEYS 或 StatementNO_GENERATED_KEYS 之一

Statement stat = conncreateStatement();

pstatsetInt(1, -1);

pstatsetString(2,title);

pstatsetString(3,content);

pstatexecuteUpdate();

ResultSet rsKey = pstatgetGeneratedKeys(); //ResultSet 指示键值

rsKeynext();

int key = rsKeygetInt(1); //得到第一个键值

rsKeyclose();

statexecuteUpdate("update article set rootid = " + key + " where id = " + key);

conncommit();

connsetAutoCommit(true); //设回自动提交

pstatclose();

connclose();

应用环境:表中有一个冗余字段,刚插入时要求该冗余字段的值和第一个字段的值相等,第一个字段是自动递增的,所以先向冗余字段插入一个-1(不知道为什么写-1,先这样记着),然后再Statement,update一下就可以了。

javaDB其实就是Derby,它并不是一个新的数据库产品,它是由IBM捐献给Apache的DB项目的一个纯Java数据库,JDK60里面带的这个Derby的版本是 10217,支持存储过程和触发器;有两种运行模式,一种是作为嵌入式数据库,另一种是作为网络数据库,前者的数据库服务器和客户端都在同一个 JVM里面运行,后者允许数据库服务器端和客户端不在同一个JVM里面,而且允许这两者在不同的物理机器上值得注意的是JDK6里面的这个Derby支持JDK6的新特性JDBC 40规范(JSR 221),现在我们如果要练习JDBC的用法,没有必要单独装一个数据库产品了,直接用Derby就行

1、本身没有 *** 作界面,可以用第三方工具来管理(也就是你说的 *** 作界面),Aqua Data Studio 具备管理功能的用于 Apache Derby 关系数据库的管理工具和数据库查询工具。直观管理功能让用户能够浏览和修改数据库结构,包括架构对象和数据库存储,以及维护数据库安全。集成查询工具让您能够迅速创建、编辑和执行 SQL 查询与脚本。Aqua Data Studio 进一步提供导入与导出工具,从而轻松地将数据移入和移出不同的数据格式及 Apache Derby 数据库。集成在这些工具内的是库浏览器 (Repository Browser),拥有 CVS 和 Subversion (SVN) 的完整来源控制客户端。

2、两者的区别,简单的说,就是javaDB是一个简化轻量级数据库,适合小型系统的小规模测试用,完全可以跑在内存里的数据库,它只有3M大小,而MySQL则是可以应用部署大型系统的数据库,功能更多更全,也更稳定,是用范围更广。

3、下面是个使用derby的简单例子:

首先导入JAR包:derbyjar,如果你装的是JDK6,在C:\Program Files\Sun\JavaDB\lib目录下就可以找到

然后就要创建数据库了:

代码

private Connection getConnection() throws SQLException {

Connection connection = DriverManager

getConnection("jdbc:derby:userDB;create=true;user=test;password=test");

connectionsetAutoCommit(false);

return connection;

}

其中userDB是要连接数据库的名字,create=true表示如果该数据库不存在,则创建该数据库,如果数据库存在,则用用户user=test;密码password=test连接数据库

有了数据库,接下来该建表了:

代码

private void createTable(Connection connection) throws SQLException {

Statement statement = connectioncreateStatement();

String sql = "create table USERS("

+ " ID BIGINT not null generated by default as identity,"

+ " USER_NAME VARCHAR(20) not null,"

+ " PASSWORD VARCHAR(20),"

+ " constraint P_KEY_1 primary key (ID))";

statementexecute(sql);

sql = "create unique index USER_NAME_INDEX on USERS ("

+ " USER_NAME ASC)";

statementexecute(sql);

statementclose();

}

创建了 USERS表,包括ID,USER_NAME,PASSWORD三个列,其中ID是主键,其中generated by default as identity 的作用类似sequence,identity是定义自动加一的列,

GENERATED BY ALWAYS AS IDENTITY

GENERATED BY DEFAULT AS IDENTITY

By always和by default是说明生成这个IDENTITY的方式。

By always是完全由系统自动生成。

by default是可以由用户来指定一个值。

编写与USERS表对应的javabean(这个就不多说了),:

代码

public class User implements Serializable {

/

/

private static final long serialVersionUID = 1L;

private Long id;

private String userName;

private String password;

public Long getId() {

return id;

}

public void setId(Long id) {

thisid = id;

}

public String getUserName() {

return userName;

}

public void setUserName(String userName) {

thisuserName = userName;

}

public String getPassword() {

return password;

}

public void setPassword(String password) {

thispassword = password;

}

}

接下来就可以就数据库进行增删改查的 *** 作了:

插入数据:

代码

private void create(User user) {

Connection connection = null;

try {

connection = thisgetConnection();

PreparedStatement statement = connection

prepareStatement("insert into users (user_name,password) values(,)");

int index = 1;

statementsetString(index++, usergetUserName());

statementsetString(index++, usergetPassword());

statementexecute();

usersetId(thisgetId(connection));

connectioncommit();

} catch (SQLException e) {

rollback(connection);

throw new RuntimeException(e);

} finally {

if (connection != null) {

close(connection);

}

}

}

代码

private Long getId(Connection connection) throws SQLException {

CallableStatement callableStatement = connection

prepareCall("values identity_val_local()");

ResultSet resultSet = callableStatementexecuteQuery();

resultSetnext();

Long id = resultSetgetLong(1);

resultSetclose();

callableStatementclose();

return id;

}

getId方法是获得系统默认的id值,是通过 identity_val_local()获得的,而函数IDENTITY_VAL_LOCAL()则可以在INSERT语句执行之后,为我们返回刚才系统为id所产生的值感觉还是有点想sequence的curr_val

修改数据:

代码

private void update(User user) {

Connection connection = null;

try {

connection = thisgetConnection();

PreparedStatement statement = connection

prepareStatement("update users set user_name=,password= where id=");

int index = 1;

statementsetString(index++, usergetUserName());

statementsetString(index++, usergetPassword());

statementsetLong(index++, usergetId());

statementexecute();

connectioncommit();

} catch (SQLException e) {

rollback(connection);

throw new RuntimeException(e);

} finally {

if (connection != null) {

close(connection);

}

}

}

删除数据:

代码

public void delete(Long id) {

Connection connection = null;

try {

connection = thisgetConnection();

PreparedStatement statement = connection

prepareStatement("delete from users where id=");

statementsetLong(1, id);

statementexecute();

connectioncommit();

} catch (SQLException e) {

rollback(connection);

throw new RuntimeException(e);

} finally {

if (connection != null) {

close(connection);

}

}

}

查询数据:

代码

public User findById(Long id) {

Connection connection = null;

try {

connection = thisgetConnection();

PreparedStatement statement = connection

prepareStatement("select user_name,password from users where id=");

statementsetLong(1, id);

ResultSet resultSet = statementexecuteQuery();

User user = null;

if (resultSetnext()) {

user = new User();

usersetId(id);

usersetUserName(resultSetgetString("user_name"));

usersetPassword(resultSetgetString("password"));

}

resultSetclose();

statementclose();

connectioncommit();

return user;

} catch (SQLException e) {

throw new RuntimeException(e);

} finally {

if (connection != null) {

close(connection);

}

}

}

你创建第一个gettogetherword对象时,会建一个表,再创建第二个的时候不管你的表删没删都不会再创建了,除非你删除数据库,那样才会建新表。可能是你删了表吧,第一次应该会建的。

你先删除数据库,然后debug跟踪一下看看有没有执行建表语句。

我有一个疑问就是你在哪里看到的数据库,是一个名字为note的文件吗?我这里有表在里面啊,如果看到数据库应该是有表的,如果建表语句有问题会报错的。我觉得你应该没有打开数据库,你在创建gettogetherword对象语句后紧跟一句SQLiteDatabase myDB=DBHelpergetWritableDatabase();试试。

赛迪网-IT技术报道Mysql数据库迁移Oracle数据库具体程:需要准备工具:1连接Mysql

jdbc

mysql-connector-java-504-binjar

2Oracle公司发SQL

Developer

12

面配置SQL

Developer

12

配置环境:选择Tools-Preferences

-Database-Third

Party

JDBC

Driver

点击

Add

Entry

添加Mysqljdbc

配置MySQLOracle连接

点击Connection

右键选择

New

Connection

别建立Mysql

Oracle连接

建立连接查看数据库

两种迁移数据式:1

Capture

the

source

database

or

tables

2

Convert

the

captured

database

or

tables

3

Generate

DDL

for

the

new

Oracle

schema

objects

4

Run

the

generated

DDL

script

to

create

the

new

user

and

objects

5

Copy

any

data

from

the

source

database

to

the

new

database,select

Migration->Migration

Data

select

a

converted

model

快速迁移:

选择要迁移表或数据库选择Migration

->

Quick

Migrate

(责任编辑:卢兆林)

如下,插入一条记录的时候可以这样返回id(一下代码只是说明事例)://保存一个test对象,并返回该对象 public Test save(Test test){ KeyHolder keyHolder = new GeneratedKeyHolder(); getJdbcTemplate()update(new PreparedStatementCreator() { @Override public PreparedStatement createPreparedStatement( Connection con) throws SQLException { PreparedStatement ps = conprepareStatement("insert into tb_test (name,sex) values (,)", StatementRETURN_GENERATED_KEYS); pssetString(1, testgetName()); pssetString(2, testgetSex()); return ps; } }, keyHolder); //这里可以获得数据库id testsetId(IntegervalueOf(keyHoldergetKeyList()get(0) toString())); return test; } // 批量插入, public List<Test> saveOrUpdateAll(final List<Test> list) { getJdbcTemplate()batchUpdate( "insert into tb_test (name,sex) values (,)", new BatchPreparedStatementSetter() { @Override public void setValues(PreparedStatement ps, int i) throws SQLException { pssetString(1, listget(i)getName()); pssetString(2, listget(i)getSex()); } @Override public int getBatchSize() { return listsize(); } }); //哪个方法可以获得list中每个test对象的id我不想重新进行查询 return list; } 问题补充:飞雪无情 写道你已经写好了插入一个对象的方法,就是public Test save(Test test),批量插入的时候可以直接使用该方法的。# public List<Test> saveOrUpdateAll(final List<Test> list) { List<Test> resultList=new ArrayList<Test>(); for(Test test:list){ resultListadd(save(test)); } return resultList; } 这样就好了。我也考虑过这样的方式,但是把:getJdbcTemplate()update(new PreparedStatementCreator() { @Override public PreparedStatement createPreparedStatement( Connection con) throws SQLException { PreparedStatement ps = conprepareStatement("insert into tb_test (name,sex) values (,)", StatementRETURN_GENERATED_KEYS); pssetString(1, testgetName()); pssetString(2, testgetSex()); return ps; } }, keyHolder); 这么一段代码放在循环里面,会不会性能有些影响吧?Spring既然提供了batchUpdate,该会不会在批处理上有些性能优势呢 问题补充:飞雪无情 写道spring这个批量插入有点限制,比如你这个特殊需要,我感觉它实现不了,所以你用我上面说的那个方法迂回实现。我感觉性能方面应该不会有太大的影响。你看spring的批量插入的时候这个BatchPreparedStatementSetter借口的方法setValues(PreparedStatement ps, int i) ,提供了一个索引i,它肯定也遍历了,要么怎么知道i的值。所以有特殊需求的时候就用上面那种方案,没有的时候推荐用spring提供了批量 *** 作,我们项目中就这么做的。看了Spring这两个方法的源码,觉得这个东西在封装的时候考虑的不是很周全,确实局限性太大了,比如我批量保存的时候有可能一部分是插入,一部分是更新,这个时候也只能按照你说的这种方式了,比较而言还是orm框架持久层用起来的方便。spring的这个两个方法看了源码感觉在设计上确实存在缺陷,灵活性不够,其实返回数据库执行的条数意义根本就不大//其实我想的是这样的一个方法 / @author BAOSJ @date 2010-7-2 @param sql @param values @param batchSize @return @throws Exception / public List<Object> saveOrUpdateAll(String sql, List<Object[]> values, Integer batchSize) throws Exception { ResultSet rs = null; PreparedStatement ps = null; Connection conn = null; // 返回执行对象的id List<Object> ids = new ArrayList<Object>(); try { conn = getConnection(); connsetAutoCommit(false); ps = connprepareStatement(sql, PreparedStatementRETURN_GENERATED_KEYS); for (int i = 0; i < valuessize(); i++) { Object[] objects = valuesget(i); for (int j = 0; j < objectslength; j++) { pssetObject(i + 1, objects[j]); } if (i % batchSize == 0 || valuessize() <= batchSize) { psexecuteBatch(); rs = psgetGeneratedKeys(); int c = 0; while (rsnext()) { idsadd(rsgetObject(c)); c++; } } } conncommit(); } catch (Exception e) { connrollback(); throw e; } finally { destroy(rs, ps, conn); } return ids; } //update源码 public int update(final PreparedStatementCreator psc, final KeyHolder generatedKeyHolder) throws DataAccessException { AssertnotNull(generatedKeyHolder, "KeyHolder must not be null"); loggerdebug("Executing SQL update and returning generated keys"); Integer result = (Integer) execute(psc, new PreparedStatementCallback() { public Object doInPreparedStatement(PreparedStatement ps) throws SQLException { int rows = psexecuteUpdate(); List generatedKeys = generatedKeyHoldergetKeyList(); generatedKeysclear(); ResultSet keys = psgetGeneratedKeys(); if (keys != null) { try { RowMapper rowMapper = getColumnMapRowMapper(); RowMapperResultSetExtractor rse = new RowMapperResultSetExtractor(rowMapper, 1); generatedKeysaddAll((List) rseextractData(keys)); } finally { JdbcUtilscloseResultSet(keys); } } if (loggerisDebugEnabled()) { loggerdebug("SQL update affected " + rows + " rows and returned " + generatedKeyssize() + " keys"); } return new Integer(rows); } }); return resultintValue(); } //batchUpdate源码 public int[] batchUpdate(String sql, final BatchPreparedStatementSetter pss) throws DataAccessException { if (loggerisDebugEnabled()) { loggerdebug("Executing SQL batch update [" + sql + "]"); } return (int[]) execute(sql, new PreparedStatementCallback() { public Object doInPreparedStatement(PreparedStatement ps) throws SQLException { try { int batchSize = pssgetBatchSize(); InterruptibleBatchPreparedStatementSetter ipss = (pss instanceof InterruptibleBatchPreparedStatementSetter (InterruptibleBatchPreparedStatementSetter) pss : null); if (JdbcUtilssupportsBatchUpdates(psgetConnection())) { for (int i = 0; i < batchSize; i++) { psssetValues(ps, i); if (ipss != null && ipssisBatchExhausted(i)) { break; } psaddBatch(); } return psexecuteBatch(); } else { List rowsAffected = new ArrayList(); for (int i = 0; i < batchSize; i++) { psssetValues(ps, i); if (ipss != null && ipssisBatchExhausted(i)) { break; } rowsAffectedadd(new Integer(psexecuteUpdate())); } int[] rowsAffectedArray = new int[rowsAffectedsize()]; for (int i = 0; i < rowsAffectedArraylength; i++) { rowsAffectedArray[i] = ((Integer) rowsAffectedget(i))intValue(); } return rowsAffectedArray; } } finally { if (pss instanceof ParameterDisposer) { ((ParameterDisposer) pss)cleanupParameters(); } } } }); }

问题一:怎么样查看数据库名称 select from v$instance;埂询当前数据库名称oralce

select instance_name from v$instance 针对数据库名查询

问题二:在mysql中怎么样查看所在的数据库名 使用show databases;就能列出你有权限 *** 作的数据库名,如果你只有一个数据库权限,那么列出来的就是你当前的数据库名。

问题三:新手:怎么使用查看自己所使用的数据库名称 查看一个SQL数据库的用户名步骤: 1、找到并打开Microsoft SQL server management studio 2、使用windows帐户或SQL帐户连接数据库 3、依次展开数据库――secunity――logins,即可看到SQL的所有用户。

问题四:怎么查看oracle数据库名字, :\oracle\product\1020\db_1\NETWORK\ADMIN\tnsnamesora

打开这个文件tnsnamesora,里面能看到

问题五:怎么查看Oracle数据库中的所有用户名 用数据字典

select from dba_users; 查看数据库里面所有用户,前提是你是有dba权限的帐号耽如sys,system

select from all_users; 查看你能管理的所有用户!

select from user_users; 查看当前用户信息 !

问题六:oracle 怎么查看当前数据库的名称 windows 中

1 select name from v$database ;

直接运行就可以查看了,

2查看tnsnamesora 的连接,有个SID,SID就是服务名了

1查看oracle的安装目录,方法是查看注册表:如:HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\ORACLE_HOME REG_SZ E:\ORACLE\ORA92 得到了oracle的安装目录一般来讲,如果服务器在安装时采用的是默认值那么这个值是:D:\ORACLE\ORA922找到tnsnamesora文件在根目录下面找到\network\ADMIN\tnsnamesora 文件,并打开3仔细查看里面的tnsnamesora 配置例如# TNSNAMESORA Network Configuration File: d:\oracle\ora92\network\admin\tnsnamesora# Generated by Oracle configuration toolsWZZ=(DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = wzz)(PORT = 1521)) ) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = WZZ) ))其中的service_name就是服务名,例如对如上面的文件 ,服务名就是WZZ附 C#获取oracle服务器名 :

#region 从注册表中读取安装主目录的值 / / 从注册表中读取安装主目录的值 / / / public static string ReadHomeDirectory(string setupKey) { RegistryKey readKey; try { readKey = RegistryLocalMachineOpenSubKey (Software\\ORACLE, false); foreach (string name in readKeyGetValueNames()) { if (name == setupKey) { return readKeyGet>>

问题七:怎么查看sql server 数据库的实例名 win键+R,输入servicesmsc,打开Windows服务列表,查找sql开头的服务,名称就包括了实例名。

问题八:oracle怎么查询数据库名称 [[email protected] ~]$ sqlplus / as sysdba

SQLPlus: Release 112040 Production on 星期五 2月 27 14:38:40 2015

Copyright (c) 1982, 2013, Oracle All rights reserved

连接到:

Oracle Database 11g Enterprise Edition Release 112040 - 64bit Production

With the Partitioning, Real Application Clusters, Automatic Storage Management, OLAP,

Data Mining and Real Application Testing options

SQL> show parameter db_name

NAME TYPE VALUE

------------------------------------ ----------- ------------------------------

db_name string prodsvr

SQL> select database_name from v$database;

DATABASE_NAME

--------------------------------------------------------------------------------

PRODSVR

SQL>

问题九:怎么查看mysql数据库的名字 使用show databases;就能列出你有权限 *** 作的数据库名,

如果你只有一个数据库权限,那么列出来的就是你当前的数据库名。

问题十:在mysql中怎么样查看所在的数据库名 可以使用这几种方式:

(1)用select database()语句;

select database();(2)用show tables语句,查询出来的结果中,第一行为Tables_in_,这里就

是当前所在的数据库名称。

show tables;(3)用status语句,查询出来的结果中有一行是currrent database:。这里就

是当前所在的数据库名称。

status;希望可以帮到你。

以上就是关于maven 插件如何生成联合主键的entity,需要怎么配置generatedKey全部的内容,包括:maven 插件如何生成联合主键的entity,需要怎么配置generatedKey、求Statement接口的RETURN_GENERATED_KEYS详解【JAVA】、javaDB数据库问题等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存