mybatis TypeHandler 类型处理器

1. 自定义日期类型处理器

继承mybatis提供的BaseTypeHandler覆写方法,
来转换Java和数据库中的字段
package cn.bitqian.config;

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;
import java.util.Date;

/**
 * 日期类型处理器
 * 将日期类型转换为long/long转换为util.date
 * 将Util.date 转换为数据库中的bigint(long)
 * @author echo lovely
 * @date 2020/9/11 21:15
 */
public class DateTypeHandler extends BaseTypeHandler<Date> {
    
    

    // util.date ==> 插入数据库中的变为bigint类型
    @Override
    public void setNonNullParameter(PreparedStatement preparedStatement,
                                    int i, Date date, JdbcType jdbcType) throws SQLException {
    
    
        if (date != null) {
    
    
            long time = date.getTime();
            preparedStatement.setLong(i, time);
        }

    }

    // 下面三个重载 用于查询数据库中的字段,转换为日期
    @Override
    public Date getNullableResult(ResultSet resultSet, String s) throws SQLException {
    
    
        System.out.println("obj========" + resultSet.getObject(s));

        long birthdayTime = resultSet.getLong(s);

        if (birthdayTime != 0)
            return new Date(birthdayTime);

        return null;
    }

    @Override
    public Date getNullableResult(ResultSet resultSet, int i) throws SQLException {
    
    
        long birthdayTime = resultSet.getLong(i);
        System.out.println(birthdayTime);

        if (birthdayTime != 0)
            return new Date(birthdayTime);

        return null;
    }

    @Override
    public Date getNullableResult(CallableStatement callableStatement, int i) throws SQLException {
    
    

        long birthdayTime = callableStatement.getLong(i);
        if (birthdayTime != 0)
            return new Date(birthdayTime);

        return null;
    }
}

2. 配置自定义日期处理器

 <!-- 指定额、日期类型处理器 -->
 <typeHandlers>
     <typeHandler handler="cn.bitqian.config.DateTypeHandler"/>
 </typeHandlers>

3. 新增,查询

    // 测试新增 日期转换为长整型
    @Test
    public void test1() {
    
    

        SqlSession session = getSession();
        if (session != null) {
    
    
            UserMapper mapper = session.getMapper(UserMapper.class);
            User user = new User(null, "lucy", "999", new Date());

            int count = mapper.save(user);
            System.out.println(count);

            session.close();
        }

    }

    @Test
    public void test2() {
    
    
        SqlSession session = getSession();
        if (session != null) {
    
    
            UserMapper mapper = session.getMapper(UserMapper.class);

            // long int -> util.date
            System.out.println(mapper.selectUserById(6));

            session.close();
        }
    }

log4j debug如下

猜你喜欢

转载自blog.csdn.net/qq_44783283/article/details/108552779