IBatis 学习

本文详细介绍了如何使用MyBatis框架操作数据库,包括配置数据源、编写SQL映射文件、实现增删查操作以及实体类的设计。通过提供一个完整的Demo实例,演示了如何将实体类与数据库表映射关系结合,实现基本的数据操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

版本:2.3 说明:此版本是相对比较旧的版本,如今IBatis已经更名为MyBatis,而版本已经更新到3.0.4 以上。
IBatis的jar包:ibatis-2.3.0.677.jar
IBatis的配置文件
主配置文件:SqlMapConfig.xml
而独立的SQL配置文件对应的是每个bean或每一块业务,这些SQL的配置文件是独立于主配置文件的,如果要使用这些SQL的配置文件只需要在主配置文件里面进行引入即可。下面将会详细讲解。

下面做一个Demo做为讲解材料
由于该Demo是使用MySql的数据库,所以需要MySql的jar包:mysql.jar。

建一个Web项目,引入两个jar包:ibatis-2.3.0.677.jar、mysql.jar
建一张数据库表 student_ib
配置主配置文件 SqlMapConfig.xml 的dataSource
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>
<settings useStatementNamespaces = "true"/>
<transactionManager type = "JDBC">
<dataSource type = "SIMPLE">
<property name = "JDBC.Driver" value= "com.mysql.jdbc.Driver" />
<property name = "JDBC.ConnectionURL"
value= "jdbc:mysql://localhost:3306/test" />
<property name = "JDBC.Username" value= "root"/>
<property name = "JDBC.Password" value= "root"/>
</dataSource >
</transactionManager >

<!-- 下面是独立的SQL的配置文件 -->
<sqlMap resource = "com/brothers/ibatis/config/student.xml" />
</ sqlMapConfig>

新建一个student.xml的配置文件,编写独立的SQL
student.xml:

<? 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.brothers.ibatis.bean.Student" />

<typeAlias alias = "StudentParam"
type= "com.brothers.ibatis.bean.StudentParam" />

< resultMap id= "StudentResult" class = "Student">
<result property = "id" column= "STID"/>
<result property = "name" column= "STNAME"/>
<result property = "gender" column= "GENDER"/>
<result property = "age" column= "AGE"/>
<result property = "email" column= "EMAIL"/>
<result property = "createTime" column= "CREATETIME"/>
</ resultMap>

< insert id= "addStudent" parameterClass = "Student">
insert into STUDENT_IB(
STID,
STNAME,
GENDER,
AGE,
EMAIL,
CREATETIME) values(
#id:VARCHAR#,
#name:VARCHAR#,
#gender:VARCHAR#,
#age:VARCHAR#,
#email:VARCHAR#,
#createTime:VARCHAR#
)
</ insert>


< select id= "queryStudentByFilter" parameterClass ="StudentParam" resultMap = "StudentResult">
SELECT * From STUDENT_IB
<dynamic prepend = "where">
<isNotNull prepend = "AND" property= "id">
STID like '%'||#id#||'%'
</isNotNull >
<isNotNull prepend = "AND" property= "name">
STNAME like '%'||#name#||'%'
</isNotNull >
<isNotNull prepend = "AND" property= "startTime">
CREATETIME >= #startTime#
</isNotNull >
<isNotNull prepend = "AND" property= "endTime">
#endTime# >= CREATETIME
</isNotNull >
</dynamic >
</ select>

< select id= "queryStudentById" parameterClass = "String" resultMap= "StudentResult" >
SELECT * From STUDENT_IB where STID = #value#;
</ select>

</ sqlMap>

该文件是对应需要操作的bean类,所以需要一个Student的实体类做为结果的映射
Student.java:
package com.brothers.ibatis.bean;

public class Student {

private String id;

private String name;

private String gender;

private String age;

private String email;

private String createTime;

public String getCreateTime() {
return createTime;
}

public void setCreateTime(String createTime) {
this. createTime = createTime;
}

public String getId() {
return id;
}

public void setId(String id) {
this. id = id;
}

public String getName() {
return name;
}

public void setName(String name) {
this. name = name;
}

public String getGender() {
return gender;
}

public void setGender(String gender) {
this. gender = gender;
}

public String getAge() {
return age;
}

public void setAge(String age) {
this. age = age;
}

public String getEmail() {
return email;
}

public void setEmail(String email) {
this. email = email;
}


}

接下来可以直接使用IBatis操作实体和数据库表映射关系,下面主要是获取SqlMapClient ,该对象是IBatis的核心对象,可以操作数据库。
package com.brothers.ibatis.factory;

import java.io.IOException;
import java.io.Reader;

import com.ibatis.common.resources.Resources;
import com.ibatis.sqlmap.client.SqlMapClient;
import com.ibatis.sqlmap.client.SqlMapClientBuilder;

public class DBConnection {

private static SqlMapClient instance = null;

private static final String dbPath = "com/brothers/ibatis/config/SqlMapConfig_mysql.xml";

private DBConnection(){

}

public static SqlMapClient getInstance() {
if(instance == null){
try {
Reader reader = Resources.getResourceAsReader(dbPath);
instance = SqlMapClientBuilder.buildSqlMapClient(reader);
reader.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return instance;
}

public static void setInstance(SqlMapClient instance) {
DBConnection.instance = instance;
}

public static void main(String[] args) {
System.out.println(getInstance());
}

}

接下来可以直接使用该对象操作数据库,所以要编写一个独立的类StudentDaoImpl,作为Dao层操作数据库
StudentDaoImpl.java
package com.brothers.ibatis.dao;

import java.sql.SQLException;
import java.util.List;

import com.brothers.ibatis.bean.Student;
import com.brothers.ibatis.factory.DBConnection;
import com.ibatis.sqlmap.client.SqlMapClient;

public class StudentDaoImpl {

public void add(Student student) throws SQLException{
SqlMapClient scm = DBConnection. getInstance();
scm.startTransaction();
DBConnection. getInstance().insert( "Student.addStudent",student);
DBConnection. getInstance().commitTransaction();
DBConnection. getInstance().endTransaction();
}

public void delete(String id) throws SQLException{
DBConnection. getInstance().startTransaction();
DBConnection. getInstance().insert( "deleteStudent",id);
DBConnection. getInstance().commitTransaction();
DBConnection. getInstance().endTransaction();
}

public List<Student> find(Student student) throws SQLException{
List<Student> list = DBConnection.getInstance ().queryForList("queryStudentByFilter" ,student);
return list;
}

public Student findById(String id) throws SQLException{
Student student = (Student)DBConnection.getInstance().queryForObject( "Student.queryStudentById" ,id);
return student;
}

public static void testAdd() {
StudentDaoImpl dao = new StudentDaoImpl();
Student student = new Student();
student.setAge( "20");
student.setId( "andy");
student.setEmail( "andy@gmail.com");
student.setName( "Andy Lao");
student.setGender( "male");
student.setCreateTime( "2011-01-01 12:12:12" );
try {
dao.add(student);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

public static void testFind(){
StudentDaoImpl dao = new StudentDaoImpl();
try {
Student student = dao.findById( "andy");
System. out.println(student.getName());
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}

public static void main(String[] args) {
testFind();
}


}

这样就实现了简单的插入和查询。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值