질문
이 섹션에서는 개발자가 Java 코드를 작성하는 것처럼 SQL 문을 작성하는 데 도움이 되는 YMP 프레임워크 v2 버전의 새로운 기능을 주로 소개합니다. 이는 기존 문자열 접합 모드를 어느 정도 대체하고 필드 상수와 함께 사용됩니다. 데이터 엔터티의 장점은 문자열 연결 중에 오류가 발생할 가능성을 줄이는 것입니다. Java 코드는 SQL 문이기 때문에 컴파일 중에 일부 특정 문제가 발견될 수 있습니다.
기본 매개변수 개체
Fields: 데이터 테이블 필드 이름 연결, 접두사, 별칭 등 지원에 사용되는 필드 이름 수집 개체
샘플 코드:
// 创建Fields对象 Fields _fields = Fields.create("username", "pwd", "age"); // 带前缀和别名 _fields.add("u", "sex", "s"); // 带前缀 _fields = Fields.create().add("u", "id").add(_fields); // 标记集合中的字段为排除的 _fields.excluded(true); // 判断是否存在排除标记 _fields.isExcluded(); // 输出 System.out.println(_fields.fields());
실행 결과 :
[u.id, username, pwd, age, u.sex s]
Params: 주로 SQL 문에서 ? 자리 표시자를 저장하고 바꾸는 데 사용되는 매개변수 컬렉션 개체
샘플 코드:
// 创建Params对象,任何类型参数 Params _params = Params.create("p1", 2, false, 0.1).add("param"); // _params = Params.create().add("paramN").add(_params); // 输出 System.out.println(_params.params());
실행 결과:
으르르르르르-
Pages: 페이징 매개변수 객체;
샘플 코드:
[paramN, p1, 2, false, 0.1, param]
Cond: SQL 조건을 생성하고 조건 매개변수를 저장하는 데 사용되는 조건 매개변수 객체:
다음을 생성합니다. SQL 조건: A (사용자 이름 like? And age & gt; =?) 또는 (sex =? Andu & lt;?)
실행 결과:// 查询每1页, 默认每页20条记录 Page.create(1); // 查询第1页, 每页10条记录 Page.create(1).pageSize(10); // 查询第1页, 每页10条记录, 不统计总记录数 Page.create(1).pageSize(10).count(false);
Cond _cond = Cond.create() .bracketBegin().like("username").param("%ymp%").and().gtEq("age").param(20).bracketEnd() .or() .bracketBegin().eq("sex").param("F").and().lt("age").param(18).bracketEnd(); System.out.println("SQL: " + _cond.toString()); System.out.println("参数: " + _cond.params().params());
EE샘플 코드:ORDERBY: SQL 조건에서 Order By 문을 생성하는 데 사용되는 정렬 개체SQL: ( username LIKE ? AND age >= ? ) OR ( sex = ? AND age < ? ) 参数: [%ymp%, 20, F, 18]
실행 결과:OrderBy _orderBy = OrderBy.create().asc("age").desc("u", "birthday"); // System.out.println(_orderBy.toSQL());
샘플 코드:GroupBy: 그룹화 개체, SQL 조건에서 그룹화 기준을 생성하는 데 사용됨ORDER BY age, u.birthday DESC
실행 결과:GroupBy _groupBy = GroupBy.create(Fields.create().add("u", "sex").add("dept")) .having(Cond.create().lt("age").param(18)); System.out.println("SQL: " + _groupBy.toString()); System.out.println("参数: " + _groupBy.having().params().params());
Where 문 개체, SQL 문에서 Where 절을 생성하는 데 사용됨;SQL: GROUP BY u.sex, dept HAVING age < ? 参数: [18]
실행 결과: (읽기의 편의를 위해 SQL의 출력 형식이 여기에 아름답게 표시되어 있습니다:P)
Cond _cond = Cond.create() .like("username").param("%ymp%") .and().gtEq("age").param(20); OrderBy _orderBy = OrderBy.create().asc("age").desc("u", "birthday"); GroupBy _groupBy = GroupBy.create(Fields.create().add("u", "sex").add("dept")); Where _where = Where.create(_cond).groupBy(_groupBy).orderDesc("username"); _where.orderBy().orderBy(_orderBy); // System.out.println("SQL: " + _where.toString()); System.out.println("参数: " + _where.getParams().params());
Join: SQL에서 Join 절을 생성하는 데 사용되는 연결 문 개체 문, 왼쪽, 오른쪽 및 내부 연결 지원
샘플 코드:SQL: WHERE username LIKE ? AND age >= ? GROUP BY u.sex, dept ORDER BY username DESC, age, u.birthday DESC 参数: [%ymp%, 20]
실행 결과:
Join _join = Join.inner("user_ext").alias("ue") .on(Cond.create().opt("ue", "uid", Cond.OPT.EQ, "u", "id")); System.out.println(_join);
Union: 여러 Select 쿼리 결과를 병합하는 데 사용되는 Union 문 개체; 샘플 코드:
INNER JOIN user_ext ue ON ue.uid = u.id
실행 결과: Select _select = Select.create("user").where(Where.create(Cond.create().eq("dept").param("IT"))) .union(Union.create( Select.create("user").where(Where.create(Cond.create().lt("age").param(18))))); // System.out.println("SQL: " + _select.toString()); System.out.println("参数: " + _select.getParams().params());
Select: 쿼리 문 개체
SQL: SELECT * FROM user WHERE dept = ? UNION SELECT * FROM user WHERE age < ? 参数: [IT, 18]
Ins ert: 문 개체 삽입
示例代码: Cond _cond = Cond.create() .like("u", "username").param("%ymp%") .and().gtEq("u", "age").param(20); // GroupBy _groupBy = GroupBy.create(Fields.create().add("u", "sex").add("u", "dept")); // Where _where = Where.create(_cond).groupBy(_groupBy).orderDesc("u", "username"); // Join _join = Join.inner("user_ext").alias("ue") .on(Cond.create().opt("ue", "uid", Cond.OPT.EQ, "u", "id")); // Select _select = Select.create(User.class, "u") .field("u", "username").field("ue", "money") .where(_where) .join(_join) .distinct(); // System.out.println("SQL: " + _select.toString()); System.out.println("参数: " + _select.getParams().params()); 执行结果:(为方便阅读,此处美化了SQL的输出格式:P) SQL: SELECT DISTINCT u.username, ue.money FROM USER u INNER JOIN user_ext ue ON ue.uid = u.id WHERE u.username LIKE ? AND u.age >= ? GROUP BY u.sex, u.dept ORDER BY u.username DESC 参数: [%ymp%, 20]
Update: 업데이트 문 개체
示例代码: Insert _insert = Insert.create(User.class) .field(User.FIELDS.ID).param("123456") .field(User.FIELDS.AGE).param(18) .field(User.FIELDS.USER_NAME).param("suninformation"); // System.out.println("SQL: " + _insert.toString()); System.out.println("参数: " + _insert.params().params()); 执行结果: SQL: INSERT INTO user (id, age, username) VALUES (?, ?, ?) 参数: [123456, 18, suninformation]
삭제: 명령문 객체 삭제
示例代码: Update _update = Update.create(User.class) .field(User.FIELDS.PWD).param("xxxx") .field(User.FIELDS.AGE).param(20) .where(Where.create( Cond.create().eq(User.FIELDS.ID).param("123456"))); // System.out.println("SQL: " + _update.toString()); System.out.println("参数: " + _update.getParams().params()); 执行结果: SQL: UPDATE user SET pwd = ?, age = ? WHERE id = ? 参数: [xxxx, 20, 123456]
SQL: 사용자 정의 SQL 문
#🎜 🎜 #ISession 세션 인터페이스 매개변수 캡슐화에도 사용됩니다. 🎜#BatchSQL: 일괄 SQL 문 개체
주로 일괄 작업의 ISession 세션 매개변수 캡슐화에 사용됩니다. #샘플 코드:
#🎜🎜 #示例代码: Delete _delete = Delete.create(User.class) .where(Where.create( Cond.create().eq(User.FIELDS.ID).param("123456"))); // System.out.println("SQL: " + _delete.toString()); System.out.println("参数: " + _delete.getParams().params()); 执行结果: SQL: DELETE FROM user WHERE id = ? 参数: [123456]
EntitySQL: 엔터티 매개변수 캡슐화 개체 #🎜🎜 #주로 ISession 세션의 매개변수 캡슐화에 사용됩니다.# 🎜🎜#
샘플 코드:// 自定义SQL语句 SQL _sql = SQL.create("select * from user where age > ? and username like ?").param(18).param("%ymp%"); // 执行 session.find(_sql, IResultSetHandler.ARRAY); // 或封装语句对象 SQL.create(_select); SQL.create(_insert); SQL.create(_update); SQL.create(_delete);