主键从0开始 -->
<![CDATA[
create memory table test(
id int GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
name varchar(100))
]]>
</sql>
<sql id="dropTable">
<![CDATA[ drop table test ]]>
</sql>
<insert id="insert" parameterType="cn.javass.spring.chapter7.UserModel">
<![CDATA[ insert into test(name) values (#{myName}) ]]>
<selectKey resultType="int" keyProperty="id" order="AFTER">
<!-- 获取hsqldb插入的主键 -->
call identity();
<!-- mysql使用select last_insert_id();获取插入的主键 -->
</selectKey>
</insert>
<select id="countAll" resultType="java.lang.Integer">
<![CDATA[ select count(*) from test ]]>
</select>
</mapper>
从映射定义中可以看出MyBatis与iBATIS2.3.4有如下不同:
- http://ibatis.apache.org/dtd/sql-map-2.dtd 废弃,而使用http://mybatis.org/dtd/mybatis-3-mapper.dtd。
- <sqlMap>废弃,而使用<mapper>标签;
- <statement>废弃了,而使用<sql>标签;
- parameterClass属性废弃,而使用parameterType属性;
- resultClass属性废弃,而使用resultType属性;
- #myName#方式指定命名参数废弃,而使用#{myName}方式。
3、 MyBatis配置文件(chapter8/sql-map-config-mybatis.xml)定义:
java代码:
<?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>
<settings>
<setting name="cacheEnabled" value="false"/>
</settings>
<mappers>
<mapper resource="chapter8/sqlmaps/UserSQL-mybatis.xml"/>
</mappers>
</configuration>
从配置定义中可以看出MyBatis与iBATIS2.3.4有如下不同:
4、 定义Dao接口,此处使用cn.javass.spring.chapter7.dao. IUserDao:
5、 定义Dao接口实现,此处是MyBatis实现:
java代码:
package cn.javass.spring.chapter8.dao.mybatis;
//省略import
public class UserMybatisDaoImpl extends SqlSessionDaoSupport
implements IUserDao {
@Override
public void save(UserModel model) {
getSqlSession().insert("UserSQL.insert", model);
}
@Override
public int countAll() {
return (Integer) getSqlSession().selectOne("UserSQL.countAll");
}
}
和Ibatis集成方式不同的有如下地方:
- 使用SqlSessionDaoSupport来支持一致性的DAO访问,该类位于org.mybatis.spring.support包中,非Spring提供;
- 使用getSqlSession方法获取SqlSessionTemplate,在较早版本中是getSqlSessionTemplate方法名,不知为什么改成getSqlSession方法名,因此这个地方在使用时需要注意。
- SqlSessionTemplate是SqlSession接口的实现,并且自动享受Spring管理事务好处,因此从此处可以推断出为什么把获取模板类的方法名改为getSqlSession而不是getSqlSessionTemplate。
6、进行资源配置,使用resources/chapter7/applicationContext-resources.xml:
7、dao定义配置,在chapter8/applicationContext-mybatis.xml中添加如下配置:
java代码:
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property n