2. ibatis是什么

来源:互联网 发布:线切割锥度编程实例 编辑:程序博客网 时间:2024/05/21 23:34

通常称为数据映射器(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 postalCodeFROM ADDRESSWHERE 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 titleFROM EMPLOYEEWHERE 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 sqlMapConfigPUBLIC "-//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">SELECTADR_ID as id,ADR_DESCRIPTION as description,ADR_STREET as street,ADR_CITY as city,ADR_PROVINCE as province,ADR_POSTAL_CODE as postalCodeFROM ADDRESSWHERE ADR_ID = #id#</select>

0 0
原创粉丝点击