- 依赖: iBATIS-2.3.4.726.jar(iBatis框架),mysql-connector-java-5.1.25-bin.jar(MySQL的JDBC驱动包)
- JDBC链接的属性文件: jdbc.properties (名字任取)
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/
ACCOUNT(数据库)
- iBatis配置文件:SqlMapConfig.xml (名字任取)
<?xml version="1.0" encoding="UTF-8"?>
PUBLIC "-//ibatis.apache.org//DTD SQL Map Config 2.0//EN"
"http://ibatis.apache.org/dtd/sql-map-config-2.dtd">
<properties resource="jdbc.properties"/> <!-- 注意,properties source里说明属性来源文件 -->
<transactionManager type="JDBC">
<dataSource type="SIMPLE">
<property name="JDBC.Driver" value="${driver}"/> <!-- 注意,对应jdbc.properties里面的四个属性 -->
<property name="JDBC.ConnectionURL" value="${url}"/>
<property name="JDBC.Username" value="${username}"/>
<property name="JDBC.Password" value="${password}"/>
<!-- 配置Ibatis要使用的SqlMap文件信息 -->
<sqlMap resource="Account.xml"/> <!-- SqlMap文件信息 -->
- 实体映射文件:Account.xml (名字任取,SqlMapConfig.xml里面要能对应上)
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sqlMapConfig
PUBLIC "-//ibatis.apache.org//DTD SQL Map Config 2.0//EN"
"http://ibatis.apache.org/dtd/sql-map-config-2.dtd">
<sqlMap namespace="Account">
<!-- SQL字段与类属性映射关系,省略在SQL语句中用as转换字段名 -->
<resultMap id="AccountResult" class="Account">
<result property="id" column="ACC_ID"/>
<result property="firstName" column="ACC_FIRST_NAME"/>
<result property="lastName" column="ACC_LAST_NAME"/>
<result property="emailAddress" column="ACC_EMAIL"/>
</resultMap>
<select id="selectAccountById" parameterClass="int" resultClass="Account">
SELECT
ACC_ID,
ACC_FIRST_NAME,
ACC_LAST_NAME,
ACC_EMAIL
FROM ACCOUNT
WHERE ACC_ID=
#id#
</select>
<!-- 使用外联参数映射是用?占位符 -->
<insert id="insertAccount1" parameterMap="AccountParameter">
INSERT INTO ACCOUNT (ACC_ID, ACC_FIRST_NAME, ACC_LAST_NAME, ACC_EMAIL) VALUES (?, ?, ?, ?)
</insert>
<!-- 更新语句返回受影响行数 -->
<update id="updateAccount" parameterClass="Account">
UPDATE ACCOUNT SET
ACC_FIRST_NAME=#firstName#
ACC_LAST_NAME=#lastName#
ACC_EMAIL=#emaiAddress#
WHERE
ACC_ID=#id#
</update>
<!-- 删除语句返回受影响行数 -->
<delete id="deleteAccountById" parameterClass="int">
DELETE FROM ACCOUNT WHERE ACC_ID=#id#
</delete>
</sqlMap>
一定要为自己的类写默认构造函数,否则select语句没法将数据库返回的relations反射成为objects。
iBatis 2.3不支持在ResultMap中加入constructor标签,它是反射调用默认构造函数,然后利用setter为fields赋值。