package org.easyframe.tutorial.lesson3;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import jef.codegen.EntityEnhancer;
import jef.database.Condition.Operator;
import jef.database.DbClient;
import jef.database.DbClientBuilder;
import jef.database.ORMConfig;
import jef.database.QB;
import jef.database.query.SqlExpression;
import jef.tools.DateUtils;
import jef.tools.string.RandomData;
import org.easyframe.tutorial.lesson2.entity.Student;
import org.easyframe.tutorial.lesson2.entity.UserBalance;
import org.junit.Test;
public class CaseDelete {
DbClient db;
public CaseDelete() throws SQLException {
db = new DbClientBuilder().setEnhancePackages("org.easyframe.tutorial").build();
// 准备数据时关闭调试,减少控制台信息
ORMConfig.getInstance().setDebugMode(false);
db.dropTable(Student.class, UserBalance.class);
db.createTable(Student.class, UserBalance.class);
prepareData(15);
ORMConfig.getInstance().setDebugMode(true);
}
private void prepareData(int num) throws SQLException {
List<Student> data = new ArrayList<Student>();
Date old = new Date(System.currentTimeMillis() - 864000000000L);
for (int i = 0; i < num; i++) {
// 用随机数生成一些学生信息
Student st = new Student();
st.setGender(i % 2 == 0 ? "M" : "F");
st.setName(RandomData.randomChineseName());
st.setDateOfBirth(RandomData.randomDate(old, new Date()));
st.setGrade(String.valueOf(RandomData.randomInteger(1, 6)));
data.add(st);
}
db.batchInsert(data);
}
@Test
public void testDelete_Basic() throws SQLException {
{// Case1. 删除从数据库加载出来的对象
Student st = db.load(Student.class, 1);
db.delete(st);
//SQL: delete from USERBALANCE where AMOUT between -100 and 0
}
{ // Case2. 删除所有女生
Student st = new Student();
st.setGender("F");
db.delete(st);
//SQL: delete from USERBALANCE where TODAYAMOUNT=TOTALAMOUNT
}
{//Case3. 删除所有1980年以前出生的学生
Student st = new Student();
st.getQuery().addCondition(Student.Field.dateOfBirth,Operator.LESS,DateUtils.getDate(1980, 1, 1));
db.delete(st);
//SQL: delete from USERBALANCE where todayAmount + 100< totalAmount
}
}
@Test
public void testDelete_Basic2() throws SQLException {
{// Case1. Between条件,删除账户余额amout在-100到0之间的所有记录。
UserBalance ub=new UserBalance();
ub.getQuery().addCondition(QB.between(UserBalance.Field.amout, -100, 0));
db.delete(ub);
}
{ // Case2. 两个字段比较,删除todayAmount和 totalAmout相等的记录
UserBalance ub=new UserBalance();
ub.getQuery().addCondition(UserBalance.Field.todayAmount, UserBalance.Field.totalAmount);
db.delete(ub);
}
{//Case3. 删除按表达式条件删除
UserBalance ub=new UserBalance();
ub.getQuery().addCondition(new SqlExpression("todayAmount + 100< totalAmount"));
db.delete(ub);
}
}
}