myBatis自定义jdbcType类型
DATE类的定义
package com.cjy.mybatis.typehandler;
import java.sql.CallableStatement;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Date;
import org.apache.ibatis.type.JdbcType;
import org.apache.ibatis.type.MappedJdbcTypes;
import org.apache.ibatis.type.MappedTypes;
import org.apache.ibatis.type.TypeHandler;
import org.apache.log4j.Logger;
@MappedJdbcTypes({JdbcType.VARCHAR}) //对应数据库类型
@MappedTypes({Date.class}) //java数据类型
public class MyDateTypeHandler implements TypeHandler<Date>{
private Logger logger = Logger.getLogger(MyDateTypeHandler.class);
//入库前的类型转换
@Override
public void setParameter(PreparedStatement ps, int i, Date parameter,
JdbcType jdbcType) throws SQLException {
logger.info("setParameter(PreparedStatement ps, int i, Date parameter,JdbcType jdbcType)....");
ps.setString(i, String.valueOf(parameter.getTime()));
}
//查询后的数据处理
@Override
public Date getResult(ResultSet rs, String columnName) throws SQLException {
logger.info("getResult(ResultSet rs, String columnName)....");
return new Date(rs.getLong(columnName));
}
@Override
public Date getResult(ResultSet rs, int columnIndex) throws SQLException {
logger.info("getResult(ResultSet rs, int columnIndex)....");
return new Date(rs.getLong(columnIndex));
}
@Override
public Date getResult(CallableStatement cs, int columnIndex)
throws SQLException {
logger.info("getResult(CallableStatement cs, int columnIndex)....");
return cs.getDate(columnIndex);
}
}
DATE类配置自定义处理类–>mybatis-config.xml
<typeHandlers>
<typeHandler javaType="Date" jdbcType="VARCHAR" handler="com.cjy.mybatis.typehandler.MyDateTypeHandler"/>
<!-- <package name=""/> -->
</typeHandlers>
DATE类sql处理
完整格式:
{createtime,typeHandler=com.cjy.mybatis.typehandler.MyDateTypeHandler,javaType=date,jdbcType=VARCHAR}
<insert id="saveEmpOne" parameterType="com.cjy.mybatis.entity.Employee" >
INSERT INTO employee(user_name,gender,email,createtime)
VALUES(#{userName},#{gender},#{email},#{createtime,typeHandler=com.cjy.mybatis.typehandler.MyDateTypeHandler})
</insert>
JSONArray类型的定义
package com.cfam.util;
import com.alibaba.fastjson.JSONArray;
import com.cfam.base.Base;
import org.apache.ibatis.type.JdbcType;
import org.apache.ibatis.type.MappedJdbcTypes;
import org.apache.ibatis.type.MappedTypes;
import org.apache.ibatis.type.TypeHandler;
import java.sql.CallableStatement;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
//import org.apache.log4j.Logger;
/**
* BelongsProject: contractplatform
* BelongsPackage: com.cfam.controller
* Author: BAIMH
* CreateTime: 2021-01-27 17:41
* Description:
*/
@MappedJdbcTypes({JdbcType.VARCHAR}) //对应数据库类型
@MappedTypes({JSONArray.class}) //java数据类型
public class MyDateTypeHandler extends Base implements TypeHandler<JSONArray> {
//入库前的类型转换
@Override
public void setParameter(PreparedStatement preparedStatement, int i, JSONArray objects, JdbcType jdbcType) throws SQLException {
preparedStatement.setString(i, String.valueOf(objects));
}
//查询后的数据处理
@Override
public JSONArray getResult(ResultSet rs, String columnName) throws SQLException {
logger.info("getResult(ResultSet rs, String columnName)....");
return JSONArray.parseArray(rs.getString(columnName));
}
@Override
public JSONArray getResult(ResultSet rs, int columnIndex) throws SQLException {
logger.info("getResult(ResultSet rs, int columnIndex)....");
return JSONArray.parseArray(rs.getString(columnIndex));
}
@Override
public JSONArray getResult(CallableStatement cs, int columnIndex)
throws SQLException {
logger.info("getResult(CallableStatement cs, int columnIndex)....");
return JSONArray.parseArray(cs.getString(columnIndex));
}
}
JSONArray类sql处理
#{availableAuthTypes,jdbcType=OTHER,typeHandler=com.cfam.util.MyDateTypeHandler},