Mybatis(三):配置XML、ResultMap

一、类型别名(typeAliases)

1.区别名的方法有三种

//第一种方法:通过类名
<typeAliases>
    <typeAlias alias="Author" type="domain.blog.Author"/>
</typeAliases>
//第二种方法:通过包名
<typeAliases>
  <package name="domain.blog"/>
</typeAliases>
//第三种方法:注解
@Alias("author")
public class Author {
    ...
}

二、事物管理器

  • JDBC – 这个配置就是直接使用了 JDBC 的提交和回滚设置,它依赖于从数据源得到的连接来管理事务作用域。
  • MANAGED –让容器来管理事务的整个生命周期。 默认情况下它会关闭连接,然而一些容器并不希望这样,因此需要将 closeConnection 属性设置为 false 来阻止它默认的关闭行为。

三、数据源(dataSource

  1. 三种内建的数据源类型(也就是 type=”[UNPOOLED|POOLED|JNDI]”)

    UNPOOLED:只是每次被请求时打开和关闭连接

    POOLED:利用“池”的概念将 JDBC 连接对象组织起来,避免了创建新的连接实例时所必需的初始化和认证时间

    JNDI:这个数据源的实现是为了能在如 EJB 或应用服务器这类容器中使用

四、XML映射文件

1.SQL映射文件

  1. cache – 对给定命名空间的缓存配置。
  2. cache-ref – 对其他命名空间缓存配置的引用。
  3. resultMap – 是最复杂也是最强大的元素,用来描述如何从数据库结果集中来加载对象。
  4. sql – 可被其他语句引用的可重用语句块。
  5. insert – 映射插入语句
  6. update – 映射更新语句
  7. delete – 映射删除语句
  8. select – 映射查询语句

2.映射文件分析

  • select、insert、update、delete

    <select id="selectPerson" parameterType="int" resultType="hashmap">
      SELECT * FROM PERSON WHERE ID = #{id}
    </select>
    <insert id="insertAuthor">
      insert into Author (id,username,password,email,bio)
      values (#{id},#{username},#{password},#{email},#{bio})
    </insert>
    
    <update id="updateAuthor">
      update Author set
        username = #{username},
        password = #{password},
        email = #{email},
        bio = #{bio}
      where id = #{id}
    </update>
    
    <delete id="deleteAuthor">
      delete from Author where id = #{id}
    </delete>

其中,parameter代表传入的参数,resultType代表返回的类型,

  • ResultMap

解决的问题:属性名和字段名不一致

mybatis会根据查询的列名(会将列名转化为小写,数据库不区分大小写) , 去对应的实体类中查找相应列名的set方法设值 , 所以返回的结果可能为null【自动映射】

数据库字段:user{id,name,pwd}

实体类:user{id,name,password}

  • 方案一:为列名指定别名 , 别名和java实体类的属性名一致 .
<select id="selectUserById" resultType="User">    
    select id , name , pwd as password from user where id = #{id} 
</select>
  • 方案二:使用结果集映射->ResultMap 【推荐】

自动映射

<resultMap id="UserMap" type="User">
    <!-- id为主键 -->
    <id column="id" property="id"/>
    <!-- column是数据库表的列名 , property是对应实体类的属性名 -->
    <result column="name" property="name"/>
    <result column="pwd" property="password"/>
</resultMap>

<select id="selectUserById" resultType="map">
    select id , name , pwd from user where id = #{id}
</select>

手动映射:

<resultMap id="UserMap" type="User">
<!-- id为主键 -->
<id column="id" property="id"/>
<!-- column是数据库表的列名 , property是对应实体类的属性名 -->
<result column="name" property="name"/>
<result column="pwd" property="password"/>
</resultMap>

<select id="selectUserById" resultMap="UserMap">
select id , name , pwd from user where id = #{id}
</select>

猜你喜欢

转载自www.cnblogs.com/dreamzone/p/12330882.html