mybatis是优秀的数据库持久化框架,这里介绍它在configuration下的基本配置。
一、配置
1、properties ( 属性定义)
用于加载配置文件,同时也可以在内部定义属性,当时两者中有属性相同时,则配置文件中的优先级更好,
另外,如果在方法中传了属性,则方法中的属性优先级最高:
如
resource="properties/env.properties">
name="org.apache.ibatis.parsing.PropertyParser.enable-default-value" value="true"/>
2、settings (运行参数设置)
用于设置mybatis在运行中的各种参数,这里介绍几种常用的:
a) mapUnderscoreToCamelCase ,值可为true或false,默认值为false, 用于设置在mysql字段(下划线模式)与java字段(驼峰模式)的自动映射;
b)useActualParamName ,值可为true或false,默认值为false, 允许自动生成主键,若开启,则调用后java实例内有会用自动生成的值;
c)lazyLoadingEnabled ,值可为true或false,默认值为false, 设置关联对象延迟加载;
d)aggressiveLazyLoading,值可为true或false,默认值为false, 设置对象内属性是否按需加载;、
如
name="lazyLoadingEnabled" value="true" /> name="aggressiveLazyLoading" value="false" /> name="mapUnderscoreToCamelCase" value="true"/> name="useGeneratedKeys" value="true" />
3、typeAliases (bean别名定义)
用于设置java对象的别名,设置方式有:
a)使用typeAlias对每个对象单独设置;
b)使用package对整个包设置,默认bean对应的别名是首字母小写,如果在bean定义时使用了@Alias作别名设置,如@Alias("stu"),则使用alise定义的别名。
如:
type="bean.Stu" alias="stu" /> name="bean" />
4、typeHandlers (类型处理器)
用于设置mysql字段到java自定义类型的转换,如可用于枚举类型的转换,使用方式是继承BaseTypeHandler方法,
实现内部定义的四个抽象方法,同时可在实现类上加上mysql字段类型(@MappedJdbcTypes)与java自定义类型(@MappedTypes)映射的注解。
最后将定义好的typeHandler加到typeHandlers属性,加入方式有两种:
a)使用typeHandler对每个单个类型处理器注册;
b)使用package对整个包设置;
类型处理器定义如
@MappedTypes(GenderType.class) @MappedJdbcTypes({JdbcType.INTEGER,JdbcType.BIGINT,JdbcType.SMALLINT}) public class GenderTypeHandler extends BaseTypeHandler类型处理器注册如{ @Override public void setNonNullParameter(PreparedStatement ps, int i, GenderType parameter, JdbcType jdbcType) throws SQLException { ps.setInt(i,null==parameter ? null : parameter.getId()); } @Override public GenderType getNullableResult(ResultSet rs, String columnName) throws SQLException { return GenderType.getInstance(rs.getInt(columnName)); } @Override public GenderType getNullableResult(ResultSet rs, int columnIndex) throws SQLException { return GenderType.getInstance(rs.getInt(columnIndex)); } @Override public GenderType getNullableResult(CallableStatement cs, int columnIndex) throws SQLException { return GenderType.getInstance(cs.getInt(columnIndex)); } }
5、objectFactory (对象工厂,略,后面单独介绍)handler="typeHandler.GenderTypeHandler" /> name="typeHandler" />
6、plugins(插件,略,后面单独介绍)
7、environments (数据库运行环境)
用于设置数据库运行环境,包括:
a)使用default定义默认的数据源
b)transactionManager 事务处理器,类型有JDBC(使用JDBC进行事务的提交和回滚)和MANAGE(事务的处理交给所在容器处理,自已不处理);
c)dataSource中定义数据库地址、用户名、密码等,类型有UNPOOLED(每次请示单独打一个连接,处理完后关系)、
POOLED(使用类似于线程池的处理方式,打开多个连接复用)、JNDI(可在外部设置数据源);
如
default="development">
id="development">
type="JDBC"/>
type="POOLED">
name="driver" value="${driver}"/>
name="url" value="${url}"/>
name="username" value="${username}"/>
name="password" value="${password}"/>
name="driver.encoding" value="utf-8" />
8、mappers (sql映射文件,即映射器)
用于注册定义好的sql文件,方式有:
a)使用resource进行类路径下的sql文件注册;
b)使用url进行文件路径下的sql文件注册;
c)使用class进行sql定义对应类的注册;
c)使用package进行sql定义对应类包的批量注册;
如
resource="mapper/StuMapper.xml"/> url="file:///E:/mybatisDemo/src/main/resources/mapper/StuMapper.xml" /> class="mapper.StuMapper"/> name="mapper" />
二、实例
1、添加maven依赖
org.mybatis mybatis 3.4.4 mysql mysql-connector-java 5.1.34 commons-dbcp commons-dbcp 1.4 commons-pool commons-pool 1.6 com.github.pagehelper pagehelper 4.0.3
2、代码实例
完整xml形式的configuration设置:
xml version="1.0" encoding="UTF-8" ?> configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">main方法调用及完整java形式的configuration设置:resource="properties/env.properties"> name="org.apache.ibatis.parsing.PropertyParser.enable-default-value" value="true"/> name="lazyLoadingEnabled" value="true" /> name="aggressiveLazyLoading" value="false" /> name="mapUnderscoreToCamelCase" value="true"/> name="useGeneratedKeys" value="true" /> name="bean" /> name="typeHandler" /> interceptor="com.github.pagehelper.PageHelper"> name="dialect" value="mysql" /> name="offsetAsPageNum" value="true" /> name="rowBoundsWithCount" value="true" /> default="development"> id="development"> type="JDBC"/> type="POOLED"> name="driver" value="${driver}"/> name="url" value="${url}"/> name="username" value="${username}"/> name="password" value="${password}"/> name="driver.encoding" value="utf-8" /> name="mapper" />
public class MybatisMain { public static void main(String[] args) throws Exception { SqlSessionFactory factory = getSqlSessionFactoryFromXml(); //xml方式读取配置 // SqlSessionFactory factory = getSqlSessionFactoryFromJava(); //java方式读取配置 SqlSession session = factory.openSession(ExecutorType.REUSE,true); StuMapper stuMapper = session.getMapper(StuMapper.class); Stu stu = stuMapper.selectStu(1); System.out.println(stu.getName()); session.close(); } static SqlSessionFactory getSqlSessionFactoryFromXml() throws Exception { InputStream inputStream = Resources.getResourceAsStream("mybatis-config-paper.xml"); SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(inputStream); return factory; } static SqlSessionFactory getSqlSessionFactoryFromJava() throws Exception { BasicDataSource dataSource = new BasicDataSource(); dataSource.setDriverClassName("com.mysql.jdbc.Driver"); dataSource.setUrl("jdbc:mysql://localhost:3306/school"); dataSource.setUsername("admin"); dataSource.setPassword("123456"); dataSource.setInitialSize(5); dataSource.setMaxActive(10); dataSource.setMaxIdle(3); dataSource.setMaxWait(10000); TransactionFactory transactionFactory = new JdbcTransactionFactory(); Environment env = new Environment("default",transactionFactory,dataSource); Configuration config = new Configuration(env); config.setMapUnderscoreToCamelCase(true); config.setUseGeneratedKeys(true); config.setLazyLoadingEnabled(true); config.setAggressiveLazyLoading(true); config.getTypeAliasRegistry().registerAliases("bean"); config.getTypeHandlerRegistry().register("typeHandler"); config.addInterceptor(new PageHelper()); config.addMappers("mapper"); SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(config); return factory; } }