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();
        
    }
    
    
    
    
    
    
    
    
    
}
原文地址:https://www.cnblogs.com/csslcww/p/9912410.html