kotlin 如何重用Exposed的DAO类进行JSON序列化或数据传输?

xam8gpfp  于 2023-02-09  发布在  Kotlin
关注(0)|答案(1)|浏览(172)

最近我尝试通过写一个Kotlin + Exposed演示来学习Kotlin。
使用Java + MyBatis的常见步骤如下:创建Java Bean类、Map器类、服务类和服务实现类

@Data class UserBean { String username; String password; }
@Mapper interface UserMapper extends BaseMapper<UserBean> {}
interface UserService extends BaseService<UserBean> {}
@Service UserSerivceImpl extends BaseServiceImpl<UserBean> implements UserService {}

然后,这些JavaBean类将用于系统的任何其他部分,以进行数据库IO和JSON序列化。

// create instance and convert to JSON
var user = new UserBean();
user.setUsername("username");
user.setPassword("password");
var om = new ObjectMapper();
var json = om.valueToTree(user);

official doc of Exposed DAO API之后,我创建了这些类:

class User(id : EntityID<Int>) : IntEntity(id)
{
    companion object : IntEntityClass<User>(Users)
    var username by Users.username
    var password by Users.password
}
object Users : IntIdTable()
{
    val username = varchar("username", 64)
    val password = varchar("password", 64)
}

User.all()User.new { } api在执行数据库IO时工作正常,但直接创建示例会抛出异常:
一个三个三个一个
Post here说 * Exposed不允许自己创建DAO对象 *。那么,有没有一种简单的方法可以重用这些DAO类进行JSON序列化或在程序的各个部分之间传输数据?我应该创建一个具有相同数据字段的DTO类吗?

h79rfbju

h79rfbju1#

Exposed Entities是有状态的对象,你不应该直接序列化它们,相反,正如你提到的,你应该使用一个简单的数据类,带有与你相关的序列化注解。
例如:

class User(id : EntityID<Int>) : IntEntity(id)
{
    companion object : IntEntityClass<User>(Users)
    var username by Users.username
    var password by Users.password

    fun asResponse(): UserResponse {
        return UserResponse(username, password)
    }
}

@Serializable
data class UserResponse(val username: String, val password: String)

相关问题