ThinkChat🤖让你学习和工作更高效,注册即送10W Token,即刻开启你的AI之旅 广告
### MySqlStyle 例子 ```java public class MySqlStyle extends AbstractDBStyle { RangeSql rangeSql = null; public MySqlStyle() { rangeSql = new OffsetLimitRange(this); } @Override public String getName() { return "mysql"; } @Override public int getDBType() { return DBType.DB_MYSQL; } @Override public RangeSql getRangeSql() { return this.rangeSql; } @Override public int getIdType(Class c,String idProperty) { List<Annotation> ans = BeanKit.getAllAnnotation(c, idProperty); int idType = DBType.ID_AUTO; //默认是自增长 for (Annotation an : ans) { if (an instanceof AutoID) { idType = DBType.ID_AUTO; break;// 优先 } else if (an instanceof SeqID) { //my sql not support } else if (an instanceof AssignID) { idType = DBType.ID_ASSIGN; } } return idType; } ``` 对于传统的数据库,需要重写的方法较少,主要是 * getIdType ,选择id的主键类型,mysql既可以是是@AutoId,也可以是@AssingId,这取决于其主键属性上的注解,如果同时有@AutoId或者@AssingId,则优先使用AutoId * getName ,返回数据库名字,如mysql,sqlserver2010,sqlserver2015等 * getDBType ,返回任意一个数字类型,默认的都在DBType类里 * rangeSql,用来实现翻页的,输入是jdbc sql,或者是模板sql,输出是一个翻页语句,本例子实现类是OffsetLimitRange,定义如下 ```java public class OffsetLimitRange implements RangeSql { AbstractDBStyle sqlStyle = null; public OffsetLimitRange(AbstractDBStyle style){ this.sqlStyle = style; } @Override public String toRange(String jdbcSql, Object objOffset , Long limit) { Long offset = ((Number)objOffset).longValue(); offset = PageParamKit.mysqlOffset(sqlStyle.offsetStartZero, offset); StringBuilder builder = new StringBuilder(jdbcSql); builder.append(" limit ").append(offset).append(" , ").append(limit); return builder.toString(); } @Override public String toTemplateRange(Class mapping,String template) { return template + sqlStyle.getOrderBy() + " \nlimit " + sqlStyle.appendExpress( DBAutoGeneratedSql.OFFSET ) + " , " + sqlStyle.appendExpress(DBAutoGeneratedSql.PAGE_SIZE); } @Override public void addTemplateRangeParas(Map<String, Object> paras, Object objOffset, long size) { Long offset = (Long)objOffset; paras.put(DBAutoGeneratedSql.OFFSET, offset - (sqlStyle.offsetStartZero ? 0 : 1)); paras.put(DBAutoGeneratedSql.PAGE_SIZE, size); } } ``` * toRange,返回一个JDBC的翻页SQL,对于MySQL,H2等支持limit&offset的来说,非常简单,后面添加limit offsetXXX,limitXX即可 * toTemplateRange, 针对模板sql翻页语句,类似toRange方法,但使用的是俩个变量,变量名的定义是DBAutoGeneratedSql.OFFSET,DBAutoGeneratedSql.PAGE_SIZE * addTemplateRangeParas, 这个是同toTemplateRange匹配,提供了DBAutoGeneratedSql.OFFSET的值,以及DBAutoGeneratedSql.PAGE_SIZE的值