MyBatis
MyBatis 是支持定制化 SQL、存储过程以及高级映射的优秀的持久层框架。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以对配置和原生 Map 使用简单的 XML 或注解,将接口和 POJO 映射成数据库中的记录。
MyBatis 单独开发实践
实体类:
public class User {
private int id;
private String name;
// set & get 方法
}
配置文件 conf.xml 中配置数据库连接信息:
<?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="/UserMapper.xml"/>
</mappers>
</configuration>
配置文件 UserMapper.xml 中配置 ORM:
<mapper namespace="UserMapper">
<select id="getUser" parameterType="int" resultType="User">
select * from user where id = #{id}
</select>
</mapper>
利用 MyBatis Generator 自动创建代码。
Spring MyBatis 开发实践
不在需要 conf.xml,而是直接在 Spring 中配置。
配置数据源 dataSource:
<bean id="dataSource" class="C3P0数据源">
...
</bean>
通过 dataSource 配置 SessionFactory:
SessionFactory 对应一个数据存储的概念。它是线程安全的,一般只会在启动的时候构建,单例模式。
<bean id="sessionFactory" class="SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="mapperLocations" value="/UserMapper.xml" />
</bean>
通过 sessionFactory 来访问数据库:
public class UserDAOImpl {
@Autowired // 自动装配
private SessionFactory sessionFactory;
public void saveUser(User user) {
// Session 表示与数据库进行交互的一个工作单元
// Session 轻量级非线程安全,因此线程间不能共享
SqlSession session = sessionFactory.openSession();
User user = session.selectOne("getUser", 123);
}
}