1.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>
<!-- 加载属性文件-->
<properties resource="com/ibatis/sqlMap.properties" />
<settings
cacheModelsEnabled="true"
enhancementEnabled="true"
lazyLoadingEnabled="true"
maxRequests="128"
maxSessions="10"
maxTransactions="5"
useStatementNamespaces="true"
defaultStatementTimeout="15"
statementCachingEnabled="true"
classInfoCacheEnabled="true"
/>
<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 -->
<sqlMap resource="com/ibatis/Student.xml" />
</sqlMapConfig>
2.属性文件sqlMap.properties是配置数据库的文件,其代码如下:
driver=oracle.jdbc.driver.OracleDriver
url=jdbc:oracle:thin:@127.0.0.1:1521:orcl
username=crws
password=crws
3.sqlMap文件Student.xml是具体的sql语句,其代码如下:
<?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 namespace="Student">
<typeAlias alias="Student" type="com.ibatis.Student"/>
<!--
<resultMap class="" id="">
<result property="" column=""/>
</resultMap>
-->
<!-- 查询所有记录 -->
<select id="selectAllStudent" resultClass="Student">
<!--
id 代表下面的sql语句;resultClass的值Student代表com.ibatis.Student
-->
select * from STUDENT
</select>
<!-- 查询指定id的记录 -->
<select id="selectStudentById" parameterClass="int" resultClass="Student">
<!--
parameterClass 代表要输入值的类型
-->
select * from STUDENT where sid=#sid#
</select>
<!-- 插入一条记录 -->
<insert id="insertStudent" parameterClass="Student">
insert into STUDENT(sid,sname,major,birth,score)
values(#sid#,#sname#,#major#,#birth#,#score#)
<!--
此处的#sid# 不能写成#id#,因为此处没有getId()方法。
-->
</insert>
<!-- 删除指定id的记录 -->
<delete id="deleteStudentById" parameterClass="int">
delete from STUDENT where sid=#sid#
<!--
此处的#sid# 能写成#id#,因为只是作为参数传递的。
-->
</delete>
<!-- 修改记录 -->
<update id="updateStudent" parameterClass="Student">
update STUDENT set
sname=#sname#,
major=#major#,
birth=#birth#,
score=#score#
where sid=#sid#
</update>
<!-- 模糊查询 -->
<!-- 注意查询时的格式 '%$...$%' -->
<select id="selectStudentByName" parameterClass="String" resultClass="Student">
select * from STUDENT
where sname like '%$sname$%'
</select>
<!-- 根据主键序列插入记录 -->
<insert id="insertStudentBySequence" parameterClass="Student">
<selectKey resultClass="int" keyProperty="sid">
select studentPKSequence.nextVal from dual
</selectKey>
insert into STUDENT(sid,sname,major,birth,score)
values(#sid#,#sname#,#major#,#birth#,#score#)
</insert>
</sqlMap>
4.编写实体类Student.java,其代码如下:
package com.ibatis;
import java.util.Date;
public class Student {
//要保证有无参数的构造方法
private int sid;
private String sname;
private String major;
private Date birth;
private String score;
public Date getBirth() {
return birth;
}
public void setBirth(Date birth) {
this.birth = birth;
}
public String getMajor() {
return major;
}
public void setMajor(String major) {
this.major = major;
}
public String getScore() {
return score;
}
public void setScore(String score) {
this.score = score;
}
public int getSid() {
return sid;
}
public void setSid(int sid) {
this.sid = sid;
}
public String getSname() {
return sname;
}
public void setSname(String sname) {
this.sname = sname;
}
public String toString(){
String content = "sid:"+sid+"\tsname:"+sname+"\tmajor:"+major+"\tbirth:"+birth+"\tscore:"+score;
return content;
}
}
5.编写dao文件,其代码如下:
package com.ibatis;
import java.util.List;
public interface IStudentDAO {
public void addStudent(Student s);
public void addStudentBySequence(Student s);
public void deleteStudentById(int id);
public void updateStudent(Student s);
public List<Student> queryAllStudent();
public List<Student> queryStudentByName(String name);
public Student queryStudentById(int id);
}
6.编写dao实现类文件,其代码如下:
package com.ibatis;
import java.io.IOException;
import java.io.Reader;
import java.sql.SQLException;
import java.util.List;
import java.sql.Date;
import com.ibatis.common.resources.Resources;
import com.ibatis.sqlmap.client.SqlMapClient;
import com.ibatis.sqlmap.client.SqlMapClientBuilder;
public class IStudentDAOImpl implements IStudentDAO {
private static SqlMapClient sqlMapClient = null;
static{
try{
String resource = "com/ibatis/sqlMapConfig.xml";
Reader reader = Resources.getResourceAsReader(resource);
sqlMapClient = SqlMapClientBuilder.buildSqlMapClient(reader);
reader.close();
}catch(IOException e){
e.printStackTrace();
}
}
public void addStudent(Student s) {
// TODO Auto-generated method stub
try{
sqlMapClient.insert("insertStudent", s);
}catch(SQLException e){
e.printStackTrace();
}
}
public void addStudentBySequence(Student s) {
// TODO Auto-generated method stub
//step1:从数据库序列中获取主键值
//step2:插入
try{
sqlMapClient.insert("insertStudentBySequence",s);
//插入成功,打印出结果
System.out.println(s.getSid());
}catch(SQLException e){
e.printStackTrace();
}
}
public void deleteStudentById(int id) {
// TODO Auto-generated method stub
try{
System.out.println(sqlMapClient.delete("deleteStudentById",id));
//删除操作返回影响的行数的数目
}catch(SQLException e){
e.printStackTrace();
}
}
public List<Student> queryAllStudent() {
List<Student> studentList = null;
try{
studentList = sqlMapClient.queryForList("Student.selectAllStudent");
//当使用namespace时,必须指定如上的格式
}catch(SQLException e){
e.printStackTrace();
}
return studentList;
}
public Student queryStudentById(int id) {
// TODO Auto-generated method stub
Student s = null;
try{
s = (Student)sqlMapClient.queryForObject("selectStudentById", id);
}catch(SQLException e){
e.printStackTrace();
}
return s;
}
public List<Student> queryStudentByName(String name) {
// TODO Auto-generated method stub
List<Student> studentList = null;
try{
studentList = sqlMapClient.queryForList("selectStudentByName",name);
}catch(SQLException e){
e.printStackTrace();
}
return studentList;
}
public void updateStudent(Student s) {
// TODO Auto-generated method stub
try{
System.out.println(sqlMapClient.update("updateStudent",s));
//更改操作返回影响的行数的数目
}catch(SQLException e){
e.printStackTrace();
}
}
public static void main(String[] args) {
IStudentDAO dao = new IStudentDAOImpl();
//删除指定id的学生
// dao.deleteStudentById(100);
//查询所有的学生
for(Student student:dao.queryAllStudent()){
System.out.println(student);
}
//查询一个指定的学生
// System.out.println(dao.queryStudentById(1));
//增加一个学生
// Student s = new Student();
// s.setSid(100);
// s.setSname("li");
// s.setMajor("English");
// s.setBirth(Date.valueOf("2009-09-09"));
// s.setScore("90");
// dao.addStudent(s);
//更改学生
// Student s = new Student();
// s.setSid(1);
// s.setSname("li");
// s.setMajor("English");
// s.setBirth(Date.valueOf("2009-09-09"));
// s.setScore("90");
// dao.updateStudent(s);
//模糊查询
// for(Student student:dao.queryStudentByName("i")){
// System.out.println(student);
// }
//通过序列插入数据
// Student s = new Student();
// s.setSid(1);
// s.setSname("li");
// s.setMajor("English");
// s.setBirth(Date.valueOf("2009-09-09"));
// s.setScore("90");
// dao.addStudentBySequence(s);
}
}
短短几个文件,就构成了ibatis的简单应用,可以看到ibatis是轻量级的数据持久化方法,掌握也比较容易!