dao
public interface IStudentDao {
// 1. 注解的首字母是大写的。因为注解是Java中类层级的成员之一。类层级成员:类、接口、枚举,及注解。
// 2. 对于数组类型的属性赋值,使用{元素,元素,……}形式
// 3. 若数组类型属性只有一个元素值,那么,{}可以省略
// 4. 若一个注解只使用到了一个属性,且为value属性,那么这个属性名value可以省略
@Insert(value={"insert into student(name,age,score) values(#{name}, #{age}, #{score})"})
void insertStudent(Student student);
@Insert(value={"insert into student(name,age,score) values(#{name}, #{age}, #{score})"})
@SelectKey(statement="select last_insert_id()", keyProperty="id", before=false, resultType=int.class)
void insertStudentCatcheId(Student student);
@Delete("delete from student where id=#{xxx}")
void deleteById(int id);
@Update("update student set name=#{name}, age=#{age}, score=#{score} where id=#{id}")
void updateStudent(Student student);
@Select("select id,name,age,score from student where id=#{ooo}")
Student selectStudentById(int id);
}
provider
public class MySqlProvider {
public String getSelectSql() {
return "select id,name,age,score from student";
}
public String getSelectSql2() {
return "select id,name,age,score from student where id=#{ooo}";
}
public String getSelectSql3(Student student) {
StringBuffer sql = new StringBuffer();
sql.append("select id,name,age,score from student where 1=1");
if(student.getName() != null && !student.getName().equals("")) {
sql.append(" and name like '%' #{name} '%'");
}
if(student.getAge() > 0) {
sql.append(" and age > #{age}");
}
if(student.getScore() > 0) {
sql.append(" and score < #{score}");
}
return sql.toString();
}
public String getSelectSql4() {
return "select id,name,age,score from student where name like '%' #{ccname} '%' and age > #{ccage} and score < #{ccscore}";
}
public String getInsertSql() {
return "insert into student(name,age,score) values(#{name}, #{age}, #{score})";
}
public String getDeleteSql() {
return "delete from student where id=#{xxx}";
}
public String getUpdateSql() {
return "update student set name=#{name},age=#{age},score=#{score} where id=#{id}";
}
public String getUpdateSql2(Student student) {
StringBuffer sql = new StringBuffer();
sql.append("update student set id=#{id}");
if(student.getName() != null && !student.getName().equals("")) {
sql.append(",name=#{name}");
}
if(student.getAge() > 0) {
sql.append(",age=#{age}");
}
if(student.getScore() > 0) {
sql.append(",score=#{score}");
}
sql.append(" where id=#{id}");
return sql.toString();
}
public String getUpdateSql3(Student student) {
// new SQL(){} 表示创建一个SQL类的子类对象,只不过这个子类叫什么名称不知道,没有指定。
// 所以,这种写法是匿名内部类的写法。
return new SQL(){
// 下面的代码在何时会被执行?
// 当当前类(SQL类的子类)的无参构造器被调用时,会自动执行这段{}代码。
// 在类中的{}称为实例代码块
{
this.UPDATE("student");
this.SET("id=#{id}");
if(student.getName() != null && !student.getName().equals("")) {
this.SET("name=#{name}");
}
if(student.getAge() > 0) {
this.SET("age=#{age}");
}
if(student.getScore() > 0) {
this.SET("score=#{score}");
}
this.WHERE("id=#{id}");
}
}.toString();
}
}