标签:ibatis
iBATIS一词来源于“internet”和“abatis”的组合,是一个由Clinton Begin在2002年发起的开放源代码项目。于2010年6月16号被谷歌托管,改名为MyBatis。是一个基于SQL映射支持Java和·NET的持久层框架。
jar包:
<dependency>
<groupId>org.apache.ibatis</groupId>
<artifactId>ibatis-sqlmap</artifactId>
<version>2.3.0</version>
</dependency>
<dependency>
<groupId>com.mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.6-bin</version>
</dependency>
Student.java
类。StudentDao.java
类。com.ibatis.sqlmap.client.SqlMapClient
客户端完成对SqlMapConfigure.xml的加载,因此每一个DaoImpl都需要具备一个静态的sqlMapClient,和一个静态加载SqlMapConfigure.xml的过程。 StudentDaoImpl.java
类。MySqlConfigure.xml
。Student.xml
文件。SqlMap.properties
文件。Student实体
package ibatis;
import java.util.Date;
public class Student {
private int id;
private String name;
private float score;
private Date birth;
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 float getScore() {
return score;
}
public void setScore(float score) {
this.score = score;
}
public Date getBirth() {
return birth;
}
public void setBirth(Date birth) {
this.birth = birth;
}
@Override
public String toString() {
return"id=" + id + "\tname=" + name + "\tmajor=" + birth + "\tscore="
+ score + "\n";
}
}
StudentDao接口(为通俗起见,只有一个select功能,其他的同理):
package ibatis;
import java.util.List;
public interface StudentDao {
public List<Student> selectAllStudent();
}
StudentDaoImpl接口实现
package ibatis;
import java.io.IOException;
import java.io.Reader;
import java.sql.SQLException;
import java.util.List;
import com.ibatis.common.resources.Resources;
import com.ibatis.sqlmap.client.SqlMapClient;
import com.ibatis.sqlmap.client.SqlMapClientBuilder;
public class StudentDaoImpl implements StudentDao {
private static SqlMapClient sqlMapClient = null;
static{
try {
Reader reader = Resources.getResourceAsReader("ibatis/SqlMapConfig.xml");
sqlMapClient = SqlMapClientBuilder.buildSqlMapClient(reader);
reader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
@SuppressWarnings("unchecked")
public List<Student> selectAllStudent() {
List<Student> students = null;
try {
students = sqlMapClient.queryForList("selectAllStudent");
} catch (SQLException e) {
e.printStackTrace();
}
return students;
}
}
【重要】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.xml文件头要区别于Student.xml文件头,读者可对照该例子自行比较 -->
<sqlMapConfig>
<!-- 加载数据库配置项,resource值为该properties文件的完整路径 -->
<properties resource="ibatis/SqlMap.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>
<!-- 加载实体类配置项,resource值为该xml文件的完整路径 -->
<sqlMap resource="ibatis/Student.xml"/>
</sqlMapConfig>
【重要】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">
<!-- 注意区分config.xml和当前xml头部 -->
<sqlMap>
<!-- 为实体类取别名,方便分离,type为完整的类名 -->
<typeAlias alias="Student" type="ibatis.Student"/>
<!-- sql语句,在DaoImpl中使用sqlmapClient对id进行引用调用sql执行语句 -->
<select id="selectAllStudent" resultClass="Student">
select * from student
</select>
</sqlMap>
SqlMap.properties文件
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/xxxx
username=xxx
password=xxxxxxxx
如下工程目录,为搞不清楚xml引用路径的读者提供参考。
相对于Hibernate:
轻量了很多,不需要引用其他工厂类,在config.xml中只需配置dataSource,而Hibernate中还需要sessionFactory和其他配置.
灵活了很多,sql语句完全写到配置文件中,可以随时修改移植,避免了Hibernate中为了修改sql而要修改代码的弊端。同时,sql语句可以更加灵活复杂。众所周知,Hibernate想要执行一条复杂一些的sql语句真是很费劲的,因为其HQL语句本身不支持复杂逻辑,仅仅是跟查询有关的操作。为了在Hibernate中执行sql语句还需要使用 getSession().createSQLQuery(sql)
相关语句,非常繁琐。
标签:ibatis
原文地址:http://blog.csdn.net/langduhualangdu/article/details/46006743