mybatis中几种typeHandler的定义使用详解
时间:2022-05-27 09:46:16|栏目:JAVA代码|点击: 次
1.存储到数据库, 将LONG数组转换成字符串;从数据库获取数据, 将字符串转为LONG数组
package com.winturn.utils.handler;
import java.sql.CallableStatement;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import org.apache.ibatis.type.BaseTypeHandler;
import org.apache.ibatis.type.JdbcType;
import com.winturn.utils.CommonJsonUtil;
/**
* <p>Class: ArrayLongTypeHandler.java</p>
* <p>Description: 存储到数据库, 将LONG数组转换成字符串;
* 从数据库获取数据, 将字符串转为LONG数组.
</p>*/
public class ArrayLongTypeHandler extends BaseTypeHandler<Object> {
@Override
public void setNonNullParameter(PreparedStatement ps, int i,
Object parameter, JdbcType jdbcType) throws SQLException {
ps.setString(i, CommonJsonUtil.stringify(parameter));
}
@Override
public Object getNullableResult(ResultSet rs, String columnName)
throws SQLException {
return CommonJsonUtil.parse3(rs.getString(columnName), Object.class);
}
@Override
public Object getNullableResult(ResultSet rs, int columnIndex)
throws SQLException {
return CommonJsonUtil.parse3(rs.getString(columnIndex), Object.class);
}
@Override
public Object getNullableResult(CallableStatement cs, int columnIndex)
throws SQLException {
return CommonJsonUtil.parse3(cs.getString(columnIndex), Object.class);
}
}
2.存储到数据库, 将基本数据数组转换成字符串;从数据库获取数据, 将字符串根据','拆分,转为数组.
package com.winturn.utils.handler;
import java.sql.CallableStatement;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import org.apache.ibatis.type.BaseTypeHandler;
import org.apache.ibatis.type.JdbcType;
import com.winturn.utils.CommonJsonUtil;
/**
* <p>Class: ArrayStringTypeHandler.java</p>
* <p>Description: 存储到数据库, 将基本数据数组转换成字符串;
* 从数据库获取数据, 将字符串根据','拆分,转为数组.</p>
*
*
*/
public class ArrayStringTypeHandler extends BaseTypeHandler<Object> {
@Override
public void setNonNullParameter(PreparedStatement ps, int i, Object parameter,
JdbcType jdbcType) throws SQLException {
ps.setString(i, CommonJsonUtil.stringify(parameter));
}
@Override
public Object getNullableResult(ResultSet rs, String columnName)
throws SQLException {
return CommonJsonUtil.parse2(rs.getString(columnName), Object.class);
}
@Override
public Object getNullableResult(ResultSet rs, int columnIndex)
throws SQLException {
return CommonJsonUtil.parse2(rs.getString(columnIndex), Object.class);
}
@Override
public Object getNullableResult(CallableStatement cs, int columnIndex)
throws SQLException {
return CommonJsonUtil.parse2(cs.getString(columnIndex), Object.class);
}
}
3.jsonarray 格式的字符串转换为相应的数组
package com.winturn.utils.handler;
import java.sql.CallableStatement;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import org.apache.ibatis.type.BaseTypeHandler;
import org.apache.ibatis.type.JdbcType;
import com.winturn.utils.CommonJsonUtil;
/**
* <p>Class: ArrayIntegerTypeHandler.java</p>
* <p>Description: jsonarray 格式的字符串转换为相应的数组 </p>
*
*/
public class JsonArrayTypeHandler extends BaseTypeHandler<Object> {
@Override
public void setNonNullParameter(PreparedStatement ps, int i,
Object parameter, JdbcType jdbcType) throws SQLException {
ps.setString(i, CommonJsonUtil.stringify(parameter));
}
@Override
public Object getNullableResult(ResultSet rs, String columnName)
throws SQLException {
return CommonJsonUtil.parseJsonToArray(rs.getString(columnName), Object.class);
}
@Override
public Object getNullableResult(ResultSet rs, int columnIndex)
throws SQLException {
return CommonJsonUtil.parseJsonToArray(rs.getString(columnIndex), Object.class);
}
@Override
public Object getNullableResult(CallableStatement cs, int columnIndex)
throws SQLException {
return CommonJsonUtil.parseJsonToArray(cs.getString(columnIndex), Object.class);
}
}
4.将Float类型的数组装换成字符创进行存储
package com.winturn.utils.handler;
import java.sql.CallableStatement;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import org.apache.ibatis.type.BaseTypeHandler;
import org.apache.ibatis.type.JdbcType;
import com.winturn.utils.CommonJsonUtil;
/**
* <p>Filename:JsonFloatTypeHandler.java</p>
* <p>Description: 将float类型数组装换成字符串
</p>
*
*/
public class JsonFloatTypeHandler extends BaseTypeHandler<Object> {
@Override
public void setNonNullParameter(PreparedStatement ps, int i,
Object parameter, JdbcType jdbcType) throws SQLException {
ps.setString(i, CommonJsonUtil.stringifyObject(parameter));
}
@Override
public Object getNullableResult(ResultSet rs, String columnName)
throws SQLException {
return CommonJsonUtil.parseJsonToFloat(rs.getString(columnName), Object.class);
}
@Override
public Object getNullableResult(ResultSet rs, int columnIndex)
throws SQLException {
return CommonJsonUtil.parseJsonToFloat(rs.getString(columnIndex), Object.class);
}
@Override
public Object getNullableResult(CallableStatement cs, int columnIndex)
throws SQLException {
return CommonJsonUtil.parseJsonToFloat(cs.getString(columnIndex), Object.class);
}
}
5.将map装换成字符串存储到数据库,取出时将字符串装换成map
package com.winturn.utils.handler;
import java.sql.CallableStatement;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Types;
import java.util.Map;
import org.apache.ibatis.type.BaseTypeHandler;
import org.apache.ibatis.type.JdbcType;
import org.codehaus.jackson.map.ObjectMapper;
import com.winturn.exceptions.RolerServiceException;
import com.winturn.utils.JsonMapUtil;
/**
*
* @ClassName: JsonMapTypeHandler
* @Description: 将map装换成数组存储数据库,取出时将字符串装换成map
* @author sgl
* @date 2015年12月21日 下午6:22:50
*/
public class JsonMapTypeHandler extends BaseTypeHandler<Map<String, Object>> {
ObjectMapper mapper = new ObjectMapper();
@Override
public Map<String, Object> getNullableResult(ResultSet rs, String columnName) {
try {
String value = rs.getString(columnName);
return mapper.readValue(value, Map.class);
} catch (Exception e) {
}
return null;
}
@Override
public Map<String, Object> getNullableResult(ResultSet rs, int columnIndex) throws SQLException {
try {
String value = rs.getString(columnIndex);
return mapper.readValue(value, Map.class);
} catch (Exception e) {
}
return null;
}
@Override
public Map<String, Object> getNullableResult(CallableStatement cs, int columnIndex) throws SQLException {
try {
String value = cs.getString(columnIndex);
return mapper.readValue(value, Map.class);
} catch (Exception e) {
}
return null;
}
@Override
public void setNonNullParameter(PreparedStatement ps, int i, Map<String, Object> parameter, JdbcType jdbcType)
throws SQLException {
if (parameter == null) {
ps.setNull(i, Types.VARCHAR);
} else {
try {
ps.setString(i, JsonMapUtil.getJsonStrByMap(parameter));
} catch (RolerServiceException e) {
e.printStackTrace();
}
}
}
}
上一篇:详解如何在springcloud分布式系统中实现分布式锁
栏 目:JAVA代码
下一篇:Java BufferWriter写文件写不进去或缺失数据的解决
本文标题:mybatis中几种typeHandler的定义使用详解
本文地址:http://www.codeinn.net/misctech/202961.html


阅读排行
- 1Java Swing组件BoxLayout布局用法示例
- 2Caused by: java.lang.ClassNotFoundException: org.objectweb.asm.Type异常
- 3java中-jar 与nohup的对比
- 4Java邮件发送程序(可以同时发给多个地址、可以带附件)
- 5Java中自定义异常详解及实例代码
- 6深入理解Java中的克隆
- 7解析SpringSecurity+JWT认证流程实现
- 8java读取excel文件的两种方法
- 9spring boot里增加表单验证hibernate-validator并在freemarker模板里显示错误信息(推荐)
- 10深入解析java虚拟机




