2. ibatis是什么

通常称为数据映射器(data mapper),ibatis把SQL语句的参数与结果映射为类。

ibatis在类和数据库表之间建立一个额外的间接层。(SQL)


1. 映射SQL语句



<select id="getAddress"
 parameterClass="int"
 resultClass="Address">
SELECT
 ADR_ID as id,
 ADR_DESCRIPTION as description,
 ADR_STREET as street,
 ADR_CITY as city,
 ADR_PROVINCE as province,
 ADR_POSTAL_CODE as postalCode
FROM ADDRESS
WHERE ADR_ID = #id#
</select>
执行时需要下列语句:
Address address = (Address) sqlMap.queryForObject("getAddress",new Integer(5));


2. ibatis如何工作

使用JDBC

	public Employee getEmployee(int id) throws SQLException {
		Employee employee = null;
		String sql = "SELECT * FROM EMPLOYEE " + "WHERE EMPLOYEE_NUMBER = ?";
		Connection conn = null;
		PreparedStatement ps = null;
		ResultSet rs = null;
		try {
			conn = dataSource.getConnection();
			ps = conn.prepareStatement(sql);
			ps.setInt(1, id);
			rs = ps.executeQuery();
			employee = null;
			while (rs.next()) {
				employee = new Employee();
				employee.setId(rs.getInt("ID"));
				employee.setEmployeeNumber(rs.getInt("EMPLOYEE_NUMBER"));
				employee.setFirstName(rs.getString("FIRST_NAME"));
				employee.setLastName(rs.getString("LAST_NAME"));
				employee.setTitle(rs.getString("TITLE"));
			}
		} finally {
			try {
				if (rs != null)
					rs.close();
			} finally {
				try {
					if (ps != null)
						ps.close();
				} finally {
					if (conn != null)
						conn.close();
				}
			}
		}
		return employee;
	}

使用ibatis运行相同的SQL语句时:
<select id="getEmployee"
  parameterClass="java.lang.Integer"
  resultClass="Employee">
SELECT ID as id,
 EMPLOYEE_NUMBER as employeeNumber,
 FIRST_NAME as firstName,
 LAST_NAME as lastName,
 TITLE as title
FROM EMPLOYEE
WHERE EMPLOYEE_NUMBER = #empNum#
</select>

2.1 ibatis与小型、简单系统

ibatis非常适合于小型应用程序:
  1. ibatis本身就很小并简单。
  2. ibatis不会对应用程序或者数据库的现有设计强加任何影响
  3. ibatis同样非常适合于大型系统,甚至可以扩展以满足企业级应用程序的需要

2.2 ibatis与大型、企业级系统

  1. ibatis没有对数据库模型或对象模型的设计做任何假设。
  2. ibatis的某些特征使得它能够非常高效的处理大型数据集。
  3. ibatis允许使用多种方式建立对象到数据库的映射关系

3.为何使用ibatis

3.1 简单性 

3.2 生产效率

3.3 性能

3.4 关注点分离

3.5 明确分工

3.6 可移植性:java、.NET及其他

3.7 开源和诚实

4. 何时不该使用ibatis

4.1 当永远拥有完全控制权时

可使用O/RM,提高生产效率

4.2 当应用程序需要完全动态地SQL时

最好使用原始的JDBC

4.3 当没有使用关系数据库时

jdbc,或I/O API

4.4 当ibatis不起作用时


5 用ibatis创建应用程序


输出目标:
java -classpath <…> Main
Selected 2 records.
{USERNAME=LMEADORS, PASSSWORD=PICKLE, USERID=1, GROUPNAME=EMPLOYEE}
{USERNAME=JDOE, PASSSWORD=TEST, USERID=2, GROUPNAME=EMPLOYEE}

5.1 数据库(mysql)

#
# Table structure for table 'user'
#
CREATE TABLE USER_ACCOUNT (
  USERID INT(3) NOT NULL AUTO_INCREMENT,
  USERNAME VARCHAR(10) NOT NULL,
  PASSSWORD VARCHAR(30) NOT NULL,
  GROUPNAME VARCHAR(10),
  PRIMARY KEY (USERID)
);
#
# Data for table 'user'
#
INSERT INTO USER_ACCOUNT (USERNAME, PASSSWORD, GROUPNAME)
<span style="white-space:pre">	</span>VALUES ('LMEADORS', 'PICKLE', 'EMPLOYEE');
INSERT INTO USER_ACCOUNT (USERNAME, PASSSWORD, GROUPNAME)
<span style="white-space:pre">	</span>VALUES ('JDOE', 'TEST', 'EMPLOYEE');
COMMIT;

5.2 编写代码

import com.ibatis.sqlmap.client.*;
import com.ibatis.common.resources.Resources;
import java.io.Reader;
import java.util.List;

public class Main {
	public static void main(String arg[]) throws Exception {
		String resource = "SqlMapConfig.xml";
		Reader reader = Resources.getResourceAsReader(resource);
		SqlMapClient sqlMap = SqlMapClientBuilder.buildSqlMapClient(reader);
		List list = sqlMap.queryForList("getAllUsers", "EMPLOYEE");
		System.out.println("Selected " + list.size() + " records.");
		for (int i = 0; i < list.size(); i++) {
			System.out.println(list.get(i));
		}
	}
}

5.3 配置ibatis

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">
<sqlMapConfig>
	<transactionManager type="JDBC">
		<dataSource type="SIMPLE">
			<property name="JDBC.Driver" value="com.mysql.jdbc.Driver" />
			<property name="JDBC.ConnectionURL" value="jdbc:mysql://localhost/test" />
			<property name="JDBC.Username" value="root" />
			<property name="JDBC.Password" value="blah" />
		</dataSource>
	</transactionManager>
	<sqlMap resource="SqlMap.xml" />
</sqlMapConfig>

映射文件:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE sqlMap PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN"
"http://ibatis.apache.org/dtd/sql-map-2.dtd">
<sqlMap>
	<select id="getAllUsers" parameterClass="string" resultClass="hashmap">
		SELECT * FROM USER_ACCOUNT WHERE GROUPNAME = #groupName#
	</select>
</sqlMap>


5.4 构建应用程序


javac -classpath <your-path>ibatis-common-2.jar;
<your-path>ibatis-sqlmap-2.jar Main.java

5.5 运行应用程序

java -classpath <your-path>;mysql-connector.jar;commons-logging.jar;
ibatis-common-2.jar;ibatis-sqlmap-2.jar;.
Main


<select id="getAddress"
parameterClass="int"
resultClass="Address">
SELECT
ADR_ID as id,
ADR_DESCRIPTION as description,
ADR_STREET as street,
ADR_CITY as city,
ADR_PROVINCE as province,
ADR_POSTAL_CODE as postalCode
FROM ADDRESS
WHERE ADR_ID = #id#
</select>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值