joda-money是用来处理金额的,数据库存储使用bigint,实体类使用Money类。

首先pom文件中加入依赖

<!--joda-money-->
<dependency><groupId>org.joda</groupId><artifactId>joda-money</artifactId><version>LATEST</version>
</dependency>

mybatis有一套java和数据库的对应关系,jdbc中bigint对应java的是long,所以需要做一层long到Money的转换,这时候就需要使用mybatis提供的BaseTypeHandler了,首先需要在mybatis的配置中配置handler的包路径,我使用的是javaConfig,也可以使用properties

sessionFactory.setTypeHandlersPackage("com.demo.handler");

然后在指定的包下编写handler类

/*** Money 和 Long 之间转换的 TypeHandler,处理 CNY 人民币*/
public class MoneyTypeHandler extends BaseTypeHandler<Money> {@Overridepublic void setNonNullParameter(PreparedStatement preparedStatement, int i, Money money, JdbcType jdbcType) throws SQLException {preparedStatement.setLong(i, money.getAmountMajorLong());}@Overridepublic Money getNullableResult(ResultSet resultSet, String s) throws SQLException {return parseMoney(resultSet.getLong(s));}@Overridepublic Money getNullableResult(ResultSet resultSet, int i) throws SQLException {return parseMoney(resultSet.getLong(i));}@Overridepublic Money getNullableResult(CallableStatement callableStatement, int i) throws SQLException {return parseMoney(callableStatement.getLong(i));}private Money parseMoney(Long value) {// 此处需要标明货币类型,CNY代表人民币,USD代表美元,JPY代表日元等,精度两位则100,三位则1000,以此类推return Money.of(CurrencyUnit.of("CNY"), value / 100.0);}
}

记住数据库使用bigint,java实体类使用Money,还有在xml的resultMap和insert字段类型配置typeHandler

// 数据库
`price` bigint(20) NOT NULL COMMENT '价格'
// 实体类
private Money price;
// resultMap
<resultMap id="BaseResultMap" type="cn.zhongguochu.demo.entity.Fruit"><id column="id" jdbcType="VARCHAR" property="id" /><result column="name" jdbcType="VARCHAR" property="name" /><result column="price" jdbcType="BIGINT" property="price" typeHandler="cn.zhongguochu.demo.handler.MoneyTypeHandler" />
</resultMap>
// insert语句
insert into fruit(id, name, price)
values(
#{id},
#{name},
#{price,typeHandler=cn.zhongguochu.demo.handler.MoneyTypeHandler}
)

温馨提示:在查询语句中,记得是配置resultMap,这样才能数据库的bigint到java的Money的转换。

宁静致远!

joda-money的使用相关推荐

  1. joda time, jackson 与 scala 反射

    1. scala 反射,获得所有 field name 可以直接从 case class 获得 field 而不必创建实例 (get fields of a class without an inst ...

  2. joda jar日期处理类的学习

    转载:http://www.open-open.com/lib/view/open1348032952724.html 任何企业应用程序都需要处理时间问题.应用程序需要知道当前的时间点和下一个时间点, ...

  3. Java-小技巧-004-jdk时间,jdk8时间,joda,calendar,获取当前时间前一周、前一月、前一年的时间...

    1.推荐使用java8 localdate等 线程安全 支持较好 地址 2.joda 一.简述 查看SampleDateFormat源码,叙述有: * Date formats are not syn ...

  4. java joda 获取utc时间_java – 使用JodaTime以毫秒为单位的UTC到本地时间

    我试图使用Jodatime显示特定时间段内的交易. 我们的服务器要求开始日期和结束日期为UTC(这可能是显而易见的).因此,围绕它们的任何业务逻辑都使用DateTime对象,时区设置为DateTime ...

  5. mysql 无法存储joda time的datetime类型

    com.mysql.jdbc.MysqlDataTruncation: Data truncation: Incorrect datetime value: '\xAC\xED\x00\x05sr\x ...

  6. Java日期及时间库插件 -- Joda Time.

    转载自   Java日期及时间库插件 -- Joda Time. 来到新公司工作也有一个多月了, 陆陆续续做了一些简单的项目. 今天做一个新东西的时候发现了 Joda Time的这个东西, 因为以前用 ...

  7. java中算两个时间内的秒数_java – Joda Time – 计算两个日期之间的秒数会引发异常....

    我使用以下代码来计算两个日期之间的秒数差异: long secondsBetween = (Seconds.secondsBetween(new LocalDate("1901-01-01& ...

  8. Java的时间类库joda教程

    使用原生Java操作时间是比较麻烦的,比如说简单的创建一个指定时间 String time = "2018-7-3 11:00:00"; SimpleDateFormat sdf ...

  9. 新的时间处理工具joda

    时间处理是在项目中经常用到的,时间处理一共三个, new Date().getYear(); 该方式已经弃用,第二种: calendar,用的最多,但实际用起来并不方便,现在推荐的是第三种: 使用jo ...

  10. joda DateTimeFormatter simpleDateFormat

    转自:  https://www.ibm.com/developerworks/cn/java/j-jodatime.html 今天看到一个大牛说道simpleDateFormat不是线程安全的,要换 ...

最新文章

  1. hdfs yarn hbase pid文件被删除解决办法:修改hadoop-daemon.sh yarn-daemon.sh hbase-daemon.sh中PID_DIR存储路径
  2. RabbitMQ(七):常用方法说明 与 学习小结
  3. boost::hana::common用法的测试程序
  4. UltraEdit 使用操作
  5. typescript接口定义
  6. 计算机基础教育学,计算机基础教育教学改革与创新
  7. flowable实战(十二)flowable 核心表ACT_RU_EXECUTION 详解(初学者误解的一张表)
  8. LeetCode--20. 有效的括号(栈,删除法)
  9. java map 面试题_Java 面试系列:集合详解之 Map + 面试题
  10. python3 super_Python super()– Python 3 super()
  11. stm32中的ISP一键下载原理分析
  12. 墨盒注墨后出现断线或堵头的处理方法
  13. 基于TensorFlow的车牌号识别系统
  14. android 音效均衡器,App+1 | 不懂均衡器调校也能量身定制,无需折腾的 Android 音效提升工具...
  15. 【谷粒商城】k8s、devops集群篇(4/4)
  16. android实现刷卡功能,Android 实现银联刷卡机消费后手动签名的功能(示例代码)
  17. 牛客在线编程101-93 盛水最多的容器
  18. python中最小公倍数函数_Python 最小公倍数算法
  19. 破解Android app的过程记录
  20. Go语言框架Gin之4 安全认证

热门文章

  1. C指针之初始化(三)
  2. 【高项】- 采购管理论文
  3. ORA-01034和ORA-27101的解决方法
  4. CSDN博客运营团队2022年H2总结
  5. 发明了万维网的他,如今却想亲手推翻它
  6. 计算机word模块试题,计算机word考试试题1(附答案)
  7. php设置系统时区,php 设置时区
  8. 【jmeter-参数化】
  9. 计算机风筝设计图片教程,如何利用塑料袋制作风筝图解教程
  10. vector erase操作