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 + + + + + +