一、全局配置文件补充说明
1、类型的别名
Mybatis 全局配置文件:
1 2 3 4 5
| <typeAliases> <package name="com.atguigu.mybatis.entity"/> </typeAliases>
|
Mapper 配置文件:
1 2 3 4 5
| <select id="selectEmployeeById" resultType="Employee"> select emp_id,emp_name,emp_salary,emp_gender,emp_age from t_emp where emp_id=#{empId} </select>
|
2、自定义类型转换器
① 创建自定义类型转换器类
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
| @MappedTypes(value = Address.class) @MappedJdbcTypes(JdbcType.CHAR) public class AddressTypeHandler extends BaseTypeHandler<Address> { @Override public void setNonNullParameter(PreparedStatement preparedStatement, int i, Address address, JdbcType jdbcType) throws SQLException {
}
@Override public Address getNullableResult(ResultSet resultSet, String columnName) throws SQLException {
String addressOriginalValue = resultSet.getString(columnName);
if (addressOriginalValue == null || "".equals(addressOriginalValue)) return null;
String[] split = addressOriginalValue.split(","); String province = split[0]; String city = split[1]; String street = split[2];
Address address = new Address(); address.setCity(city); address.setProvince(province); address.setStreet(street);
return address; }
@Override public Address getNullableResult(ResultSet resultSet, int i) throws SQLException { return null; }
@Override public Address getNullableResult(CallableStatement callableStatement, int i) throws SQLException { return null; } }
|
② 注册自定义类型转换器
在 Mybatis 全局配置文件中配置:
1 2 3 4
| <typeHandlers> <typeHandler jdbcType="CHAR" javaType="com.atguigu.mybatis.entity.Address" handler="com.atguigu.mybatis.type.handler.AddressTypeHandler"/> </typeHandlers>
|
3、mapper 映射文件注册
Mybatis 允许在指定 Mapper 映射文件时,只指定其所在的包:
1 2 3
| <mappers> <package name="com.atguigu.mybatis.dao"/> </mappers>
|
但是,要求是:
- Mapper 接口和 Mapper 配置文件名称一致
- Mapper 配置文件放在 Mapper 接口所在的包内
二、Mybatis 底层对 JDBC 的调用
org.apache.ibatis.executor.statement.PreparedStatementHandler 类:
查找上面目标时,Debug 查看源码的切入点是:
org.apache.ibatis.session.defaults.DefaultSqlSession 类的 update()方法