java.lang.Object
org.dellroad.stuff.schema.AbstractSchemaUpdate<T>
org.dellroad.stuff.spring.AbstractSpringSchemaUpdate<Connection>
org.dellroad.stuff.spring.SpringSQLSchemaUpdate
- All Implemented Interfaces:
org.dellroad.stuff.schema.SchemaUpdate<Connection>,Aware,BeanFactoryAware,BeanNameAware,InitializingBean
Spring-enabled SQL
SchemaUpdate.
The sqlCommandList property is required.
Instances can be created succintly in Spring using the <dellroad-stuff:sql-update> custom XML element,
which works just like <dellroad-stuff:sql> except that it wraps the resulting SQLCommandList
as a delegate inside an instance of this class.
For example:
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:dellroad-stuff="http://dellroad-stuff.googlecode.com/schema/dellroad-stuff"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://dellroad-stuff.googlecode.com/schema/dellroad-stuff
http://dellroad-stuff.googlecode.com/svn/wiki/schemas/dellroad-stuff-1.0.xsd">
<!-- Schema update to add the 'phone' column to the 'User' table -->
<dellroad-stuff:sql-update id="addPhone">ALTER TABLE User ADD phone VARCHAR(64)</dellroad-stuff:sql-update>
<!-- Schema update to run some complicated external SQL script -->
<dellroad-stuff:sql-update id="majorChanges" depends-on="addPhone" resource="classpath:majorChanges.sql"/>
<!-- more beans... -->
</beans>
A multi-statement SQL script is normally treated as a set of individual updates. For example:
<dellroad-stuff:sql-update id="renameColumn">
ALTER TABLE User ADD newName VARCHAR(64);
ALTER TABLE User SET newName = oldName;
ALTER TABLE User DROP oldName;
</dellroad-stuff:sql-update>
This will create three separate update beans named renameColumn-00001, renameColumn-00002, and
renameColumn-00003. You can disable this behavior by adding the attribute single-action="true",
in which case all three of the statements will be executed together in the same transaction and recorded under the name
renameColumn; this means that they must all complete successfully or you could end up with a partially
completed update.
Note that if the nested SQL script only contains one SQL statement, any single-action attribute is
ignored and the bean's given name (e.g., renameColumn) is always used as the name of the single update.
- See Also:
-
SQLCommandList
-
Field Summary
Fields inherited from class org.dellroad.stuff.spring.AbstractSpringSchemaUpdate
beanFactory, beanName -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionvoidConfigures the update name and required predecessors based on the Spring bean's name andBeanFactorydependencies.List<org.dellroad.stuff.schema.DatabaseAction<Connection>>org.dellroad.stuff.schema.SQLCommandListvoidsetSQLCommandList(org.dellroad.stuff.schema.SQLCommandList sqlCommandList) Configure theSQLCommandList.Methods inherited from class org.dellroad.stuff.spring.AbstractSpringSchemaUpdate
setBeanFactory, setBeanName, setRequiredPredecessorsFromDependenciesMethods inherited from class org.dellroad.stuff.schema.AbstractSchemaUpdate
getName, getRequiredPredecessors, isSingleAction, setName, setRequiredPredecessors, setSingleAction, toString
-
Constructor Details
-
SpringSQLSchemaUpdate
public SpringSQLSchemaUpdate()
-
-
Method Details
-
afterPropertiesSet
Description copied from class:AbstractSpringSchemaUpdateConfigures the update name and required predecessors based on the Spring bean's name andBeanFactorydependencies.- Specified by:
afterPropertiesSetin interfaceInitializingBean- Overrides:
afterPropertiesSetin classAbstractSpringSchemaUpdate<Connection>- Throws:
Exception
-
setSQLCommandList
public void setSQLCommandList(org.dellroad.stuff.schema.SQLCommandList sqlCommandList) Configure theSQLCommandList. This is a required property.- Parameters:
sqlCommandList- list of SQL statements that perform this update- See Also:
-
DatabaseAction
-
getSQLCommandList
public org.dellroad.stuff.schema.SQLCommandList getSQLCommandList() -
getDatabaseActions
-