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非常适合于小型应用程序:
- ibatis本身就很小并简单。
- ibatis不会对应用程序或者数据库的现有设计强加任何影响
- ibatis同样非常适合于大型系统,甚至可以扩展以满足企业级应用程序的需要
2.2 ibatis与大型、企业级系统
- ibatis没有对数据库模型或对象模型的设计做任何假设。
- ibatis的某些特征使得它能够非常高效的处理大型数据集。
- 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
<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
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
- 2. ibatis是什么
- iBATIS是什么?
- iBatis--iBatis 是什么?
- iBATIS介绍,iBATIS是什么?
- ibatis(2)ibatis是什么
- hibernate 与 ibatis的区别是什么?
- hibernate和Ibatis的区别是什么
- ibatis中#号与$符号的区别是什么?
- ibatis
- iBatis
- ibatis
- iBatis
- ibatis
- ibatis
- IBATIS
- ibatis
- iBATIS
- ibatis
- android 3G移植
- 华为软件编程规范和范例 3 —— 变量、结构
- HSSFWorkBooK用法
- 南邮 OJ 1340 逆矩阵问题
- java集合(泛型向(上下)限定
- 2. ibatis是什么
- JS学习笔记
- 剑指offer——重建二叉树
- POJ 题目2777 Count Color(线段树,区间查询染色数)
- OS开发UI篇—xib的简单使用
- HDU 4493 Tutor
- java中设置JButton的背景图片,并在它上面显示文字
- css样式大全--整理
- SQL中ISNULL用法示例