zoukankan      html  css  js  c++  java
  • 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();
            
        }
        
        
        
        
        
        
        
        
        
    }
  • 相关阅读:
    Time Zone 【模拟时区转换】(HDU暑假2018多校第一场)
    HDU 1281 棋盘游戏 【二分图最大匹配】
    Codeforces Round #527 (Div. 3) F. Tree with Maximum Cost 【DFS换根 || 树形dp】
    Codeforces Round #527 (Div. 3) D2. Great Vova Wall (Version 2) 【思维】
    Codeforces Round #527 (Div. 3) D1. Great Vova Wall (Version 1) 【思维】
    Codeforces Round #528 (Div. 2, based on Technocup 2019 Elimination Round 4) C. Connect Three 【模拟】
    Avito Cool Challenge 2018 E. Missing Numbers 【枚举】
    Avito Cool Challenge 2018 C. Colorful Bricks 【排列组合】
    005 如何分析问题框架
    004 如何定义和澄清问题
  • 原文地址:https://www.cnblogs.com/csslcww/p/9912410.html
Copyright © 2011-2022 走看看