SqlSessionFactory sqlSessionFactory = getSqlSessionFactory();
SqlSession openSession = sqlSessionFactory.openSession();
EmployeeMapper mapper = openSession.getMapper(EmployeeMapper.class);
SqlSession 的实例不是线程安全的,因此是不能被共享的。
SqlSession每次使用完成后需要正确关闭,这个关闭操作是必须的
SqlSession可以直接调用方法的id进行数据库操作,推荐使用SqlSession获取到Dao接口的代理类,执行代理对象的方法,可以更安全的进行类型检查操作.
官方配置文档说明
http://www.mybatis.org/mybatis-3/zh/configuration.html
properties属性
1 在properties 元素体内指定的属性首先被读取。
2 然后根据properties 元素中的resource 属性读取类路径下属性文件或根据url 属性指定的路径读取属性文件,并覆盖已读取的同名属性。
3 最后读取作为方法参数传递的属性,并覆盖已读取的同名属性。
引入资源:
然后就可以使用公用的数据库配置:
这是MyBatis 中极为重要的调整设置,它们会改变MyBatis 的运行时行为。
autoMappingBehavior:开启自动映射的功能,默认是PARTIAL,null表示取消自动映射。
mapUnderscoreToCamelCase:开启自动驼峰命名规则映射功能。
类型别名是为Java 类型设置一个短的名字,我们可以方便引用这个类。
@Alias("emp")
public class Employee {
}
类型别名
MyBatis已经为许多常见的Java 类型内建了相应的类型别名,它们都是大小写不敏感的。
无论是MyBatis 在预处理语句(PreparedStatement)中设置一个参数时,还是从结果集中取出一个值时,都会用类型处理器将获取的值以合适的方式转换成Java 类型。
自定义类型处理器
1、实现org.apache.ibatis.type.TypeHandler接口或者继承org.apache.ibatis.type.BaseTypeHandler
2、指定其映射某个JDBC类型(可选操作)
3、在mybatis全局配置文件中注册
public class EmpStatusTypeHandler implements TypeHandler {
/**
* 定义当前数据如何保存到数据库中
*/
@Override
public void setParameter(PreparedStatement ps, int i, EmpStatus parameter,
JdbcType jdbcType) throws SQLException {
ps.setString(i, parameter.getCode().toString());
}
@Override
public EmpStatus getResult(ResultSet rs, String columnName)
throws SQLException {
// TODO Auto-generated method stub
//需要根据从数据库中拿到的枚举的状态码返回一个枚举对象
int code = rs.getInt(columnName);
EmpStatus status = EmpStatus.getEmpStatusByCode(code);
return status;
}
@Override
public EmpStatus getResult(ResultSet rs, int columnIndex)
throws SQLException {
// TODO Auto-generated method stub
int code = rs.getInt(columnIndex);
EmpStatus status = EmpStatus.getEmpStatusByCode(code);
return status;
}
@Override
public EmpStatus getResult(CallableStatement cs, int columnIndex)
throws SQLException {
// TODO Auto-generated method stub
int code = cs.getInt(columnIndex);
EmpStatus status = EmpStatus.getEmpStatusByCode(code);
return status;
}
}