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

······-config.xml配置文件

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config3.0//EN"
"http://mybatis.org//dtd/mybatis-3-config.dtd">
<configuration>
	<typeAliases>  
    	 <typeAlias type="cn.smbms.pojo.User" alias="_User"/> <!-- type实体类包路径被alias替代为_User -->
     	 <package name="cn.smbms.dao.user"/>  <!-- package具有属性name,顾名思义就是所在包的名字。 -->
    </typeAliases>
	<!-- 配置mybatis 多套运行环境 -->
	<environments default="development">
		<environment id="development">
			<!-- 配置事务管理,采用JDBC的事务管理 -->
			<transactionManager type="JDBC"></transactionManager>
				<!-- POOLED:mybatis 自带的数据源,JNDI;基于tomcat的数据源 -->
				<dataSource type="POOLED">
					<property name="driver" value="${driver}"/>
					<property name="url" value="${url}"/>
					<property name="username" value="${user}"/>
					<property name="password" value="${password}"/>
				</dataSource>
		</environment>
	</environments>
	<!-- 将mapper文件加入配置文件中 -->
	<mappers>
		<mapper resource="cn/smbms/dao/user/UserMapper.xml"/> 
 		<mapper class="cn/smbms/dao/user/UserMapper"/>    
	</mappers>
</configuration>

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

<typeAlias type="cn.smbms.pojo.User" alias="_User"/> 

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

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

<package name="cn.smbms.dao.user"/>

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

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

1.通过resource加载映射文件
<mappers>    
      <mapper resource="sqlmap/User.xml"/> 
</mappers>
2.通过resource加载映射文件
<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命名。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值