1. 介绍
Ibatis是开源的持久层框架。它的核心是SqlMap,将实体Bean跟关系数据库进行映射,将业务代码和SQL语句的书写进行分开,方便管理。Ibatis是“半自动”的ORM持久层框架。这里的“半自动化”,是相对Hibernate等提供了全面的数据库封装机制的“全自动化”ORM
实现而言,“全自动”ORM 实现了 POJO 和数据库表之间的映射,以及 SQL 的自动生成和执行。而iBATIS 的着力点,则在于POJO 与 SQL之间的映射关系。也就是说,iBATIS并不会为程序员在运行期自动生成 SQL 执行。具体的 SQL 需要程序员编写,然后通过映射配置文件,将SQL所需的参数,以及返回的结果字段映射到指定 POJO。
2. 前提
1) 安装了MySql数据库;
2) 将以下Jar包加入工程的classpath:commons-logging-1.0.4.jar、ibatis-2.3.0.677.jar、mysql-connector-java-5.0.3-bin.jar。
3. 实例
3.1 在MySql数据库中创建数据库
############################################################################################# CREATE DATABASE MYDB; use MYDB; Drop TABLE IF EXISTS `MYDB`.`student`; Create TABLE `MYDB`.`student` ( `name` varchar(40) NOT NULL, `psw` varchar(10) NOT NULL, `enabled` boolean ); insert into student values("lanp","lanpiao",true); insert into student values("ph","ph",true); insert into student values("wxh","wxh",true);
3.2 书写实体Bean:Student.java
package com.lanp.beans; /** * Student Bean * @author LanP * @since 2011-11-27 15:36 * @version V1.0 */ public class Student { private String name; private String psw; private Boolean enabled; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getPsw() { return psw; } public void setPsw(String psw) { this.psw = psw; } public Boolean getEnabled() { return enabled; } public void setEnabled(Boolean enabled) { this.enabled = enabled; } }
3.3 配置数据库的属性文件:mysql.properties
mysql.driver = com.mysql.jdbc.Driver mysql.url = jdbc:mysql://localhost:3306/MYDB mysql.username = root mysql.password = 157891
3.4 SqlMap配置文件: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属性配置文件,加载数据库连接信息 --> <properties resource="mysql.properties"/> <settings cacheModelsEnabled="true" enhancementEnabled="true" lazyLoadingEnabled="true" errorTracingEnabled="true" maxRequests="32" maxSessions="10" maxTransactions="5" useStatementNamespaces="false" /> <!-- 配置Ibatis事务管理,使用JDBC事务类型,数据源使用Simple类型 --> <transactionManager type="JDBC"> <dataSource type="SIMPLE"> <property name="JDBC.Driver" value="${mysql.driver}"/> <property name="JDBC.ConnectionURL" value="${mysql.url}"/> <property name="JDBC.Username" value="${mysql.username}"/> <property name="JDBC.Password" value="${mysql.password}"/> </dataSource> </transactionManager> <!-- 配置Ibatis要使用的SqlMap文件信息 --> <sqlMap resource="com/lanp/beans/student.xml"/> </sqlMapConfig>
3.5 student实体Bean的映射配置: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> <!-- 为Person类设置一个别名 --> <typeAlias alias="student" type="com.lanp.beans.Student"/> <!-- 配置表和实体Bean之间的映射关系 --> <resultMap id="studentMap" class="com.lanp.beans.Student"> <result property="name" column="name"/> <result property="psw" column="psw"/> <result property="enabled" column="enabled"/> </resultMap> <insert id="insertStudent" parameterClass="student"> <![CDATA[ insert into student values(#name#,#psw#,#enabled#); ]]> </insert> <!-- 查看特定用户 --> <select id="queryStudentById" parameterClass="string" resultMap="studentMap"> <![CDATA[ SELECT * FROM STUDENT WHERE NAME=#name# ]]> </select> <!-- 查看所有的用户 --> <select id="queryAllStudents" resultMap="studentMap"> <![CDATA[ SELECT * FROM STUDENT ]]> </select> </sqlMap>
3.6 测试类:TestStudent.java
package com.lanp.beans; import java.io.Reader; import java.util.List; import com.ibatis.common.resources.Resources; import com.ibatis.sqlmap.client.SqlMapClient; import com.ibatis.sqlmap.client.SqlMapClientBuilder; /** * 测试Ibatis * @author LanP * @since 2011-11-27 15:36 * @version V1.0 */ public class TestStudent { public static void main(String[] args) { String resource = "sqlMapConfig.xml"; try { //读取配置文件 Reader reader = Resources.getResourceAsReader(resource); //得到SqlMapClient SqlMapClient sqlMap = SqlMapClientBuilder.buildSqlMapClient(reader); //新增学生信息 insertStudent(sqlMap); //查看全部的学生 queryAllStudents(sqlMap); //查看特定的学生 queryStudentByName(sqlMap); } catch(Exception e){} } /** * 根据学生的名字查询特定的学生信息 * @param sqlMap */ private static void queryStudentByName(SqlMapClient sqlMap) { try { System.out.println("--------------查询特定的学生信息-------------------------"); Student stu = (Student)sqlMap.queryForObject("queryStudentById", "lanp"); if(null != stu) { System.out.println("== 学生名字: " + stu.getName() + " ,学生密码: " + stu.getPsw() + " =="); } } catch(Exception e){} } /** * 显示所有学生的信息 * @param sqlMap */ @SuppressWarnings("unchecked") private static void queryAllStudents(SqlMapClient sqlMap) { try { System.out.println("--------------查询所有的学生信息-------------------------"); List<Student> students = sqlMap.queryForList("queryAllStudents"); if(null != students && students.size()>0) { for(int i=0; i<students.size(); i++) { Student student = students.get(i); System.out.println("== 学生名字: " + student.getName() + " ,学生密码: " + student.getPsw() +" =="); } } } catch(Exception e){} } /** * 新增学生信息 * @param sqlMap */ private static void insertStudent(SqlMapClient sqlMap) { try { System.out.println("--------------新增学生信息-------------------------"); Student student = new Student(); student.setName("xinh"); student.setPsw("123"); student.setEnabled(true); //开始Ibatis事务 sqlMap.startTransaction(); sqlMap.insert("insertStudent", student); //结束IBatis事务 sqlMap.commitTransaction(); } catch(Exception e){} } }
OK,TKS!