package com.whn.hellospring.handler;
|
|
|
|
import org.apache.ibatis.type.BaseTypeHandler;
|
|
import org.apache.ibatis.type.JdbcType;
|
|
import org.joda.money.CurrencyUnit;
|
|
import org.joda.money.Money;
|
|
|
|
import java.sql.CallableStatement;
|
|
import java.sql.PreparedStatement;
|
|
import java.sql.ResultSet;
|
|
import java.sql.SQLException;
|
|
|
|
/**
|
|
* 在Money与Long之间转换的TypeHandler,处理CNY和人民币
|
|
*/
|
|
public class MoneyTypeHandler extends BaseTypeHandler<Money> {
|
|
@Override
|
|
public void setNonNullParameter(PreparedStatement preparedStatement, int i, Money money, JdbcType jdbcType) throws SQLException {
|
|
preparedStatement.setLong(i,money.getAmountMinorLong()); //存储为Long类型,精确到分
|
|
}
|
|
|
|
@Override
|
|
public Money getNullableResult(ResultSet resultSet, String s) throws SQLException {
|
|
return parseMoney(resultSet.getLong(s));
|
|
}
|
|
|
|
@Override
|
|
public Money getNullableResult(ResultSet resultSet, int i) throws SQLException {
|
|
return parseMoney(resultSet.getLong(i));
|
|
}
|
|
|
|
@Override
|
|
public Money getNullableResult(CallableStatement callableStatement, int i) throws SQLException {
|
|
return parseMoney(callableStatement.getLong(i));
|
|
}
|
|
|
|
/**
|
|
* 将Long值转换为Money
|
|
*/
|
|
private Money parseMoney(Long value){
|
|
return Money.ofMinor(CurrencyUnit.of("CNY"),value);
|
|
}
|
|
|
|
}
|