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},
MyBatis中,你可以使用自定义类型处理器(TypeHandler)来处理自定义的Map类型类型处理器用于在Java对象和数据库字段之间进行转换。 以下是一种实现自定义类型处理器处理自定义的Map的示例: 1. 定义一个自定义的Map类型,例如`CustomMap`: ```java public class CustomMap extends HashMap<String, Object> { // 添加自定义的方法或属性 } ``` 2. 实现一个自定义类型处理器,继承自`org.apache.ibatis.type.BaseTypeHandler`类,并实现对应的方法。 ```java 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; public class CustomMapTypeHandler extends BaseTypeHandler<CustomMap> { @Override public void setNonNullParameter(PreparedStatement ps, int i, CustomMap parameter, JdbcType jdbcType) throws SQLException { // 将CustomMap转换为需要的数据类型,并设置到PreparedStatement中 // ps.setXXX(i, convertedValue); } @Override public CustomMap getNullableResult(ResultSet rs, String columnName) throws SQLException { // 从ResultSet中获取指定列名的值,并将其转换为CustomMap类型 // Object columnValue = rs.getXXX(columnName); // CustomMap map = convertToCustomMap(columnValue); // return map; return null; } @Override public CustomMap getNullableResult(ResultSet rs, int columnIndex) throws SQLException { // 与上面类似,只是根据列索引获取值 return null; } @Override public CustomMap getNullableResult(CallableStatement cs, int columnIndex) throws SQLException { // 与上面类似,只是在CallableStatement中获取值 return null; } } ``` 在上述示例中,我们继承了`BaseTypeHandler`类,并重写了父类的方法,在这些方法中进行了自定义类型的转换逻辑。 3. 在MyBatis的配置文件中,注册自定义类型处理器。 ```xml <typeHandlers> <typeHandler handler="com.example.CustomMapTypeHandler"/> </typeHandlers> ``` 通过以上步骤,你就可以使用自定义的Map类型,并通过自定义类型处理器来处理该类型的转换逻辑。在数据库操作时,MyBatis会自动调用类型处理器来进行转换。你可以根据实际需求,在类型处理器中编写相应的转换逻辑,将自定义的Map类型与数据库字段进行转换。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值