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

首先看一个配置文件

<?xml version="1.0" encoding="UTF-8" ?>  
<!DOCTYPE configuration  
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"  
"http://mybatis.org/dtd/mybatis-3-config.dtd">  
<configuration>  
    <typeAliases>  
      <!--  <typeAlias type="zq.mybatis.test1.User" alias="_User"/> -->  
      <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中,有一段代码被注释了:

<typeAlias 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接口加载映射文件 -->    
    <!--     遵循规范:需要将mapper接口类名与xml文件映射名称保持一致,且在一个目录中,规范的前提是:使用的是mapper代理的方法 -->
            <mapper class="cn.itcast.mybatis.mapper.UserMapper"/>            
</mappers>

3、批量加载映射文件

<mappers>            
        <!-- 批量加载     
            指定接口的包名称,自动扫描包下的所有mapper接口进行加载    
        -->    
        <package name="cn.itcast.mybatis.mapper"/>   
</mappers>

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

<!-- 插入对象是的传入参数为整个实体类,相对应的参数要与实体中属性相同 -->
<insert id="insertUser" parameterType="_User">
    insert into users(name,age) values(#{name},#{age})
</insert>

<!-- 查询所有结果时,因为是将一个一个的USer实体添加到list中,
   所以在指定其返回结果参数只需要指定为返回实体就可以了 -->
<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

<update id="updateUser" parameterType="User">
        update users set name=#{name},age=#{age} where id=#{id}
</update>
<select id="getAllUser" resultType="User">
    select * from users
</select>

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

  • 5
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值