mybatis类型转换为json格式

在项目开发中有些字段需要使用json格式进行存储,mysql从5.7开始已经支持JSON类型的字段。使用mybatis自定义实现类型转换为json格式存储在数据库中。

第一步

新建JsonTypeHandler 继承BaseTypeHandler

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
import com.alibaba.fastjson.JSON;
import org.apache.ibatis.type.BaseTypeHandler;
import org.apache.ibatis.type.JdbcType;

import java.sql.CallableStatement;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

/**
* 转换为json格式
* @param
*/
public class JsonTypeHandler<T extends Object> extends BaseTypeHandler<T> {
private Class clazz;

public JsonTypeHandler(Class clazz) {
this.clazz = clazz;
}

public JsonTypeHandler() {
}

@Override
public void setNonNullParameter(PreparedStatement ps, int i, T parameter, JdbcType jdbcType) throws SQLException {
ps.setString(i, JSON.toJSONString(parameter));
}

@Override
public T getNullableResult(ResultSet rs, String columnName) throws SQLException {
return JSON.parseObject(rs.getString(columnName), clazz);
}

@Override
public T getNullableResult(ResultSet rs, int columnIndex) throws SQLException {
return JSON.parseObject(rs.getString(columnIndex), clazz);
}

@Override
public T getNullableResult(CallableStatement cs, int columnIndex) throws SQLException {
return JSON.parseObject(cs.getString(columnIndex), clazz);
}
}

xml 配置

1
2
3
4
5
6
7
8
"baseMap" type="com.felix.project.model.User">
"id" column="id"/>
"username" column="username" jdbcType="VARCHAR"/>
"password" column="password" jdbcType="VARCHAR"/>
"company" column="company" jdbcType="VARCHAR"/>
"description" column="description" jdbcType="VARCHAR"
typeHandler="com.felix.project.handler.JsonTypeHandler"/>

添加或者更新

1
2
3
4
5
6
7
8
9
10
11
12

insert into`user` (username, password, company,description)
values (#{username}, #{password}, #{company}, #{description ,typeHandler=com.felix.project.handler.JsonTypeHandler})
insert>
<update id="update">
update `user`
set username = #{username},
password = #{password},
company = #{company},
description= #{description,typeHandler=com.felix.project.handler.JsonTypeHandler}
where id = #{id}
update>

你可能感兴趣的:(mybatis类型转换为json格式)