diff --git a/noark-orm/src/main/java/xyz/noark/orm/AnnotationEntityMaker.java b/noark-orm/src/main/java/xyz/noark/orm/AnnotationEntityMaker.java index 572b679e..10b50af4 100644 --- a/noark-orm/src/main/java/xyz/noark/orm/AnnotationEntityMaker.java +++ b/noark-orm/src/main/java/xyz/noark/orm/AnnotationEntityMaker.java @@ -227,8 +227,15 @@ else if (type == LongAdder.class) { } // 其他就是Json类型的. else { - fm.setType(FieldType.AsJson); - fm.setWidth(fm.getColumn() == null ? 1024 : fm.getColumn().length()); + Column column = fm.getColumn(); + if (column==null){ + fm.setWidth(1024); + }else if (column.length()==0){ + //MysqlJson + fm.setType(FieldType.AsMysqlJson); + }else { + fm.getColumn().length(); + } } } } \ No newline at end of file diff --git a/noark-orm/src/main/java/xyz/noark/orm/accessor/FieldType.java b/noark-orm/src/main/java/xyz/noark/orm/accessor/FieldType.java index 1e7cc73d..2b0691c9 100644 --- a/noark-orm/src/main/java/xyz/noark/orm/accessor/FieldType.java +++ b/noark-orm/src/main/java/xyz/noark/orm/accessor/FieldType.java @@ -75,5 +75,9 @@ public enum FieldType { /** * Blob类型 */ - AsBlob; + AsBlob, + /** + * mysqlJSON类型 + */ + AsMysqlJson; } \ No newline at end of file diff --git a/noark-orm/src/main/java/xyz/noark/orm/accessor/sql/mysql/adaptor/MysqlJsonAdaptor.java b/noark-orm/src/main/java/xyz/noark/orm/accessor/sql/mysql/adaptor/MysqlJsonAdaptor.java new file mode 100644 index 00000000..ef6165c4 --- /dev/null +++ b/noark-orm/src/main/java/xyz/noark/orm/accessor/sql/mysql/adaptor/MysqlJsonAdaptor.java @@ -0,0 +1,45 @@ +/* + * Copyright © 2018 www.noark.xyz All Rights Reserved. + * + * 感谢您选择Noark框架,希望我们的努力能为您提供一个简单、易用、稳定的服务器端框架 ! + * 除非符合Noark许可协议,否则不得使用该文件,您可以下载许可协议文件: + * + * http://www.noark.xyz/LICENSE + * + * 1.未经许可,任何公司及个人不得以任何方式或理由对本框架进行修改、使用和传播; + * 2.禁止在本项目或任何子项目的基础上发展任何派生版本、修改版本或第三方版本; + * 3.无论你对源代码做出任何修改和改进,版权都归Noark研发团队所有,我们保留所有权利; + * 4.凡侵犯Noark版权等知识产权的,必依法追究其法律责任,特此郑重法律声明! + */ +package xyz.noark.orm.accessor.sql.mysql.adaptor; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import xyz.noark.orm.FieldMapping; +import xyz.noark.orm.accessor.sql.PreparedStatementProxy; + +import java.sql.ResultSet; + +/** + * MysqlJson类型属性 + * + * @author songjie.zheng[39776756@qq.com] + * @since 3.4 + */ +public class MysqlJsonAdaptor extends AbstractValueAdaptor { + @Override + protected void toPreparedStatement(FieldMapping fm, PreparedStatementProxy pstmt, JSONObject jsonObject, int parameterIndex) throws Exception { + if (jsonObject == null) { + pstmt.setString(fm, parameterIndex, null); + } else { + String json = JSON.toJSONString(jsonObject); + pstmt.setString(fm, parameterIndex, json); + } + } + + @Override + protected Object toParameter(FieldMapping fm, ResultSet rs) throws Exception { + String json = rs.getString(fm.getColumnName()); + return JSONObject.parseObject(json, fm.getFieldClass()); + } +} diff --git a/noark-orm/src/main/java/xyz/noark/orm/accessor/sql/mysql/adaptor/ValueAdaptorManager.java b/noark-orm/src/main/java/xyz/noark/orm/accessor/sql/mysql/adaptor/ValueAdaptorManager.java index f3832458..76098662 100644 --- a/noark-orm/src/main/java/xyz/noark/orm/accessor/sql/mysql/adaptor/ValueAdaptorManager.java +++ b/noark-orm/src/main/java/xyz/noark/orm/accessor/sql/mysql/adaptor/ValueAdaptorManager.java @@ -4,7 +4,7 @@ * 感谢您选择Noark框架,希望我们的努力能为您提供一个简单、易用、稳定的服务器端框架 ! * 除非符合Noark许可协议,否则不得使用该文件,您可以下载许可协议文件: * - * http://www.noark.xyz/LICENSE + * http://www.noark.xyz/LICENSE * * 1.未经许可,任何公司及个人不得以任何方式或理由对本框架进行修改、使用和传播; * 2.禁止在本项目或任何子项目的基础上发展任何派生版本、修改版本或第三方版本; @@ -38,6 +38,7 @@ public class ValueAdaptorManager { ADAPTOR.put(FieldType.AsDouble, new DoubleAdaptor()); ADAPTOR.put(FieldType.AsDate, new DateAdaptor()); ADAPTOR.put(FieldType.AsJson, new JsonAdaptor()); + ADAPTOR.put(FieldType.AsMysqlJson, new MysqlJsonAdaptor()); ADAPTOR.put(FieldType.AsLocalDateTime, new LocalDateTimeAdaptor()); ADAPTOR.put(FieldType.AsInstant, new InstantAdaptor()); ADAPTOR.put(FieldType.AsBlob, new BlobAdaptor());