四.别名 typealiases
实体类的全限定名称过长,需要使用一个短的名称来代替它,可以在Mybatis整个上下文生命周期中使用。 可以分为 系统定义别名和自定义别名,其中 别名是不区分大小写的, 别名User 与别名user 是同样的意思。 一个typealiases 的实体是在解析配置文件的时候生成的,长期保存在Configuration 对象之中,当我们使用它时,再把它拿出来,而不是每一次使用时,都重新生成。
四.一 MyBatis 系统定义别名
支持数组的,只要加个 [] 就可以,如 byte[] 为_byte[] 。
系统定义的别名,在 org.apache.ibatis.type.TypeAliasRegistry 类中进行定义。
public TypeAliasRegistry() { registerAlias("string", String.class); registerAlias("byte", Byte.class); registerAlias("long", Long.class); registerAlias("short", Short.class); registerAlias("int", Integer.class); registerAlias("integer", Integer.class); registerAlias("double", Double.class); registerAlias("float", Float.class); registerAlias("boolean", Boolean.class); registerAlias("byte[]", Byte[].class); registerAlias("long[]", Long[].class); registerAlias("short[]", Short[].class); registerAlias("int[]", Integer[].class); registerAlias("integer[]", Integer[].class); registerAlias("double[]", Double[].class); registerAlias("float[]", Float[].class); registerAlias("boolean[]", Boolean[].class); registerAlias("_byte", Byte.TYPE); registerAlias("_long", Long.TYPE); registerAlias("_short", Short.TYPE); registerAlias("_int", Integer.TYPE); registerAlias("_integer", Integer.TYPE); registerAlias("_double", Double.TYPE); registerAlias("_float", Float.TYPE); registerAlias("_boolean", Boolean.TYPE); registerAlias("_byte[]", byte[].class); registerAlias("_long[]", long[].class); registerAlias("_short[]", short[].class); registerAlias("_int[]", int[].class); registerAlias("_integer[]", int[].class); registerAlias("_double[]", double[].class); registerAlias("_float[]", float[].class); registerAlias("_boolean[]", boolean[].class); registerAlias("date", Date.class); registerAlias("decimal", BigDecimal.class); registerAlias("bigdecimal", BigDecimal.class); registerAlias("biginteger", BigInteger.class); registerAlias("object", Object.class); registerAlias("date[]", Date[].class); registerAlias("decimal[]", BigDecimal[].class); registerAlias("bigdecimal[]", BigDecimal[].class); registerAlias("biginteger[]", BigInteger[].class); registerAlias("object[]", Object[].class); registerAlias("map", Map.class); registerAlias("hashmap", HashMap.class); registerAlias("list", List.class); registerAlias("arraylist", ArrayList.class); registerAlias("collection", Collection.class); registerAlias("iterator", Iterator.class); registerAlias("ResultSet", ResultSet.class); }
上面是Mybatis 系统已经定义好的,不需要我们重复定义,直接使用即可。
但常常使用开发都自定义的别名。
四.二 自定义别名
如 我们前面所使用的 com.yjl.pojo.User 类,当多次使用时,如 insert ,update 和select 时,不必要重复性定义,只定义别名即可 user .
<select id="getById" parameterType="int" resultType="user"> select * from user where id=#{id} </select>
只需要写成 resultType=“user” 即可,不需要 resultType=“com.yjl.pojo.User”
四.三 XML 形式定义别名
- 可以单个类定义
<!-- 配置别名 --> <typeAliases> <!--type指类的全限定名称, alias 为 别名--> <typeAlias type="com.yjl.pojo.User" alias="user"/> </typeAliases>
- 如果类过多的话,那么可以用包。
<!-- 配置别名 --> <typeAliases> <!-- 定义包的形式 ,可以多个--> <package name="com.yjl.pojo"/> <package name="com.yjl.pojo2"/> </typeAliases>
四.四 注解定义 @Alias
@Alias(value ="user") public class User { }
这样就可以直接使用 user 别名了。
五. 环境设置 environments
<!-- 开发环境 development 环境为开发环境 --> <environments default="development"> <environment id="development"> <!-- 事务管理 --> <transactionManager type="JDBC"></transactionManager> <!-- 数据源 ,为pooled 连接池 --> <dataSource type="pooled"> <!-- 定义数据库连接属性--> <property name="driver" value="${jdbc.driver}"/> <property name="url" value="${jdbc.url}"/> <property name="username" value="${jdbc.username}"/> <property name="password" value="${jdbc.password}"/> </dataSource> </environment> </environments>
环境 default 默认为development 开发环境。 其中, id 为默认的开发环境。
transactionManager 事务管理的类型有三种:
1.jdbc 使用jdbc的形式管理事务,在独立编码,不引用其他数据库框架时使用
2.managed 采用容器方式管理事务,在JNDI 中常常使用。
3.自定义 使用者自己定义,常常用于特殊的环境中。
datasource 的类型有四种:
1.pooled 连接池数据库
2.unpooled 非连接池数据库
3.JNDI JNDI 数据源
4.自定义数据源
六 引入映射文件 mapper
六.一 文件路径方式
<mappers> <!-- 引入文件资源,可依次写多个--> <mapper resource="com/yjl/mapper/UserMapper.xml"/> </mappers>
采用的是 文件路径 / 的方式。
六.二 包名引入 (多个时)
<mappers> <!-- 包名引入,用. --> <package name="com.yjl.mapper"/> </mappers>
六.三 类注册引入
<mappers> <!--类注册引入,用class属性 --> <mapper class="com.yjl.mapper.UserMapper"/> </mappers>
建议使用 package, 可引入包。
谢谢!!!