一、类型别名(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
三种内建的数据源类型(也就是 type=”[UNPOOLED|POOLED|JNDI]”)
UNPOOLED:只是每次被请求时打开和关闭连接
POOLED:利用“池”的概念将 JDBC 连接对象组织起来,避免了创建新的连接实例时所必需的初始化和认证时间
JNDI:这个数据源的实现是为了能在如 EJB 或应用服务器这类容器中使用
四、XML映射文件
1.SQL映射文件
cache
– 对给定命名空间的缓存配置。cache-ref
– 对其他命名空间缓存配置的引用。resultMap
– 是最复杂也是最强大的元素,用来描述如何从数据库结果集中来加载对象。sql
– 可被其他语句引用的可重用语句块。insert
– 映射插入语句update
– 映射更新语句delete
– 映射删除语句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>