一.MyBatis系统的核心设置——XML配置文件 Configuration.xml
environment 元素体中包含对事务管理和连接池的环境配置。mappers元素是包含所有 mapper 映射器。
<?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>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="org/mybatis/example/BlogMapper.xml"/>
</mappers>
</configuration>
二.从XML中构建SqlSessionFactory,通过SqlSessionFactory打开一个数据库回话,同时开启事务
<span style="white-space:pre"> </span>public SqlSession getSqlSession() throws IOException{
// 通过配置文件获得数据库连接信息
Reader reader = Resources.getResourceAsReader("com/hdu/keynes/config/Configuration.xml");
// 通过配置文件信息构建一个SqlSessionFactory
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
// 通过SqlSessionFactory打开一个数据库回话,同时开启事务
SqlSession sqlSession = sqlSessionFactory.openSession(true);
return sqlSession;
}
三.用 SqlSession实例来直接执行已映射的SQL语句
SqlSession session = sqlSessionFactory.openSession();
try {
Blog blog = (Blog) session.selectOne("org.mybatis.example.BlogMapper.selectBlog", 101);
} finally {
session.close();
}
1. .xml文件写在了Configuration.xml的<mapper>标签中
<mapper namespace="org.mybatis.example.BlogMapper">
<select id="selectBlog" parameterType="int" <span class="atn" style="white-space: normal; font-family: Arial, Helvetica, sans-serif;"></span>resultType="hashmap"<span class="atv" style="white-space: normal; font-family: Arial, Helvetica, sans-serif;"></span>>
select * from Blog where id = #{id}
</select>
</mapper>
2. parameterType="int" 为简单的命名参数映射。参数类型被设置为“int” ,因此,这个参数可以被设置成任何内容。
如果你传递了一个复杂的对象,那么 MyBatis 的处理方式就会有一点不同。比如:
<insert id="insertUser" parameterType="User" resultType="hashmap">
insert into users (id, username, password)
values (#{id}, #{username}, #{password})
</insert>
如果 User 类型的参数对象传递到了语句中, username 和 password 属性将会被查找, id、 然后它们的值就被传递到预处理语句的参数中。
3. resultType="hashmap"。所有列被自动映射到HashMap的键上,这由resultType属性指定。这在很多情况下是有用的,但是HashMap不能很好描述一个领域模型。
package com.hdu.keynes;
public class User {
private int id;
private String username;
private String hashedPassword;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getHashedPassword() {
return hashedPassword;
}
public void setHashedPassword(String hashedPassword) {
this.hashedPassword = hashedPassword;
}
}
这样的一个JavaBean可以被映射到结果集,
<pre name="code" class="html"><typeAliases>
<span style="white-space:pre"> </span><typeAlias type="com.hdu.keynes.User" alias="User"/>
</typeAliases>
<select id="selectUsers" parameterType="int" resultType=User">
select id, username, hashedPassword
from some_table
where id = #{id}
</select>
typeAliases 类型别名是为 Java 类型命名一个短的名字。 它只和 XML 配置有关, 只用来减少类完全限定名的多余部分。使用这个配置, “User”可以任意用来替代“com.hdu.keynes.User”所使用的地方。