30-annotation-sql
阿新 • • 發佈:2018-11-06
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(); } }