MyBatis一个半自动化的持久化层框架。
•
MyBatis
是支持定制化
SQL
、存储过程以及高级映射的优秀的持久层框架。
•
MyBatis
避免了几乎所有的
JDBC
代码和手动设置参数以及获取结果集。
•
MyBatis
可以使用简单的
XML
或注解用于配置和原始映射,将接口和
Java
的
POJO
(
Plain Old Java Objects
,普通的
Java
对象)映射成数据库中的记录
.
Mapper的定义与扫描
@MapperScan配置扫描位置
@Mapper定义接口
映射的定义-一XML与注解
@Mapper
public interface CoffeeMapper {
@Insert("insert into t_coffee (name, price, create_time, update_time)"
+ "values (#{name}, #{price}, now(), now())")
@Options(useGeneratedKeys = true, keyProperty = "id")
int save(Coffee coffee);
@Select("select * from t_coffee where id = #{id}")
@Results({
@Result(id = true, column = "id", property = "id"),
@Result(column = "create_time", property = "createTime"),
// map-underscore-to-camel-case = true 可以实现一样的效果
// @Result(column = "update_time", property = "updateTime"),
})
Coffee findById(@Param("id") Long id);
}
处理金钱的组件
<dependency>
<groupId>org.joda</groupId>
<artifactId>joda-money</artifactId>
<version>LATEST</version>
</dependency>
/**
* 在 Money 与 Long 之间转换的 TypeHandler,处理 CNY 人民币
*/
public class MoneyTypeHandler extends BaseTypeHandler<Money> {
@Override
public void setNonNullParameter(PreparedStatement ps, int i, Money parameter, JdbcType jdbcType) throws SQLException {
ps.setLong(i, parameter.getAmountMinorLong());
}
@Override
public Money getNullableResult(ResultSet rs, String columnName) throws SQLException {
return parseMoney(rs.getLong(columnName));
}
@Override
public Money getNullableResult(ResultSet rs, int columnIndex) throws SQLException {
return parseMoney(rs.getLong(columnIndex));
}
@Override
public Money getNullableResult(CallableStatement cs, int columnIndex) throws SQLException {
return parseMoney(cs.getLong(columnIndex));
}
private Money parseMoney(Long value) {
return Money.of(CurrencyUnit.of("CNY"), value / 100.0);
}
}
mybatis.type-handlers-package=**.handler
mybatis.configuration.map-underscore-to-camel-case=true