mybatis复习-配置文件中别名typeAliases以及mappers的作用

首先看一个配置文件

  
  
<configuration>  
    <typeAliases>  
        
      <package name="com.how2java.pojo"/>  
    typeAliases>  

    <environments default="development">  
        <environment id="development">  
            <transactionManager type="JDBC"/>  
            <dataSource type="POOLED">  
                <property name="driver" value="com.mysql.jdbc.Driver"/>  
                <property name="url" value="jdbc:mysql://localhost:3306/how2java?characterEncoding=UTF-8"/>  
                <property name="username" value="root"/>  
                <property name="password" value="root"/>  
            dataSource>  
        environment>  
    environments>  
    <mappers>  
        <mapper resource="com/how2java/pojo/Category.xml"/>  
        <mapper class="com.how2java.mapper.CategoryMapper"/>    
    mappers>  
configuration>  

在上面的代码中我们可以发现在typealiases中,有一段代码被注释了:

type="zq.mybatis.test1.User" alias="_User"/><package name="com.how2java.pojo"/> 

typealiase具有两个属性,type和alias。
type中的属性值写的是对应实体的全类名。上面的例子则表示实体类“User”所在的包路径“zq.mybatis.test1.”两个部分组成。
alias的属性值则是取代type中的属性值,即可以用_User表示所对应的实体类是zq.mybatis.test1包下的User。

再看package,package具有属性name。顾名思义就是所在包的名字。

<package name="zq.mybatis.test1.User"/>

Mappers是用来在mybatis初始化的时候,告诉mybatis需要引入哪些Mapper映射文件。那什么又是Mapper映射文件呢?它是Java实体类与数据库对象之间的桥梁。在实际的使用过程中,一般一个Mapper文件对应一个数据库操作Dao接口。

在配置文件中,MyBatis加载mappers映射文件有三种方式:

1、通过resource加载映射文件

<mappers>    
        <mapper resource="sqlmap/User.xml"/> 
mappers>

2、通过mapper接口加载映射文件

<mappers>            
        
    
            <mapper class="cn.itcast.mybatis.mapper.UserMapper"/>            
mappers>

3、批量加载映射文件

<mappers>            
            
        <package name="cn.itcast.mybatis.mapper"/>   
mappers>

下面通过一段对应的映射文件来比较别名的使用情况:


<insert id="insertUser" parameterType="_User">
    insert into users(name,age) values(#{name},#{age})
insert>


<select id="getAllUser" resultType="_User">
    select * from users
select>

上面这段映射使用的是typealias定义出来的别名_User,当我们使用package时,并没有定义别名,如果我们还是使用这种方式的话,就会出现java.lang.ExceptionInInitializerError的错误。

Cause: java.lang.RuntimeException: Error parsing Mapper XML. Cause: org.apache.ibatis.builder.BuilderException: Error resolving class .

Cause: org.apache.ibatis.type.TypeException: Could not resolve type alias ‘_User’.

Cause: java.lang.ClassNotFoundException: Cannot find class: _User

"updateUser" parameterType="User">
        update users set name=#{name},age=#{age} where id=#{id}

<select id="getAllUser" resultType="User">
    select * from users
select>

使用package时候,我们指定了他的包名,那这个包下面的所有实体相当于已经被设置了别名,而这个别名实际上就是某一个实体自己的实体名。
比如返回类型是该包下的User,我们就直接写User就可以了。

你可能感兴趣的:(mybatis)