diff --git a/jOOQ-codegen-maven-example/.classpath b/jOOQ-codegen-maven-example/.classpath
index 72f5ee4f7b..292ad614d8 100644
--- a/jOOQ-codegen-maven-example/.classpath
+++ b/jOOQ-codegen-maven-example/.classpath
@@ -5,6 +5,7 @@
+
diff --git a/jOOQ-codegen-maven-example/pom.xml b/jOOQ-codegen-maven-example/pom.xml
index c39bef60c5..7946e34dc5 100644
--- a/jOOQ-codegen-maven-example/pom.xml
+++ b/jOOQ-codegen-maven-example/pom.xml
@@ -45,9 +45,50 @@
Sander Plas
sander.plas@gmail.com
+
+ Sergey Epik
+ sergey.epik@gmail.com
+
+
+ org.springframework
+ spring-jdbc
+ 3.0.6.RELEASE
+ test
+
+
+ org.springframework
+ spring-beans
+ 3.0.6.RELEASE
+ test
+
+
+ org.springframework
+ spring-tx
+ 3.0.6.RELEASE
+ test
+
+
+ org.springframework
+ spring-test
+ 3.0.6.RELEASE
+ test
+
+
+ log4j
+ log4j
+ 1.2.16
+ test
+
+
+ cglib
+ cglib
+ 2.2.2
+ test
+
+
org.jooq
jooq
@@ -62,6 +103,14 @@
jar
test
+
+
+ org.hsqldb
+ hsqldb
+ 2.2.6
+ jar
+ test
+
postgresql
postgresql
@@ -108,6 +157,38 @@
jooq-codegen-maven
2.4.0-SNAPSHOT
+
+ exec0
+
+ generate
+
+
+
+ org.hsqldb.jdbcDriver
+ jdbc:hsqldb:hsql://localhost
+ sa
+
+
+
+ org.jooq.util.DefaultGenerator
+
+ org.jooq.util.hsqldb.HSQLDBDatabase
+ .*
+
+ PUBLIC
+
+
+ true
+ false
+
+
+ org.jooq.util.maven.example.hsqldb
+ target/generated-sources/jooq-hsqldb
+
+
+
+
+
exec1
@@ -284,6 +365,11 @@
+
+ org.hsqldb
+ hsqldb
+ 2.2.6
+
net.sourceforge.jtds
jtds
diff --git a/jOOQ-codegen-maven-example/src/test/java/org/jooq/test/util/spring/AuthorDao.java b/jOOQ-codegen-maven-example/src/test/java/org/jooq/test/util/spring/AuthorDao.java
new file mode 100644
index 0000000000..1bc52ae77c
--- /dev/null
+++ b/jOOQ-codegen-maven-example/src/test/java/org/jooq/test/util/spring/AuthorDao.java
@@ -0,0 +1,29 @@
+package org.jooq.test.util.spring;
+
+import java.util.List;
+
+import org.jooq.test.util.spring.domain.Author;
+
+public interface AuthorDao {
+
+ Integer add(Author author);
+
+ void addBatch(List authors);
+
+ void save(Author author);
+
+ void delete(Author author);
+
+ Author findById(Integer id);
+
+ List findAll();
+
+ long countAuthors();
+
+ long countDistinctForLastName(String name);
+
+ boolean authorExists(Integer id);
+
+ boolean authorExists(Author c);
+
+}
diff --git a/jOOQ-codegen-maven-example/src/test/java/org/jooq/test/util/spring/AuthorDaoImpl.java b/jOOQ-codegen-maven-example/src/test/java/org/jooq/test/util/spring/AuthorDaoImpl.java
new file mode 100644
index 0000000000..3cf08c7522
--- /dev/null
+++ b/jOOQ-codegen-maven-example/src/test/java/org/jooq/test/util/spring/AuthorDaoImpl.java
@@ -0,0 +1,104 @@
+package org.jooq.test.util.spring;
+
+import static org.jooq.impl.Factory.param;
+import static org.jooq.util.maven.example.hsqldb.Sequences.S_AUTHOR_ID;
+import static org.jooq.util.maven.example.hsqldb.Tables.T_AUTHOR;
+
+import java.util.List;
+
+import org.jooq.BatchBindStep;
+import org.jooq.FactoryOperations;
+import org.jooq.impl.Factory;
+import org.jooq.test.util.spring.domain.Author;
+import org.jooq.util.maven.example.hsqldb.tables.records.TAuthorRecord;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+import org.springframework.transaction.annotation.Transactional;
+
+@Transactional(readOnly = true)
+@Component
+public class AuthorDaoImpl implements AuthorDao {
+
+ private FactoryOperations factory;
+
+ @Autowired
+ public void setFactoryOperations(FactoryOperations factory) {
+ this.factory = factory;
+ }
+
+ @Override
+ public Author findById(Integer id) {
+ TAuthorRecord authorRecord = factory.selectFrom(T_AUTHOR)
+ .where(T_AUTHOR.ID.equal(id)).fetchOne();
+ return authorRecord == null ? null : authorRecord.into(Author.class);
+ }
+
+ @Override
+ public List findAll() {
+ return factory.selectFrom(T_AUTHOR).fetchInto(Author.class);
+ }
+
+ @Override
+ public Integer add(Author author) {
+ Integer id = factory.nextval(S_AUTHOR_ID);
+ factory.insertInto(T_AUTHOR)
+ .set(T_AUTHOR.ID, id)
+ .set(T_AUTHOR.FIRST_NAME, author.getFirstName())
+ .set(T_AUTHOR.LAST_NAME, author.getLastName())
+ .execute();
+ return id;
+ }
+
+ @Override
+ public void addBatch(List authors) {
+ BatchBindStep step = factory.batch(
+ factory.insertInto(T_AUTHOR, T_AUTHOR.ID, T_AUTHOR.FIRST_NAME, T_AUTHOR.LAST_NAME)
+ .values(param("id"), param("first"), param("last")));
+ for (Author author : authors) {
+ Integer id = factory.nextval(S_AUTHOR_ID).intValue();
+ step = step.bind(id, author.getFirstName(), author.getLastName());
+ }
+ step.execute();
+ }
+
+ @Override
+ public void save(Author author) {
+ factory.update(T_AUTHOR)
+ .set(T_AUTHOR.FIRST_NAME, author.getFirstName())
+ .set(T_AUTHOR.LAST_NAME, author.getLastName())
+ .where(T_AUTHOR.ID.equal(author.getId()))
+ .execute();
+ }
+
+ @Override
+ public void delete(Author author) {
+ factory.delete(T_AUTHOR)
+ .where(T_AUTHOR.ID.equal(author.getId()))
+ .execute();
+ }
+
+ @Override
+ public long countAuthors() {
+ return factory.selectCount().from(T_AUTHOR)
+ .fetchOne().getValue(0, Long.class);
+ }
+
+ @Override
+ public long countDistinctForLastName(String name) {
+ return factory.select(Factory.countDistinct(T_AUTHOR.LAST_NAME)).from(T_AUTHOR)
+ .where(T_AUTHOR.LAST_NAME.like(name + "%"))
+ .fetchOne().getValue(0, Long.class);
+ }
+
+ @Override
+ public boolean authorExists(Integer id) {
+ return factory.selectFrom(T_AUTHOR).where(T_AUTHOR.ID.equal(id)).fetchOne() != null;
+ }
+
+ @Override
+ public boolean authorExists(Author author) {
+ return factory.selectFrom(T_AUTHOR).where(T_AUTHOR.ID.equal(author.getId()))
+ .fetchOne() != null;
+ }
+}
diff --git a/jOOQ-codegen-maven-example/src/test/java/org/jooq/test/util/spring/AuthorDaoTest.java b/jOOQ-codegen-maven-example/src/test/java/org/jooq/test/util/spring/AuthorDaoTest.java
new file mode 100644
index 0000000000..de0ea1b9ce
--- /dev/null
+++ b/jOOQ-codegen-maven-example/src/test/java/org/jooq/test/util/spring/AuthorDaoTest.java
@@ -0,0 +1,134 @@
+package org.jooq.test.util.spring;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import junit.framework.Assert;
+
+import org.jooq.test.util.spring.domain.Author;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.test.context.ContextConfiguration;
+import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
+import org.springframework.transaction.annotation.Transactional;
+
+@ContextConfiguration(locations = "classpath:spring-context.xml")
+@RunWith(SpringJUnit4ClassRunner.class)
+public class AuthorDaoTest {
+
+ @Autowired
+ private AuthorDao authorDao;
+
+ @Test
+ public void testFindAll() {
+ List authors = authorDao.findAll();
+ Assert.assertEquals(2, authors.size());
+ }
+
+ @Test
+ public void testFindById() {
+ Author a = authorDao.findById(1);
+ Assert.assertEquals("George", a.getFirstName());
+ }
+
+ @Transactional
+ @Test
+ public void testAdd() {
+ Author a = new Author();
+ a.setFirstName("Lewis");
+ a.setLastName("Carroll");
+ authorDao.add(a);
+ List authors = authorDao.findAll();
+ Assert.assertEquals(3, authors.size());
+ }
+
+ @Transactional
+ @Test
+ public void testAddBatch() {
+ List authors = new ArrayList();
+ Author a1 = new Author();
+ a1.setFirstName("Lewis");
+ a1.setLastName("Carroll");
+ authors.add(a1);
+ Author a2 = new Author();
+ a2.setFirstName("Agatha");
+ a2.setLastName("Christie");
+ authors.add(a2);
+ Author a3 = new Author();
+ a3.setFirstName("Charles");
+ a3.setLastName("Dickens");
+ authors.add(a3);
+ Author a4 = new Author();
+ a4.setFirstName("Mark");
+ a4.setLastName("Twain");
+ authors.add(a4);
+ authorDao.addBatch(authors);
+ List results = authorDao.findAll();
+ Assert.assertEquals(6, results.size());
+ }
+
+ @Transactional
+ @Test
+ public void testSaveAuthor() {
+ Author author = authorDao.findById(1);
+ author.setFirstName("Arthur Conan");
+ author.setLastName("Doyle");
+ authorDao.save(author);
+ Author found = authorDao.findById(1);
+ Assert.assertEquals("Arthur Conan", found.getFirstName());
+ }
+
+ @Transactional
+ @Test
+ public void testDeleteAuthor() {
+ Author c = authorDao.findById(1);
+ authorDao.delete(c);
+ List authors = authorDao.findAll();
+ Assert.assertEquals(1, authors.size());
+ }
+
+ @Transactional
+ @Test
+ public void testCountAuthor() {
+ Author a = new Author();
+ a.setFirstName("Lewis");
+ a.setLastName("Carroll");
+ authorDao.add(a);
+ long count = authorDao.countAuthors();
+ List authors = authorDao.findAll();
+ for (Author author : authors) {
+ System.out.println(author.getFirstName());
+ }
+ Assert.assertEquals(3, count);
+ }
+
+ @Transactional
+ @Test
+ public void testCountDistinctAuthor() {
+ Author a1 = new Author();
+ a1.setFirstName("Calvin");
+ a1.setLastName("Coolidge");
+ authorDao.add(a1);
+ Author a2 = new Author();
+ a2.setFirstName("James Fenimore");
+ a2.setLastName("Cooper");
+ authorDao.add(a2);
+ long count = authorDao.countDistinctForLastName("Coo");
+ Assert.assertEquals(2, count);
+ }
+
+ @Test
+ public void testAuthorExists() {
+ Author c = authorDao.findById(1);
+ boolean exists = authorDao.authorExists(c);
+ Assert.assertTrue(exists);
+ }
+
+ @Test
+ public void testAuthorNotExists() {
+ boolean exists = authorDao.authorExists(1000);
+ Assert.assertFalse(exists);
+ }
+}
diff --git a/jOOQ-codegen-maven-example/src/test/java/org/jooq/test/util/spring/domain/Author.java b/jOOQ-codegen-maven-example/src/test/java/org/jooq/test/util/spring/domain/Author.java
new file mode 100644
index 0000000000..045becf11b
--- /dev/null
+++ b/jOOQ-codegen-maven-example/src/test/java/org/jooq/test/util/spring/domain/Author.java
@@ -0,0 +1,32 @@
+package org.jooq.test.util.spring.domain;
+
+public class Author {
+
+ private Integer id;
+ private String firstName;
+ private String lastName;
+
+ public Integer getId() {
+ return id;
+ }
+
+ public void setId(Integer id) {
+ this.id = id;
+ }
+
+ public String getFirstName() {
+ return firstName;
+ }
+
+ public void setFirstName(String firstName) {
+ this.firstName = firstName;
+ }
+
+ public String getLastName() {
+ return lastName;
+ }
+
+ public void setLastName(String lastName) {
+ this.lastName = lastName;
+ }
+}
diff --git a/jOOQ-codegen-maven-example/src/test/resources/db-init.sql b/jOOQ-codegen-maven-example/src/test/resources/db-init.sql
new file mode 100644
index 0000000000..13b8c87b6b
--- /dev/null
+++ b/jOOQ-codegen-maven-example/src/test/resources/db-init.sql
@@ -0,0 +1,15 @@
+CREATE TABLE t_author (
+ ID INT,
+ FIRST_NAME VARCHAR(50),
+ LAST_NAME VARCHAR(50) NOT NULL,
+ DATE_OF_BIRTH DATE,
+ YEAR_OF_BIRTH INT,
+ ADDRESS VARCHAR(50),
+
+ CONSTRAINT pk_t_author PRIMARY KEY (ID)
+);
+
+CREATE SEQUENCE s_author_id START WITH 1;
+
+INSERT INTO t_author (ID, FIRST_NAME, LAST_NAME) VALUES (next value for s_author_id, 'George', 'Orwell');
+INSERT INTO t_author (ID, FIRST_NAME, LAST_NAME) VALUES (next value for s_author_id, 'Paulo', 'Coelho');
diff --git a/jOOQ-codegen-maven-example/src/test/resources/log4j.xml b/jOOQ-codegen-maven-example/src/test/resources/log4j.xml
new file mode 100644
index 0000000000..d3da00c0e7
--- /dev/null
+++ b/jOOQ-codegen-maven-example/src/test/resources/log4j.xml
@@ -0,0 +1,41 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/jOOQ-codegen-maven-example/src/test/resources/spring-context.xml b/jOOQ-codegen-maven-example/src/test/resources/spring-context.xml
new file mode 100644
index 0000000000..cbb480e17d
--- /dev/null
+++ b/jOOQ-codegen-maven-example/src/test/resources/spring-context.xml
@@ -0,0 +1,35 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ HSQLDB
+
+
+
+
+
+