1. 程式人生 > >30-annotation-sql

30-annotation-sql

  
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();
        
    }
    
    
    
    
    
    
    
    
    
}