提交 7281a5b7 编写于 作者: M MaxKey

Highgo

上级 fe7bc164
......@@ -34,9 +34,9 @@ public class AllStatementHandlerInterceptor extends
public Object intercept(Invocation invocation) throws Throwable {
Method m = invocation.getMethod();
if ("prepare".equals(m.getName())) { // һ���������Statement
if ("prepare".equals(m.getName())) { // prepare Statement
return prepare(invocation);
} else if ("parameterize".equals(m.getName())) { // һ���������ò���
} else if ("parameterize".equals(m.getName())) { // parameterize
return parameterize(invocation);
} else if ("handleResultSets".equals(m.getName())) {// handleResultSets
return handleResultSets(invocation);
......@@ -54,14 +54,15 @@ public class AllStatementHandlerInterceptor extends
private Object prepare(Invocation invocation) throws Throwable {
StatementHandler statement = getStatementHandler(invocation);
if (statement instanceof SimpleStatementHandler || statement instanceof PreparedStatementHandler) {
if (statement instanceof SimpleStatementHandler
|| statement instanceof PreparedStatementHandler) {
MetaObject metaObject=SystemMetaObject.forObject(statement);
Object parameterObject=metaObject.getValue("parameterHandler.parameterObject");
BoundSql boundSql = statement.getBoundSql();
String sql = boundSql.getSql();
_logger.debug("prepare boundSql : "+sql);
_logger.debug("startsWith SELECT : "+sql.toUpperCase().trim().startsWith("SELECT"));
if (sql.toUpperCase().trim().startsWith("SELECT") && (parameterObject instanceof JpaBaseDomain)) {
_logger.debug("startsWith select : "+sql.toLowerCase().trim().startsWith("select"));
if (sql.toLowerCase().trim().startsWith("select") && (parameterObject instanceof JpaBaseDomain)) {
if(statement instanceof SimpleStatementHandler){
sql = dialect.getLimitString(sql, (JpaBaseDomain)parameterObject);
}else if(statement instanceof PreparedStatementHandler){
......@@ -84,9 +85,12 @@ public class AllStatementHandlerInterceptor extends
Object parameterObject=metaObject.getValue("parameterHandler.parameterObject");
BoundSql boundSql = statementHandler.getBoundSql();
if (boundSql.getSql().toUpperCase().trim().startsWith("SELECT") && (parameterObject instanceof JpaBaseDomain)) {
if (
boundSql.getSql().toLowerCase().trim().startsWith("select")
&& (parameterObject instanceof JpaBaseDomain)
) {
List<ParameterMapping> pms= boundSql.getParameterMappings();
System.out.println(pms);
_logger.debug("ParameterMapping " + pms);
int parameterSize = pms.size();
dialect.setLimitParamters(ps, parameterSize,(JpaBaseDomain)parameterObject);
}
......
......@@ -42,21 +42,26 @@ public class StatementHandlerInterceptor extends AbstractStatementHandlerInterce
private Object prepare(Invocation invocation) throws Throwable {
StatementHandler statement = getStatementHandler(invocation);
if (statement instanceof SimpleStatementHandler || statement instanceof PreparedStatementHandler) {
if (statement instanceof SimpleStatementHandler
|| statement instanceof PreparedStatementHandler) {
MetaObject metaObject=SystemMetaObject.forObject(statement);
Object parameterObject=metaObject.getValue("parameterHandler.parameterObject");
BoundSql boundSql = statement.getBoundSql();
String sql = boundSql.getSql();
_logger.trace("parameter object ==> "+parameterObject);
if ((parameterObject instanceof JpaPagination)
&& (sql.toUpperCase().trim().startsWith("SELECT")) ) {
&& (sql.toLowerCase().trim().startsWith("select")) ) {
_logger.trace("dialect " + dialect);
JpaPagination pagination=(JpaPagination)parameterObject;
if(pagination.isPageable()){
_logger.trace("prepare boundSql ==> "+removeBreakingWhitespace(sql));
if(statement instanceof SimpleStatementHandler){
sql = dialect.getLimitString(sql, pagination);
}else if(statement instanceof PreparedStatementHandler){
JpaBaseService.pageResultsBoundSqlCache.put(pagination.getPageResultSelectUUID(), new PageResultsSqlCache(sql,boundSql));
JpaBaseService.pageResultsBoundSqlCache.put(
pagination.getPageResultSelectUUID(),
new PageResultsSqlCache(sql,boundSql)
);
sql = dialect.getLimitString(sql, pagination);
}
_logger.trace("prepare dialect boundSql : "+removeBreakingWhitespace(sql));
......
......@@ -41,11 +41,11 @@ public class DB2Dialect extends Dialect {
public String getPreparedStatementLimitString(String sql, JpaPagination pagination) {
//LIMIT #{pageResults} OFFSET #{startRow}
if(pagination.getPageSize()>0&&pagination.getStartRow()>0){
return sql + " LIMIT ? , ?";
return sql + " limit ? , ?";
}else if(pagination.getPageSize()>0){
return sql + " LIMIT ? ";
return sql + " limit ? ";
}else{
return sql + " LIMIT ?";
return sql + " limit ?";
}
}
......
......@@ -41,11 +41,11 @@ public class DerbyDialect extends Dialect {
public String getPreparedStatementLimitString(String sql, JpaPagination pagination) {
//LIMIT #{pageResults} OFFSET #{startRow}
if(pagination.getPageSize()>0&&pagination.getStartRow()>0){
return sql + " LIMIT ? , ?";
return sql + " limit ? , ?";
}else if(pagination.getPageSize()>0){
return sql + " LIMIT ? ";
return sql + " limit ? ";
}else{
return sql + " LIMIT ?";
return sql + " limit ?";
}
}
......
......@@ -21,7 +21,7 @@ public abstract class Dialect {
private static final Logger _logger = LoggerFactory.getLogger(Dialect.class);
public static final String DEFAULT_BATCH_SIZE = "15";
public static final String DEFAULT_BATCH_SIZE = "20";
public static final String NO_BATCH = "0";
public static final String DEFAULT_DIALECT = "mysql";
......@@ -35,8 +35,10 @@ public abstract class Dialect {
dialectMap.put("mysql", "org.apache.mybatis.jpa.dialect.MySQLDialect");
dialectMap.put("oracle", "org.apache.mybatis.jpa.dialect.OracleDialect");
dialectMap.put("postgresql", "org.apache.mybatis.jpa.dialect.PostgreSQLDialect");
dialectMap.put("highgo", "org.apache.mybatis.jpa.dialect.HighgoDialect");
dialectMap.put("sqlserver", "org.apache.mybatis.jpa.dialect.SQLServerDialect");
_logger.trace("Dialect Mapper : \n"+dialectMap);
}
......
package org.apache.mybatis.jpa.dialect;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import org.apache.mybatis.jpa.persistence.JpaPagination;
public class HighgoDialectDialect extends Dialect {
public HighgoDialectDialect() {
super();
}
@Override
public boolean supportsLimit() {
return true;
}
@Override
public String getLimitString(String sql, JpaPagination pagination) {
//LIMIT #{pageResults} OFFSET #{startRow}
if(pagination.getPageSize()>0&&pagination.getStartRow()>0){
return sql + " limit " + pagination.getPageSize()+" offset "+pagination.getStartRow() ;
}else if(pagination.getPageSize()>0){
return sql + " limit " + pagination.getPageSize();
}else{
return sql + " limit 1000";
}
}
@Override
public String getPreparedStatementLimitString(String sql, JpaPagination pagination) {
//LIMIT #{pageResults} OFFSET #{startRow}
if(pagination.getPageSize()>0&&pagination.getStartRow()>0){
return sql + " limit ? , ?";
}else if(pagination.getPageSize()>0){
return sql + " limit ? ";
}else{
return sql + " limit ?";
}
}
public void setLimitParamters(PreparedStatement preparedStatement,int parameterSize,JpaPagination pagination) {
try {
if(pagination.getPageSize()>0&&pagination.getStartRow()>0){
preparedStatement.setInt(++parameterSize, pagination.getPageSize());
preparedStatement.setInt(++parameterSize, pagination.getPageSize());
}else if(pagination.getPageSize()>0){
preparedStatement.setInt(++parameterSize, pagination.getPageSize());
}else{
preparedStatement.setInt(++parameterSize, 1000);
}
} catch (SQLException e) {
e.printStackTrace();
}
}
/* (non-Javadoc)
* @see java.lang.Object#toString()
*/
@Override
public String toString() {
return "PostgreSQLDialect [" + HighgoDialectDialect.class + "]";
}
}
......@@ -29,11 +29,11 @@ public class MySQLDialect extends Dialect {
//LIMIT #{pageResults} OFFSET #{startRow}
pagination.calculate();
if(pagination.getPageSize()>0&&pagination.getStartRow()>0){
return sql + " LIMIT "+pagination.getStartRow()+" , " +pagination.getPageSize();
return sql + " limit "+pagination.getStartRow()+" , " +pagination.getPageSize();
}else if(pagination.getPageSize()>0){
return sql + " LIMIT "+pagination.getPageSize();
return sql + " limit "+pagination.getPageSize();
}else{
return sql + " LIMIT "+pagination.getPageSize();
return sql + " limit "+pagination.getPageSize();
}
}
......@@ -41,11 +41,11 @@ public class MySQLDialect extends Dialect {
public String getPreparedStatementLimitString(String sql, JpaPagination pagination) {
//LIMIT #{pageResults} OFFSET #{startRow}
if(pagination.getPageSize()>0&&pagination.getStartRow()>0){
return sql + " LIMIT ? , ?";
return sql + " limit ? , ?";
}else if(pagination.getPageSize()>0){
return sql + " LIMIT ? ";
return sql + " limit ? ";
}else{
return sql + " LIMIT ?";
return sql + " limit ?";
}
}
......
......@@ -41,11 +41,11 @@ public class OracleDialect extends Dialect {
public String getPreparedStatementLimitString(String sql, JpaPagination pagination) {
//LIMIT #{pageResults} OFFSET #{startRow}
if(pagination.getPageSize()>0&&pagination.getStartRow()>0){
return sql + " LIMIT ? , ?";
return sql + " limit ? , ?";
}else if(pagination.getPageSize()>0){
return sql + " LIMIT ? ";
return sql + " limit ? ";
}else{
return sql + " LIMIT ?";
return sql + " limit ?";
}
}
......
......@@ -22,11 +22,11 @@ public class PostgreSQLDialect extends Dialect {
public String getLimitString(String sql, JpaPagination pagination) {
//LIMIT #{pageResults} OFFSET #{startRow}
if(pagination.getPageSize()>0&&pagination.getStartRow()>0){
return sql + " LIMIT " + pagination.getPageSize()+" , "+pagination.getStartRow() ;
return sql + " limit " + pagination.getPageSize()+" offset "+pagination.getStartRow() ;
}else if(pagination.getPageSize()>0){
return sql + " LIMIT " + pagination.getPageSize();
return sql + " limit " + pagination.getPageSize();
}else{
return sql + " LIMIT 1000";
return sql + " limit 1000";
}
}
......@@ -34,11 +34,11 @@ public class PostgreSQLDialect extends Dialect {
public String getPreparedStatementLimitString(String sql, JpaPagination pagination) {
//LIMIT #{pageResults} OFFSET #{startRow}
if(pagination.getPageSize()>0&&pagination.getStartRow()>0){
return sql + " LIMIT ? , ?";
return sql + " limit ? offset ?";
}else if(pagination.getPageSize()>0){
return sql + " LIMIT ? ";
return sql + " limit ? ";
}else{
return sql + " LIMIT ?";
return sql + " limit ?";
}
}
......
......@@ -25,11 +25,11 @@ public class SQLServerDialect extends Dialect {
StringBuilder pagingSelectSql = new StringBuilder( "" );
if(pagination.getPageSize()>0){
pagingSelectSql.append("SELECT TOP "+pagination.getPageSize()+" * FROM ( ");
pagingSelectSql.append("SELECT ROW_NUMBER() OVER() AS ROWNUMBER,MYBATIS_QUERY_TEMP_TABLE.* FROM ( ");
pagingSelectSql.append("MYBATIS_QUERY_TEMP_TABLE ) MYBATIS_QUERY_TEMP_PAGE ");
pagingSelectSql.append("select top "+pagination.getPageSize()+" * from ( ");
pagingSelectSql.append("select row_number() over() as rownumber,mybatis_query_temp_table.* from ( ");
pagingSelectSql.append("mybatis_query_temp_table ) mybatis_query_temp_page ");
if(pagination.getStartRow()>0){
pagingSelectSql.append("WHERE ROWNUMBER > "+pagination.getStartRow());
pagingSelectSql.append("where rownumber > "+pagination.getStartRow());
}
}else{
return sql;
......@@ -41,11 +41,11 @@ public class SQLServerDialect extends Dialect {
public String getPreparedStatementLimitString(String sql, JpaPagination pagination) {
//LIMIT #{pageResults} OFFSET #{startRow}
if(pagination.getPageSize()>0&&pagination.getStartRow()>0){
return sql + " LIMIT ? , ?";
return sql + " limit ? , ?";
}else if(pagination.getPageSize()>0){
return sql + " LIMIT ? ";
return sql + " limit ? ";
}else{
return sql + " LIMIT ?";
return sql + " limit ?";
}
}
......
......@@ -69,8 +69,19 @@ public class FieldColumnMapper {
@Override
public String toString() {
return "FieldColumnMapper [fieldName=" + fieldName + ", fieldType=" + fieldType + ", columnName=" + columnName
+ ", idColumn=" + idColumn + ", generatedValue=" + generatedValue + "]";
StringBuilder builder = new StringBuilder();
builder.append("FieldColumnMapper [fieldName=");
builder.append(fieldName);
builder.append(", fieldType=");
builder.append(fieldType);
builder.append(", columnName=");
builder.append(columnName);
builder.append(", idColumn=");
builder.append(idColumn);
builder.append(", generatedValue=");
builder.append(generatedValue);
builder.append("]");
return builder.toString();
}
}
......@@ -183,14 +183,23 @@ public class JpaPageResults <T>{
public void setRows(List<T> rows) {
this.rows = rows;
}
/* (non-Javadoc)
* @see java.lang.Object#toString()
*/
@Override
public String toString() {
return "Grid [page=" + page + ", total=" + total
+ ", totalPage=" + totalPage + ", records=" + records
+ ", rows=" + rows + "]";
StringBuilder builder = new StringBuilder();
builder.append("JpaPageResults [_logger=");
builder.append(_logger);
builder.append(", page=");
builder.append(page);
builder.append(", total=");
builder.append(total);
builder.append(", totalPage=");
builder.append(totalPage);
builder.append(", records=");
builder.append(records);
builder.append(", rows=");
builder.append(rows);
builder.append("]");
return builder.toString();
}
......
......@@ -202,16 +202,33 @@ public class JpaPagination {
return pageResultSelectUUID;
}
/* (non-Javadoc)
* @see java.lang.Object#toString()
*/
@Override
public String toString() {
return "Pagination [rows=" + rows + ", pageResults=" + pageSize
+ ", page=" + pageNumber + ", startRow=" + startRow + ", endRow="
+ endRow + ", sidx=" + sidx + ", sord=" + sortOrder + ", sortKey="
+ sortKey + ", orderBy=" + orderBy + ", pageable=" + pageable
+ "]";
StringBuilder builder = new StringBuilder();
builder.append("JpaPagination [rows=");
builder.append(rows);
builder.append(", pageSize=");
builder.append(pageSize);
builder.append(", pageNumber=");
builder.append(pageNumber);
builder.append(", startRow=");
builder.append(startRow);
builder.append(", endRow=");
builder.append(endRow);
builder.append(", sidx=");
builder.append(sidx);
builder.append(", sortOrder=");
builder.append(sortOrder);
builder.append(", sortKey=");
builder.append(sortKey);
builder.append(", orderBy=");
builder.append(orderBy);
builder.append(", pageable=");
builder.append(pageable);
builder.append(", pageResultSelectUUID=");
builder.append(pageResultSelectUUID);
builder.append("]");
return builder.toString();
}
......
......@@ -39,15 +39,26 @@ public class MapperMetadata <T extends JpaBaseDomain>{
/**
* 表名和字段名
*/
public static boolean TABLE_COLUMN_UPCASE = true;
public static int TABLE_COLUMN_CASE = CASE_TYPE.LOWERCASE;
public static boolean TABLE_COLUMN_ESCAPE = false;
public static String TABLE_COLUMN_ESCAPE_CHAR = "`";
public static class CASE_TYPE{
public static int NORMAL = 0;
public static int LOWERCASE = 1;
public static int UPPERCASE = 2;
}
public transient static ConcurrentMap<String, List<FieldColumnMapper>> fieldsMap = new ConcurrentHashMap<String, List<FieldColumnMapper>>();
public transient static ConcurrentMap<String, String> sqlsMap = new ConcurrentHashMap<String, String>();
public static IdentifierGeneratorFactory identifierGeneratorFactory=new IdentifierGeneratorFactory();
/**
* getTableName
* @param entityClass
* @return
*/
public static String getTableName(Class<?> entityClass) {
String tableName = null;
String schema = null;
......@@ -89,7 +100,9 @@ public class MapperMetadata <T extends JpaBaseDomain>{
}
}
tableName = TABLE_COLUMN_UPCASE ? tableName.toUpperCase() : tableName;
tableName = tableColumnCaseConverter(tableName);
tableName = TABLE_COLUMN_ESCAPE ? TABLE_COLUMN_ESCAPE_CHAR + tableName + TABLE_COLUMN_ESCAPE_CHAR : tableName;
_logger.trace("Table Name " + tableName);
return tableName;
......@@ -107,6 +120,10 @@ public class MapperMetadata <T extends JpaBaseDomain>{
return idFieldColumnMapper;
}
/**
* buildColumnList
* @param entityClass
*/
public static void buildColumnList(Class<?> entityClass) {
if (fieldsMap.containsKey(entityClass.getSimpleName())) {
//run one time
......@@ -133,10 +150,11 @@ public class MapperMetadata <T extends JpaBaseDomain>{
if (columnAnnotation.name() != null && !columnAnnotation.name().equals("")) {
columnName = columnAnnotation.name();
} else {
columnName = TABLE_COLUMN_UPCASE ?
field.getName().toUpperCase() : field.getName();
columnName = field.getName();
}
columnName = tableColumnCaseConverter(columnName);
columnName = TABLE_COLUMN_ESCAPE ?
TABLE_COLUMN_ESCAPE_CHAR + columnName + TABLE_COLUMN_ESCAPE_CHAR
: columnName;
......@@ -161,4 +179,14 @@ public class MapperMetadata <T extends JpaBaseDomain>{
_logger.debug("fieldsMap : " + fieldsMap);
}
public static String tableColumnCaseConverter(String name) {
if(TABLE_COLUMN_CASE == CASE_TYPE.NORMAL) {}
else if(TABLE_COLUMN_CASE == CASE_TYPE.LOWERCASE) {
name = name.toLowerCase();
}else if(TABLE_COLUMN_CASE == CASE_TYPE.UPPERCASE) {
name = name.toUpperCase();
}
return name;
}
}
......@@ -50,7 +50,7 @@ public class SqlProviderDelete <T extends JpaBaseDomain>{
FieldColumnMapper idFieldColumnMapper=MapperMetadata.getIdColumn(entityClass.getSimpleName());
SQL sql=new SQL();
sql.DELETE_FROM(MapperMetadata.getTableName(entityClass));
sql.WHERE(idFieldColumnMapper.getColumnName()+" IN ( "+keyValue+" )");
sql.WHERE(idFieldColumnMapper.getColumnName()+" in ( "+keyValue+" )");
String deleteSql=sql.toString();
_logger.trace("Delete SQL \n"+deleteSql);
MapperMetadata.sqlsMap.put(MapperMetadata.getTableName(entityClass) + MapperMetadata.SQL_TYPE.REMOVE_SQL,deleteSql);
......
......@@ -56,7 +56,7 @@ public class SqlProviderInsert <T extends JpaBaseDomain>{
sql.VALUES(fieldColumnMapper.getColumnName(),"#{" + fieldColumnMapper.getFieldName() + "}");
}
}else if(generatedValue.strategy()==GenerationType.SEQUENCE){
sql.VALUES(fieldColumnMapper.getColumnName(),generatedValue.generator()+".NEXTVAL");
sql.VALUES(fieldColumnMapper.getColumnName(),generatedValue.generator()+".nextval");
}else if(generatedValue.strategy()==GenerationType.IDENTITY){
//skip
}else if(generatedValue.strategy()==GenerationType.TABLE){
......
......@@ -107,11 +107,11 @@ public class SqlProviderQuery <T extends JpaBaseDomain>{
countSql.append(selectSql);
}
if(countSql.toString().toUpperCase().indexOf("DISTINCT")>0) {
sql.append("SELECT COUNT(1) COUNTROWS_ FROM (").append(countSql).append(" ) COUNT_TABLE_");
if(countSql.toString().toLowerCase().indexOf("distinct")>0) {
sql.append("select count(1) countrows_ from (").append(countSql).append(" ) count_table_");
}else {
sql.append("SELECT COUNT(1) COUNTROWS_ ").append(
countSql.substring(countSql.toString().toUpperCase().indexOf("FROM"))
sql.append("select count(1) countrows_ ").append(
countSql.substring(countSql.toString().toLowerCase().indexOf("from"))
);
}
//删除缓存
......
......@@ -38,7 +38,7 @@ public class MyBatisTestRunner {
Thread.sleep(1000);
_logger.info("insert id " + student.getId());
service.remove(student.getId());
//service.remove(student.getId());
}
......@@ -129,7 +129,7 @@ public class MyBatisTestRunner {
student.setStdGender("M");
//student.setStdMajor(政治");
student.setPageSize(10);
student.setPageNumber(2);
student.setPageNumber(1);
List<Students> allListStudents =
service.queryPageResults(student).getRows();
for (Students s : allListStudents) {
......
......@@ -2,7 +2,7 @@
# DataBase configuration
############################################################################
#db2,derby,mysql,oracle,postgresql,sqlserver
config.datasource.database=mysql
config.datasource.database=postgresql
# JDBC Driver
# for MySql com.mysql.jdbc.Driver
# for oracle oracle.jdbc.driver.OracleDriver
......@@ -21,9 +21,15 @@ config.datasource.database=mysql
# for SyBase jdbc:sybase:Tds:hostname:port/secdb
# for Derby jdbc:derby://localhost:1527/secdb
#
config.datasource.driverclass=com.mysql.jdbc.Driver
config.datasource.url=jdbc:mysql://localhost/test?autoReconnect=false&characterEncoding=UTF-8&serverTimezone=UTC
config.datasource.username=root
config.datasource.password=maxkey
config.datasource.driverclass=org.postgresql.Driver
config.datasource.url=jdbc:postgresql://localhost:5432/postgres
config.datasource.username=postgres
config.datasource.password=postgresql
#config.datasource.driverclass=com.mysql.jdbc.Driver
#config.datasource.url=jdbc:mysql://localhost/test?autoReconnect=false&characterEncoding=UTF-8&serverTimezone=UTC
#config.datasource.username=root
#config.datasource.password=maxkey
############################################################################
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.apache.mybatis.jpa.test.dao.persistence.StudentsMapper" >
<sql id="sql_condition">
WHERE 1 = 1
<if test="id != null">
AND id = '${id}'
</if>
<if test="stdName != null and stdName != '' ">
AND stdname like '%${stdName}%'
</if>
<if test="stdGender != null and stdGender != '' ">
AND stdgender = #{stdGender}
</if>
<if test="stdMajor != null">
<![CDATA[AND stdmajor = #{stdMajor}]]>
</if>
</sql>
<select id="queryPageResults" parameterType="Students" resultType="Students">
select
id ,
stdno ,
stdname ,
stdgender ,
stdage ,
stdmajor ,
stdclass
from students
<include refid="sql_condition"/>
</select>
<select id="queryPageResults1" parameterType="Students" resultType="Students">
select
id ,
stdno ,
stdname ,
stdgender ,
stdage ,
stdmajor ,
stdclass
from students
<include refid="sql_condition"/>
and stdgender in (
select stdgender from students
)
</select>
<select id="queryBy" parameterType="Students" resultType="Students">
select
id ,
stdno ,
stdname ,
stdgender ,
stdage ,
stdmajor ,
stdclass
from roles
<include refid="sql_condition"/>
</select>
<delete id="delete" parameterType="Students" >
delete from students where id=#{id}
</delete>
</mapper>
\ No newline at end of file
......@@ -35,9 +35,9 @@
<!--<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">-->
<bean id="sqlSessionFactory" class="org.apache.mybatis.jpa.MyBatisSessionFactoryBean">
<property name="timeout" value="30" />
<property name="dialect" value="mysql" />
<property name="dialect" value="postgresql" />
<property name="dataSource" ref="dataSource" />
<property name="mapperLocations" value="classpath*:/org/apache/mybatis/jpa/test/dao/persistence/xml/mysql/*.xml" />
<property name="mapperLocations" value="classpath*:/org/apache/mybatis/jpa/test/dao/persistence/xml/postgresql/*.xml" />
<property name="typeAliasesPackage"
value="
org.apache.mybatis.jpa.test.domain,
......
--全部字段和表名用小写
insert into test.students (stdno, stdname, stdgender, stdage, stdmajor, stdclass, id)
values ('10001', '刘备', 'm', 40, '政治', '1', '8c34448b-c65b-4a4e-a0da-83284d05f909');
insert into test.students (stdno, stdname, stdgender, stdage, stdmajor, stdclass, id)
values ('10002', '关羽', 'm', 37, '物理', '1', 'b9111f83-d338-461d-8d46-f331087d5a42');
insert into test.students (stdno, stdname, stdgender, stdage, stdmajor, stdclass, id)
values ('10003', '张飞', 'm', 38, '政治', '1', '1297510b-5f47-4425-b1cf-778425254142');
insert into test.students (stdno, stdname, stdgender, stdage, stdmajor, stdclass, id)
values ('10004', '赵云', 'm', 29, '历史', '1', '940908e2-7c58-429a-bcef-8b566befed00');
insert into test.students (stdno, stdname, stdgender, stdage, stdmajor, stdclass, id)
values ('10005', '黄忠', 'm', 68, '化学', '1', '05084723-77a8-425a-870e-e33d00e53fd2');
insert into test.students (stdno, stdname, stdgender, stdage, stdmajor, stdclass, id)
values ('10006', '魏延', 'm', 35, '化学', '1', '37e4b3b4-3c76-4bf3-8165-f514d14ff54f');
insert into test.students (stdno, stdname, stdgender, stdage, stdmajor, stdclass, id)
values ('10007', '马超', 'm', 29, '历史', '1', 'f8d34aac-93d6-47ab-915e-fcd169007f62');
insert into test.students (stdno, stdname, stdgender, stdage, stdmajor, stdclass, id)
values ('10008', '姜维', 'm', 20, '政治', '1', 'd252f326-c0ac-46cb-82fc-cb2597edaf41');
insert into test.students (stdno, stdname, stdgender, stdage, stdmajor, stdclass, id)
values ('10009', '孙策', 'm', 43, '政治', '2', 'e4b748e6-ff3c-4727-9fc2-458b97cb318d');
insert into test.students (stdno, stdname, stdgender, stdage, stdmajor, stdclass, id)
values ('10010', '周瑜', 'm', 39, '数学', '2', 'c38f8afd-a6bc-458d-9f9a-fb22f30c7e39');
insert into test.students (stdno, stdname, stdgender, stdage, stdmajor, stdclass, id)
values ('10011', '鲁肃', 'm', 34, '物理', '2', '71aaa4dd-9720-4f76-a825-357842de3c88');
insert into test.students (stdno, stdname, stdgender, stdage, stdmajor, stdclass, id)
values ('10012', '吕蒙', 'm', 20, '数学', '2', 'dba0b7b9-97bf-41ac-8ac1-652b1fa05c9a');
insert into test.students (stdno, stdname, stdgender, stdage, stdmajor, stdclass, id)
values ('10013', '孙权', 'm', 20, '政治', '2', '3f1e0276-8104-44a0-9231-2759777b08ee');
insert into test.students (stdno, stdname, stdgender, stdage, stdmajor, stdclass, id)
values ('10014', '陆逊', 'm', 18, '数学', '2', '2120f7a5-00d9-44ff-92ee-ae1e2bc212e2');
insert into test.students (stdno, stdname, stdgender, stdage, stdmajor, stdclass, id)
values ('10015', '曹操', 'm', 46, '政治', '3', '715c53ac-c85d-4049-9ef9-abf4e3d91d15');
insert into test.students (stdno, stdname, stdgender, stdage, stdmajor, stdclass, id)
values ('10016', '典韦', 'm', 28, '历史', '3', '293745a9-c33e-47d2-9844-8668574d3b60');
insert into test.students (stdno, stdname, stdgender, stdage, stdmajor, stdclass, id)
values ('10017', '曹仁', 'm', 40, '数学', '3', 'f29ca87a-7b85-4ed6-b57b-8ab75128487b');
insert into test.students (stdno, stdname, stdgender, stdage, stdmajor, stdclass, id)
values ('10018', '司马懿', 'm', 38, '政治', '3', '8793f911-fc0a-49fa-9ca7-2ab4e6a19454');
\ No newline at end of file
......@@ -34,6 +34,7 @@ import org.apache.ibatis.type.TypeHandler;
import org.apache.mybatis.jpa.MyBatisSessionFactoryBean;
import org.apache.mybatis.jpa.id.IdentifierGeneratorFactory;
import org.apache.mybatis.jpa.persistence.MapperMetadata;
import org.apache.mybatis.jpa.persistence.MapperMetadata.CASE_TYPE;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.SqlSessionTemplate;
import org.mybatis.spring.mapper.MapperFactoryBean;
......@@ -160,8 +161,15 @@ public class MybatisAutoConfiguration implements InitializingBean {
}
}
if(this.properties.isTableColumnUpcase()) {
MapperMetadata.TABLE_COLUMN_UPCASE = true;
//default is lowercase
if(this.properties.getTableColumnCase().equalsIgnoreCase("uppercase")) {
MapperMetadata.TABLE_COLUMN_CASE = CASE_TYPE.UPPERCASE;
}else if(this.properties.getTableColumnCase().equalsIgnoreCase("lowercase")) {
MapperMetadata.TABLE_COLUMN_CASE = CASE_TYPE.LOWERCASE;
}else if(this.properties.getTableColumnCase().equalsIgnoreCase("normal")) {
MapperMetadata.TABLE_COLUMN_CASE = CASE_TYPE.NORMAL;
}else {
MapperMetadata.TABLE_COLUMN_CASE = CASE_TYPE.LOWERCASE;
}
if(this.properties.getTableColumnSnowflakeDatacenterId()>0 &&
......
......@@ -64,7 +64,7 @@ public class MybatisProperties {
private String tableColumnEscapeChar;
private boolean tableColumnUpcase;
private String tableColumnCase;
private int tableColumnSnowflakeDatacenterId;
......@@ -241,15 +241,18 @@ public class MybatisProperties {
this.tableColumnEscapeChar = tableColumnEscapeChar;
}
public boolean isTableColumnUpcase() {
return tableColumnUpcase;
}
public void setTableColumnUpcase(boolean tableColumnUpcase) {
this.tableColumnUpcase = tableColumnUpcase;
}
public int getTableColumnSnowflakeDatacenterId() {
public String getTableColumnCase() {
return tableColumnCase;
}
public void setTableColumnCase(String tableColumnCase) {
this.tableColumnCase = tableColumnCase;
}
public int getTableColumnSnowflakeDatacenterId() {
return tableColumnSnowflakeDatacenterId;
}
......
......@@ -6,9 +6,9 @@ spring.datasource.url=jdbc:mysql://localhost/test?autoReconnect=true&characterEn
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
mybatis.dialect=mysql
mybatis.type-aliases-package=org.apache.mybatis.jpa.test.domain
mybatis.mapper-locations=classpath*:/org/apache/mybatis/jpa/test/dao/persistence/xml/mysql/*.xml
mybatis.mapper-locations=classpath*:/org/apache/mybatis/jpa/test/dao/persistence/xml/${mybatis.dialect}/*.xml
mybatis.table-column-escape=true
mybatis.table-column-snowflake-datacenter-id=1
mybatis.table-column-snowflake-machine-id=1
......
CREATE TABLE STUDENTS
(
STDNO VARCHAR(100),
STDNAME VARCHAR(100),
STDGENDER VARCHAR(100),
STDAGE int,
STDMAJOR VARCHAR(100),
STDCLASS VARCHAR(100),
ID VARCHAR(100)
)ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8
COLLATE = utf8_general_ci;
insert into STUDENTS (STDNO, STDNAME, STDGENDER, STDAGE, STDMAJOR, STDCLASS, ID)
values ('10001', '刘备', 'M', 40, '政治', '1', '8c34448b-c65b-4a4e-a0da-83284d05f909');
insert into STUDENTS (STDNO, STDNAME, STDGENDER, STDAGE, STDMAJOR, STDCLASS, ID)
values ('10002', '关羽', 'M', 37, '物理', '1', 'b9111f83-d338-461d-8d46-f331087d5a42');
insert into STUDENTS (STDNO, STDNAME, STDGENDER, STDAGE, STDMAJOR, STDCLASS, ID)
values ('10003', '张飞', 'M', 38, '政治', '1', '1297510b-5f47-4425-b1cf-778425254142');
insert into STUDENTS (STDNO, STDNAME, STDGENDER, STDAGE, STDMAJOR, STDCLASS, ID)
values ('10004', '赵云', 'M', 29, '历史', '1', '940908e2-7c58-429a-bcef-8b566befed00');
insert into STUDENTS (STDNO, STDNAME, STDGENDER, STDAGE, STDMAJOR, STDCLASS, ID)
values ('10005', '黄忠', 'M', 68, '化学', '1', '05084723-77a8-425a-870e-e33d00e53fd2');
insert into STUDENTS (STDNO, STDNAME, STDGENDER, STDAGE, STDMAJOR, STDCLASS, ID)
values ('10006', '魏延', 'M', 35, '化学', '1', '37e4b3b4-3c76-4bf3-8165-f514d14ff54f');
insert into STUDENTS (STDNO, STDNAME, STDGENDER, STDAGE, STDMAJOR, STDCLASS, ID)
values ('10007', '马超', 'M', 29, '历史', '1', 'f8d34aac-93d6-47ab-915e-fcd169007f62');
insert into STUDENTS (STDNO, STDNAME, STDGENDER, STDAGE, STDMAJOR, STDCLASS, ID)
values ('10008', '姜维', 'M', 20, '政治', '1', 'd252f326-c0ac-46cb-82fc-cb2597edaf41');
insert into STUDENTS (STDNO, STDNAME, STDGENDER, STDAGE, STDMAJOR, STDCLASS, ID)
values ('10009', '孙策', 'M', 43, '政治', '2', 'e4b748e6-ff3c-4727-9fc2-458b97cb318d');
insert into STUDENTS (STDNO, STDNAME, STDGENDER, STDAGE, STDMAJOR, STDCLASS, ID)
values ('10010', '周瑜', 'M', 39, '数学', '2', 'c38f8afd-a6bc-458d-9f9a-fb22f30c7e39');
insert into STUDENTS (STDNO, STDNAME, STDGENDER, STDAGE, STDMAJOR, STDCLASS, ID)
values ('10011', '鲁肃', 'M', 34, '物理', '2', '71aaa4dd-9720-4f76-a825-357842de3c88');
insert into STUDENTS (STDNO, STDNAME, STDGENDER, STDAGE, STDMAJOR, STDCLASS, ID)
values ('10012', '吕蒙', 'M', 20, '数学', '2', 'dba0b7b9-97bf-41ac-8ac1-652b1fa05c9a');
insert into STUDENTS (STDNO, STDNAME, STDGENDER, STDAGE, STDMAJOR, STDCLASS, ID)
values ('10013', '孙权', 'M', 20, '政治', '2', '3f1e0276-8104-44a0-9231-2759777b08ee');
insert into STUDENTS (STDNO, STDNAME, STDGENDER, STDAGE, STDMAJOR, STDCLASS, ID)
values ('10014', '陆逊', 'M', 18, '数学', '2', '2120f7a5-00d9-44ff-92ee-ae1e2bc212e2');
insert into STUDENTS (STDNO, STDNAME, STDGENDER, STDAGE, STDMAJOR, STDCLASS, ID)
values ('10015', '曹操', 'M', 46, '政治', '3', '715c53ac-c85d-4049-9ef9-abf4e3d91d15');
insert into STUDENTS (STDNO, STDNAME, STDGENDER, STDAGE, STDMAJOR, STDCLASS, ID)
values ('10016', '典韦', 'M', 28, '历史', '3', '293745a9-c33e-47d2-9844-8668574d3b60');
insert into STUDENTS (STDNO, STDNAME, STDGENDER, STDAGE, STDMAJOR, STDCLASS, ID)
values ('10017', '曹仁', 'M', 40, '数学', '3', 'f29ca87a-7b85-4ed6-b57b-8ab75128487b');
insert into STUDENTS (STDNO, STDNAME, STDGENDER, STDAGE, STDMAJOR, STDCLASS, ID)
values ('10018', '司马懿', 'M', 38, '政治', '3', '8793f911-fc0a-49fa-9ca7-2ab4e6a19454');
insert into STUDENTS (STDNO, STDNAME, STDGENDER, STDAGE, STDMAJOR, STDCLASS, ID)
values ('10019', '邓艾', 'M', 17, '军事', '3', '317d5eda-927c-4871-a916-472a8062df23');
insert into STUDENTS (STDNO, STDNAME, STDGENDER, STDAGE, STDMAJOR, STDCLASS, ID)
values ('10020', '大乔', 'F', 25, '艺术', '4', '3edd3ce2-1b13-46c9-8f39-37522052f2cc');
insert into STUDENTS (STDNO, STDNAME, STDGENDER, STDAGE, STDMAJOR, STDCLASS, ID)
values ('10021', '小乔', 'F', 23, '艺术', '4', 'd353a108-657d-47c3-8aef-e6936fd9a58e');
insert into STUDENTS (STDNO, STDNAME, STDGENDER, STDAGE, STDMAJOR, STDCLASS, ID)
values ('10022', '孙尚香', 'F', 26, '历史', '4', '22f2914c-37bc-4e05-b0da-3d02f682008a');
insert into STUDENTS (STDNO, STDNAME, STDGENDER, STDAGE, STDMAJOR, STDCLASS, ID)
values ('10023', '貂蝉', 'F', 20, '艺术', '4', 'af04d610-6092-481e-9558-30bd63ef783c');
CREATE TABLE STUDENTS
(
STDNO VARCHAR2(100),
STDNAME VARCHAR2(100),
STDGENDER VARCHAR2(100),
STDAGE NUMBER,
STDMAJOR VARCHAR2(100),
STDCLASS VARCHAR2(100),
ID VARCHAR2(100)
);
insert into STUDENTS (STDNO, STDNAME, STDGENDER, STDAGE, STDMAJOR, STDCLASS, ID)
values ('10001', '刘备', 'M', 40, '政治', '1', '8c34448b-c65b-4a4e-a0da-83284d05f909');
insert into STUDENTS (STDNO, STDNAME, STDGENDER, STDAGE, STDMAJOR, STDCLASS, ID)
values ('10002', '关羽', 'M', 37, '物理', '1', 'b9111f83-d338-461d-8d46-f331087d5a42');
insert into STUDENTS (STDNO, STDNAME, STDGENDER, STDAGE, STDMAJOR, STDCLASS, ID)
values ('10003', '张飞', 'M', 38, '政治', '1', '1297510b-5f47-4425-b1cf-778425254142');
insert into STUDENTS (STDNO, STDNAME, STDGENDER, STDAGE, STDMAJOR, STDCLASS, ID)
values ('10004', '赵云', 'M', 29, '历史', '1', '940908e2-7c58-429a-bcef-8b566befed00');
insert into STUDENTS (STDNO, STDNAME, STDGENDER, STDAGE, STDMAJOR, STDCLASS, ID)
values ('10005', '黄忠', 'M', 68, '化学', '1', '05084723-77a8-425a-870e-e33d00e53fd2');
insert into STUDENTS (STDNO, STDNAME, STDGENDER, STDAGE, STDMAJOR, STDCLASS, ID)
values ('10006', '魏延', 'M', 35, '化学', '1', '37e4b3b4-3c76-4bf3-8165-f514d14ff54f');
insert into STUDENTS (STDNO, STDNAME, STDGENDER, STDAGE, STDMAJOR, STDCLASS, ID)
values ('10007', '马超', 'M', 29, '历史', '1', 'f8d34aac-93d6-47ab-915e-fcd169007f62');
insert into STUDENTS (STDNO, STDNAME, STDGENDER, STDAGE, STDMAJOR, STDCLASS, ID)
values ('10008', '姜维', 'M', 20, '政治', '1', 'd252f326-c0ac-46cb-82fc-cb2597edaf41');
insert into STUDENTS (STDNO, STDNAME, STDGENDER, STDAGE, STDMAJOR, STDCLASS, ID)
values ('10009', '孙策', 'M', 43, '政治', '2', 'e4b748e6-ff3c-4727-9fc2-458b97cb318d');
insert into STUDENTS (STDNO, STDNAME, STDGENDER, STDAGE, STDMAJOR, STDCLASS, ID)
values ('10010', '周瑜', 'M', 39, '数学', '2', 'c38f8afd-a6bc-458d-9f9a-fb22f30c7e39');
insert into STUDENTS (STDNO, STDNAME, STDGENDER, STDAGE, STDMAJOR, STDCLASS, ID)
values ('10011', '鲁肃', 'M', 34, '物理', '2', '71aaa4dd-9720-4f76-a825-357842de3c88');
insert into STUDENTS (STDNO, STDNAME, STDGENDER, STDAGE, STDMAJOR, STDCLASS, ID)
values ('10012', '吕蒙', 'M', 20, '数学', '2', 'dba0b7b9-97bf-41ac-8ac1-652b1fa05c9a');
insert into STUDENTS (STDNO, STDNAME, STDGENDER, STDAGE, STDMAJOR, STDCLASS, ID)
values ('10013', '孙权', 'M', 20, '政治', '2', '3f1e0276-8104-44a0-9231-2759777b08ee');
insert into STUDENTS (STDNO, STDNAME, STDGENDER, STDAGE, STDMAJOR, STDCLASS, ID)
values ('10014', '陆逊', 'M', 18, '数学', '2', '2120f7a5-00d9-44ff-92ee-ae1e2bc212e2');
insert into STUDENTS (STDNO, STDNAME, STDGENDER, STDAGE, STDMAJOR, STDCLASS, ID)
values ('10015', '曹操', 'M', 46, '政治', '3', '715c53ac-c85d-4049-9ef9-abf4e3d91d15');
insert into STUDENTS (STDNO, STDNAME, STDGENDER, STDAGE, STDMAJOR, STDCLASS, ID)
values ('10016', '典韦', 'M', 28, '历史', '3', '293745a9-c33e-47d2-9844-8668574d3b60');
insert into STUDENTS (STDNO, STDNAME, STDGENDER, STDAGE, STDMAJOR, STDCLASS, ID)
values ('10017', '曹仁', 'M', 40, '数学', '3', 'f29ca87a-7b85-4ed6-b57b-8ab75128487b');
insert into STUDENTS (STDNO, STDNAME, STDGENDER, STDAGE, STDMAJOR, STDCLASS, ID)
values ('10018', '司马懿', 'M', 38, '政治', '3', '8793f911-fc0a-49fa-9ca7-2ab4e6a19454');
insert into STUDENTS (STDNO, STDNAME, STDGENDER, STDAGE, STDMAJOR, STDCLASS, ID)
values ('10019', '邓艾', 'M', 17, '军事', '3', '317d5eda-927c-4871-a916-472a8062df23');
insert into STUDENTS (STDNO, STDNAME, STDGENDER, STDAGE, STDMAJOR, STDCLASS, ID)
values ('10020', '大乔', 'F', 25, '艺术', '4', '3edd3ce2-1b13-46c9-8f39-37522052f2cc');
insert into STUDENTS (STDNO, STDNAME, STDGENDER, STDAGE, STDMAJOR, STDCLASS, ID)
values ('10021', '小乔', 'F', 23, '艺术', '4', 'd353a108-657d-47c3-8aef-e6936fd9a58e');
insert into STUDENTS (STDNO, STDNAME, STDGENDER, STDAGE, STDMAJOR, STDCLASS, ID)
values ('10022', '孙尚香', 'F', 26, '历史', '4', '22f2914c-37bc-4e05-b0da-3d02f682008a');
insert into STUDENTS (STDNO, STDNAME, STDGENDER, STDAGE, STDMAJOR, STDCLASS, ID)
values ('10023', '貂蝉', 'F', 20, '艺术', '4', 'af04d610-6092-481e-9558-30bd63ef783c');
......@@ -224,6 +224,18 @@
<artifactId>mysql-connector-java</artifactId>
<version>${mysql-connnector.version}</version>
</dependency>
<dependency>
<groupId>com.highgo</groupId>
<artifactId>HgdbJdbc</artifactId>
<version>6.0.3.jre8</version>
</dependency>
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>42.2.19</version>
</dependency>
<!-- <dependency> <groupId>oracle</groupId> <artifactId>ojdbc6</artifactId>
<version>11.2.0.3</version> <scope>system</scope> <systemPath>${project.basedir}/lib/ojdbc6.jar</systemPath>
</dependency> -->
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册