这是我参与2022首次更文挑战的第17天,活动详情查看:2022首次更文挑战
学了很久的jpa,我们来学习mybatis,mybatis也是在jpa基础进行封装的,所以学习起来不会太困难,对于简单的查询我们可以使用jpa,但对于复杂的最好借助框架来帮我们解决,因为功能强大,使用方便。
那让我们来实操一下,本篇文章主要还是实操。
搞配置
配置我们可以参考mybatis的官方文档,因为我们需要处理金额,所以我们选择类型处理器(typeHandlers)来帮我们处理金额,这个处理器会从预置的处理语句(PreparedStatement)中的参数或从结果集中取出一个值,然后通过类型转换器帮我们转换成java类型,因此我们需要配置一个类型处理器。就像这样:
mybatis.type-handlers-package=xx.xx.xx
这个就是数据库字段和驼峰命名映射的开关,应该真简单,开启就行。
mybatis.configuration.map-underscore-to-camel-case=true
定义Mapper
@Insert("insert into t_coffee (name, price, create_time, update_time)"
+ "values (#{name}, #{price}, now(), now())")
@Options(useGeneratedKeys = true)
int save(Coffee coffee);
@Insert:注解代表insert语句,然后是一个save方法,然后根据引用进行值的映射,最后保存到数据库中。
@Select("select * from t_coffee where id = #{id}")
@Results({
@Result(id = true, column = "id", property = "id"),
@Result(column = "create_time", property = "createTime"),
})
Coffee findById(@Param("id") Long id);
@Select:注解表示查询语句,然后是一个根据主键进行查询的方法,也是根据参数映射数据库,捞数据返回。
然后,我们注入Mapper,使用这个@MapperScan扫描加载Mapper,我们还要在自定义的Mapper类上也添加一个Mapper,@MapperScan有个包名,把包名写入就行。
定义类型转换器
因为我们前面提到:需要进行类型转换,要把人民币转换成Money类型来使用,因此我们需要自定义类型转换器。
继承一个很便利的类 org.apache.ibatis.type.BaseTypeHandler, 并且可以(可选地)将它映射到一个 JDBC 类型。
public class MoneyTypeHandler extends BaseTypeHandler<Money>
搞代码并运行
新增代码
Coffee c = Coffee.builder().name("拿铁")
.price(Money.of(CurrencyUnit.of("CNY"), 20.0)).build();
int count = coffeeMapper.save(c);
查询代码
c = coffeeMapper.findById(c.getId());
ok,我们来运行一下看效果:
🆗,没问题。