import com.opentable.db.postgres.embedded.EmbeddedPostgres
import groovy.json.JsonOutput
import groovy.json.JsonSlurper
import org.junit.After
import org.junit.Before
import org.junit.Test
import org.springframework.jdbc.core.JdbcTemplate
class JsonFieldTest {
private EmbeddedPostgres postgres
private JdbcTemplate jdbcTemplate
@Before
void setUp() {
// 启动嵌入式PostgreSQL数据库
postgres = EmbeddedPostgres.start()
// 创建JdbcTemplate实例用于数据库操作
jdbcTemplate = new JdbcTemplate(postgres.getPostgresDatabase())
// 创建测试表
jdbcTemplate.execute('CREATE TABLE test_json (id SERIAL PRIMARY KEY, data JSON)')
}
@After
void tearDown() {
// 停止嵌入式数据库
postgres.close()
}
@Test
void writeAndReadJsonField() {
def jsonData = [key1: 'value1', key2: 'value2']
def jsonString = JsonOutput.toJson(jsonData)
// 插入JSON数据
jdbcTemplate.update('INSERT INTO test_json (data) VALUES (?)', jsonString)
// 读取JSON数据
def result = jdbcTemplate.queryForObject('SELECT data FROM test_json WHERE id = 1', [JsonSlurper])
// 比较结果
assert result.key1 == 'value1'
assert result.key2 == 'value2'
}
}
这段代码使用了Groovy的JsonOutput和JsonSlurper来处理JSON数据的写入和读取。在setUp方法中,它启动了一个嵌入式的PostgreSQL数据库,并创建了一个JdbcTemplate实例。在writeAndReadJsonField方法中,它插入了一条包含JSON数据的记录,并读取该数据进行断言比较,验证数据的正确性。最后在tearDown方法中,它关闭了嵌入式数据库。