iBatis是数据持久层的框架。和ORM框架(如Hibernate)将数据库表直接映射为Java对象相比,iBatis是将SQL语句映射为Java对象。iBatis允许你对SQL有完全控制权,可以视为半自动的数据访问工具。 iBatis的最大优点是简便,轻量级,仅需iBatis的一个jar和数据库的驱动即可运行,而且使用iBatis仅需掌握SQL和XML的用法即可。
insert
delete
update
queryForObject
queryForList
queryForMap
1. 数据库
CREATE TABLE STUDENT (
ID NUMBER(5),
NAME VARCHAR2(10),
SEX VARCHAR2(10),
AGE NUMBER(10),
ADDRESS VARCHAR2(10),
CONSTRAINT PK_ID PRIMARY KEY(ID)
);
2. SqlMapConfig.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE sqlMapConfig PUBLIC "-//iBATIS.com//DTD SQL Map Config 2.0//EN" "http://www.ibatis.com/dtd/sql-map-config-2.dtd">
<sqlMapConfig>
<properties resource="SqlMapConfig.properties" />
<transactionManager type="JDBC">
<dataSource type="SIMPLE">
<property name="JDBC.Driver" value="${driver}" />
<property name="JDBC.ConnectionURL" value="${url}" />
<property name="JDBC.Username" value="${username}" />
<property name="JDBC.Password" value="${password}" />
</dataSource>
</transactionManager>
<sqlMap resource="sqlMap_student.xml" />
</sqlMapConfig>
driver=oracle.jdbc.driver.OracleDriver
url=jdbc:oracle:thin: :1521:orcl
username=ynsb1
password=1
3. sqlMap_student.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sqlMap PUBLIC "-//iBATIS.com//DTD SQL Map 2.0//EN" "http://www.ibatis.com/dtd/sql-map-2.dtd">
<sqlMap namespace="Test">
<statement id="insert_student"
parameterClass="com.shangcg.ibatis.StudentDto">
insert into student(
id,name,age,sex,address) values(
#id#,#name#,#age#,#sex#,#address# )
</statement>
<statement id="delete_all_student"
parameterClass="com.shangcg.ibatis.StudentDto">
delete from student
</statement>
<statement id="updataStudent_test"
parameterClass="com.shangcg.ibatis.StudentDto">
update student set
name=#name#,sex=#sex#,age=#age#,address=#address#
where id = #id#
</statement>
<statement id="selectByID_student"
parameterClass="com.shangcg.ibatis.StudentDto"
resultClass="com.shangcg.ibatis.StudentDto">
select * from student
where id = #id#
order by id
</statement>
</sqlMap>
4. StudentDTO
import java.sql.Date;
public class StudentDto {
//注意这里需要保证有一个无参构造方法,因为映射使用反射,如果没有无参构造可能会出现问题
private int id;
private String name;
private String sex;
private int age;
private String address;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
}
5. StudentDao
import java.util.ArrayList;
import com.ibatis.sqlmap.client.SqlMapClient;
import com.shangcg.ibatis.StudentDto;
public interface StudentDao {
//添加student表的数据
public void addStudent(SqlMapClient sqlMap,StudentDto studentdto);
//删除student表的指定ID数据
public void delStudentByID(SqlMapClient sqlMap,StudentDto studentdto);
//更新student表的数据
public void updataStudent(SqlMapClient sqlMap,StudentDto studentdto);
//查询student表的指定ID数据
public StudentDto selectStudentByID(SqlMapClient sqlMap,StudentDto studentdto);
}
6. StudentImpl
import java.sql.SQLException;
import java.util.ArrayList;
import com.ibatis.sqlmap.client.SqlMapClient;
import com.shangcg.ibatis.StudentDto;
import com.shangcg.interfaces.StudentDao;
public class StudentImpl implements StudentDao {
//添加student表的数据
public void addStudent(SqlMapClient sqlMap, StudentDto studentdto) {
try {
sqlMap.insert("insert_student", studentdto);
} catch (SQLException e) {
e.printStackTrace();
}
}
//删除student表的指定ID数据
public void delStudentByID(SqlMapClient sqlMap, StudentDto studentdto) {
try {
sqlMap.delete("deleteByID_student",studentdto );
} catch (SQLException e) {
e.printStackTrace();
}
}
//更新student表的数据
public void updataStudent(SqlMapClient sqlMap, StudentDto studentdto) {
try {
sqlMap.update("updataStudent_test",studentdto );
} catch (SQLException e) {
e.printStackTrace();
}
}
//查询student表的指定ID数据
public StudentDto selectStudentByID(SqlMapClient sqlMap, StudentDto studentdto) {
//返回后保存在info中
StudentDto info = new StudentDto();
try {
info = (StudentDto)sqlMap.queryForObject("selectByID_student", studentdto);
} catch (SQLException e) {
e.printStackTrace();
}
return info;
}
}