Comments (6)
We can add a SqlType
implementation to handle enums:
fun <E : Any, C : Enum<C>> BaseTable<E>.enum(name: String, typeRef: TypeReference<C>): BaseTable<E>.ColumnRegistration<C> {
return registerColumn(name, EnumSqlType(typeRef.referencedType as Class<C>))
}
class EnumSqlType<C : Enum<C>>(val enumClass: Class<C>) : SqlType<C>(Types.VARCHAR, "varchar") {
private val valueOf = enumClass.getDeclaredMethod("valueOf", String::class.java)
override fun doSetParameter(ps: PreparedStatement, index: Int, parameter: C) {
ps.setString(index, parameter.name)
}
override fun doGetResult(rs: ResultSet, index: Int): C? {
return rs.getString(index)?.takeIf { it.isNotBlank() }?.let { enumClass.cast(valueOf(null, it)) }
}
}
Usage:
object Employees : Table<Nothing>("t_employee") {
// ...
val sex by enum("sex", typeRef<Sex>())
}
from ktorm.
Ktorm 2.7 is released.
from ktorm.
Any plan to release this any time soon? I am using version 2.6 and it's not available.
from ktorm.
I've added it to version 2.7, which might be released next month.
If you need to use it right now, you can copy the codes above to your project temporarily.
from ktorm.
数据库里的enum,默认是用的name,这个感觉不是很友好。我们自己定义了一个,用的tinyInt。
interface HasCodeEnum {
val code: Int
}
inline fun <reified T : HasCodeEnum> Int?.ofEnum(): T? {
if (this == null) return null
val enums = T::class.java.enumConstants
return enums.firstOrNull { it.code == this }
}
data class EnumSqlType<T : HasCodeEnum>(
val enumType: KClass<T>
) : SqlType<T>(Types.TINYINT, typeName = "enum") {
override fun doSetParameter(
ps: PreparedStatement,
index: Int,
parameter: T ) {
ps.setInt(index, parameter.code)
}
override fun doGetResult(
rs: ResultSet,
index: Int ): T? {
val code = rs.getInt(index)
val enums = enumType.java.enumConstants
return enums.firstOrNull { it.code == code }
}
}
from ktorm.
@jiaojing Great.
from ktorm.
Related Issues (20)
- ktorm-support-mysql 在maven仓库中没有找到 HOT 1
- Sequence update not as expected when table column with an ON UPDATE CURRENT_TIMESTAMP clause HOT 1
- Is this still actively maintained? HOT 6
- Apache Derby DB: In case of reference entity API and using table references, ktorm generates SQL aliases with first underscore character(_) that invalid for Apache DB HOT 2
- Type mismatch.
- [Feature Request]:Field update strategist, pre positioned during insertion and update
- Connectivity problem HOT 1
- 关于join的优化
- Multiple onConflict at bulkInsertOrUpdate HOT 1
- MySQL存储UUID报错 HOT 8
- 自定义支持MySQL的find_in_set函数 HOT 5
- 适配 solon框架 HOT 1
- Union功能存在问题? HOT 2
- 关于列绑定,能不能先references再transform?
- 🧐为什么不添加支持分页的函数呢 HOT 2
- Oracle Timestamp support
- Database#exceptionTranslator should return a nullable throwable
- 4.0版本使用KSP生成实体类运行出错 HOT 8
- ksp column converter in version 4.0.0 disappeared HOT 1
- Ktorm 别名机制似乎有问题 HOT 2
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from ktorm.