package jef.orm.onetable;
import java.sql.SQLException;
import java.util.Date;
import java.util.List;
import jef.codegen.EntityEnhancer;
import jef.common.log.LogUtil;
import jef.database.DbClient;
import jef.database.QB;
import jef.database.query.Query;
import jef.database.test.DataSource;
import jef.database.test.DataSourceContext;
import jef.database.test.DatabaseInit;
import jef.database.test.JefJUnit4DatabaseTestRunner;
import jef.orm.onetable.model.Foo;
import org.junit.BeforeClass;
import org.junit.Test;
import org.junit.runner.RunWith;
/**
* 自定义表名测试
* @author jiyi
*
*/
@RunWith(JefJUnit4DatabaseTestRunner.class)
@DataSourceContext({
@DataSource(name="oracle",url="${oracle.url}",user="${oracle.user}",password="${oracle.password}"),
@DataSource(name = "mysql", url = "${mysql.url}", user = "${mysql.user}", password = "${mysql.password}"),
@DataSource(name="postgresql",url="${postgresql.url}",user="${postgresql.user}",password="${postgresql.password}"),
@DataSource(name = "hsqldb", url = "jdbc:hsqldb:mem:testhsqldb", user = "sa", password = ""),
@DataSource(name="derby",url="jdbc:derby:./db;create=true"),
@DataSource(name = "sqlite", url = "jdbc:sqlite:test.db?date_string_format=yyyy-MM-dd HH:mm:ss"),
@DataSource(name = "sqlserver", url = "${sqlserver.url}",user="${sqlserver.user}",password="${sqlserver.password}")
})
public class CustomTableNameTest extends org.junit.Assert {
private static final String MY_FOO_TABLE="MY_FOO_TABLE";
private DbClient db;
/**
* Use CustomTable name, not the defaultname in table model.
* @throws SQLException
*/
@DatabaseInit
public void start() throws SQLException {
try{
db.dropTable(Foo.class);
db.createTable(Foo.class);
db.dropTable(MY_FOO_TABLE);
db.createTable(Foo.class, MY_FOO_TABLE,null);
} catch (Exception e) {
LogUtil.exception(e);
}
}
@Test
public void testPlayWithMyTable() throws SQLException {
int id;
{//insert
Foo foo = new Foo();
foo.setName("My play!");
foo.setModified(new Date());
db.insert(foo, MY_FOO_TABLE);
id=foo.getId();
}
{//select & update
Query<Foo> query=QB.create(Foo.class);
query.addCondition(QB.eq(Foo.Field.id, id));
query.setCustomTableName(MY_FOO_TABLE);
List<Foo> foos=db.select(query,null);
Foo foo=foos.get(0);
foo.setName("Play of update!");
db.update(foo,MY_FOO_TABLE);
}
{//delete
Foo foo=new Foo();
foo.setId(id);
foo.getQuery().setCustomTableName(MY_FOO_TABLE);
db.delete(foo);
}
}
}