`
Luob.
  • 浏览: 1571915 次
  • 来自: 上海
社区版块
存档分类
最新评论

Ibatis 的简单应用

阅读更多
     可能有些人 都用上了Mybatis, 但是有的公司 可能还在用ibatis.
Ibatis-Home(官网) 想了解更多的 就看看.

myeclipse 插件地址
http://ibatis.apache.org/tools/abator

Ibatis的优点(与JDBC相比)
1.减少了约61%代码量
2.配置 使用简单
3.架构性能增强
4.SQL 语句和程序代码分离
5.简化项目中的分工
6.增强移植性


下面开始 简单应用 (CRUD)
1.使用的jar 
  ibatis-2.3.4.726.jar (ibatis就用这个jar就可以了)
  ojdbc6.jar (oracle 的驱动)


SqlMapConfig.properties
driver=oracle.jdbc.driver.OracleDriver
url=jdbc:oracle:thin:@127.0.0.1:1521:orcl
username=test
password=test


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>

  <!-- Configure a built-in transaction manager.  If you're using an 
       app server, you probably want to use its transaction manager 
       and a managed datasource -->
  <properties resource="SqlMapConfig.properties"/>
  <transactionManager type="JDBC" commitRequired="false">
    <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>

  <!-- List the SQL Map XML files. They can be loaded from the 
       classpath, as they are here (com.domain.data...) -->
  <sqlMap resource="com/ibatis/student/Student.xml"/>
  <!-- List more here...
  <sqlMap resource="com/mydomain/data/Order.xml"/>
  <sqlMap resource="com/mydomain/data/Documents.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">

<sqlMap>
    <typeAlias alias="Student" type="com.ibatis.student.Student"/>
    
    <select id="queryAllStudent" resultClass="Student">
    	select * from student
    </select>
    
    <select id="queryStudentById" parameterClass="int" resultClass="Student">
		select * from student where sid=#sid#    
    </select>
    
    <!-- 这个里面的 占位符 就不能乱写了 因为会调用 Student 的 getSid ...getSname() ..  -->
    <insert id="addStudent" parameterClass="Student">
    	insert into student(sid,sname,major,birth,score) 
    	values    (#sid#,#sname#,#major#,#birth#,#score#)
    </insert>
      
    <!-- #sid# 这个 只是一个占位符 可以更改的 -->
    <delete id="deleteStudentById" parameterClass="int">
    	delete from student where sid=#sid#
    </delete>
    
    
    <update id="updateStudent" parameterClass="Student">
    	update student
    	set 
    		sname=#sname#,
    		major=#major#,
    	    birth=#birth#,
    	    score=#score#
    	 where sid=#sid#
    </update>
    
    <!-- 如果参数  要拼接成一个表达式 就要将#  换成  $ -->
    <select id="queryStudentByName" parameterClass="String" resultClass="Student">
    	select sid,sname,major,birth,score from student where sname like '$sname$'	
    </select>  
    
    <!-- Student  不区分大小写的   -->
    <insert id="insertStudentBySequence" parameterClass="Student">
    	<selectKey resultClass="int" keyProperty="sid">
    		select STUDENT_SEQ.nextVal from dual
    	</selectKey>
    	insert into student(sid,sname,major,birth,score)
    	values (#sid#,#sname#,#major#,#birth#,#score#)
    </insert>


    	
</sqlMap>



IStudentDAO.java
package com.ibatis.student;

import java.util.List;


public interface IStudentDAO {
	public void addStudent(Student student);

	//使用自动增长 主键 
	public void addStudentBySequence(Student student);

	public void delStudentById(int id);

	public void updStudentById(Student student);

	
	public List<Student> queryAllStudent();

	//使用模糊查询
	public List<Student> queryStudentByName(String name);

	public Student queryStudentById(int id);
}



IStudentDAOImpl.java
package com.ibatis.student;


import java.io.IOException;
import java.io.Reader;
import java.sql.Date;
import java.sql.SQLException;
import java.util.List;

import com.ibatis.sqlmap.client.SqlMapClient;

public class IStudentDAOImpl implements IStudentDAO {

	private static SqlMapClient sqlMapClient=null;
	
	static{
		try {
			Reader reader=com.ibatis.common.resources.Resources.getResourceAsReader("SqlMapConfig.xml");
			sqlMapClient=com.ibatis.sqlmap.client.SqlMapClientBuilder.buildSqlMapClient(reader);
			reader.close();
		}catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	public void addStudent(Student student) {
		// TODO Auto-generated method stub
		try {
			sqlMapClient.insert("addStudent", student);
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

	public void addStudentBySequence(Student student) {
		// TODO Auto-generated method stub
		try {
			//1.从数据库徐磊中获取主键值
			//2.往 student表中插入记录
			sqlMapClient.insert("insertStudentBySequence", student);
			System.err.println(student.getSid());
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

		
	}

	public void delStudentById(int id) {
		// TODO Auto-generated method stub
		try {
			System.out.println(sqlMapClient.delete("deleteStudentById", id));
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

	public List<Student> queryAllStudent() {
		// TODO Auto-generated method stub
		List<Student>  studentList=null;
		try {
			studentList=sqlMapClient.queryForList("queryAllStudent");
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return studentList;
	}

	public Student queryStudentById(int id) {
		Student student=null;
		try {
			student=(Student)sqlMapClient.queryForObject("queryStudentById",id);
		} catch (Exception e) {
			e.printStackTrace();
		}
		return student;
	}

	public List<Student> queryStudentByName(String name) {
		// TODO Auto-generated method stub
		List<Student> studentList=null;
		try {
			studentList=sqlMapClient.queryForList("queryStudentByName", name);
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		return studentList;
	}

	public void updStudentById(Student student) {
		// TODO Auto-generated method stub
		try {
			System.out.println(sqlMapClient.update("updateStudent", student));
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	
	public  static void main(String [] args){
		IStudentDAO dao=new IStudentDAOImpl();
		//1.
		
//		for (Student student : dao.queryAllStudent()) {
//			System.out.println(student);
//		}
		
		//2.
//		System.out.println(dao.queryStudentById(1));
		
		//3.
//		Student student=new Student();
//		student.setSid(5);
//		student.setSname("admin");
//		student.setScore(100);
//		student.setMajor("Games");
//		student.setBirth(Date.valueOf("2008-08-08"));
//		
//		dao.addStudent(student);
		
		//4.
//		dao.delStudentById(1);
		
		//5.
//		Student student=new Student();
//		student.setSid(2);
//		student.setSname("luob");
//		student.setScore(50);
//		student.setMajor("Games");
//		student.setBirth(Date.valueOf("2008-08-08"));
//		dao.updStudentById(student);
		
		//6.
//		for (Student student : dao.queryStudentByName("l%")) {
//			System.out.println(student);
//		}
		
		//7.
		Student student=new Student();
		student.setSid(2);
		student.setSname("SMITH");
		student.setScore(50);
		student.setMajor("Games");
		student.setBirth(Date.valueOf("2008-08-08"));
		
		dao.addStudentBySequence(student);
	}


}




ibatis in语句参数传入方法
Posted on 2012-02-03 10:11 yuhaibo736 阅读(2925) 评论(1)  编辑  收藏  
 第一种:传入参数仅有数组 
       <select id="GetEmailList_Test"  resultClass="EmailInfo_"> 
            select * 
            from MailInfo with (nolock) 
            where ID in 
                <iterate open="(" close=")" conjunction="," > 
                    #[]# 
                </iterate> 
        </select> 
调用 
            string[] strValue = new string[] { "1", "2", "3" }; 
            Reader.QueryForList<EmailInfoModel>("WebApp_Ibatisnet.dao.GetEmailList_Test", strValue ); 

       第二种:传入参数有数组,且有其他数据 
        <select id="GetEmailList_Test3" parameterClass="TestIn" resultClass="EmailInfo_"> 
            select  top(#Count#)* 
            from MailInfo with (nolock) 
            where ID in 
            <iterate open="(" close=")" conjunction="," property="ArrValue" > 
                #ArrValue[]# 
            </iterate> 
        </select> 
调用 
            TestIn ti = new TestIn(); 
            ti.Count = 1; 
            ti.ArrValue = strValue; 
            return Reader.QueryForList<EmailInfoModel>("WebApp_Ibatisnet.dao.GetEmailList_Test3", ti); 
实体类: 
   public class TestIn 
    { 
        private int count; 
        public int Count 
        { 
            get { return count; } 
            set { count = value; } 
        } 
        private string[] arrValue; 
        public string[] ArrValue 
        { 
            get { return arrValue; } 
            set { arrValue = value; } 
        } 
    } 

       第三种:in后面的数据确定,使用string传入 
        <select id="GetEmailList_Test2" parameterClass="TestIn" resultClass="EmailInfo_"> 
            select * 
            from MailInfo with (nolock) 
            where ID in 
            ($StrValue$) 
        </select> 
调用 
                Reader.QueryForList<EmailInfoModel>("WebApp_Ibatisnet.dao.GetEmailList_Test2", "1,2,3"); 

<!--
其他信息: 
Iterate的属性: 
prepend -可被覆盖的SQL语句组成部分,添加在语句的前面(可选) 
property -类型为java.util.List的用于遍历的元素(必选) 
open -整个遍历内容体开始的字符串,用于定义括号(可选) 
close -整个遍历内容体结束的字符串,用于定义括号(可选) 
conjunction -每次遍历内容之间的字符串,用于定义AND或OR(可选) 
<iterate>遍历类型为java.util.List的元素。-->

<!--like-->
<select id="selectAccount" resultMap="AccountResult" parameterClass="Account">
select * from ACCOUNT
<dynamic prepend="where">
<isNotNull property="id" prepend="and" open="(" close=")">
id = #id#
</isNotNull>
<isNotEmpty property="name" prepend="and">
name like '%$name$%'
</isNotEmpty>
</dynamic>
</select>



0
1
分享到:
评论
1 楼 parwin2 2012-11-13  
ibatis,写SQL就是灵活。

相关推荐

    ibatis应用

    ibatis简单应用

    ibatis框架简单应用

    ibatis框架简单应用

    ibatis

    ibatis简单应用及配置

    Ibatis增删改简单应用配置示例说明实例

    Ibatis增删改简单应用配置示例说明实例 oracle 11g + ibatis2

    Ibatis 2 增删改简单应用配置示例说明

    Ibatis增删改简单应用配置示例说明,及项目 第一次写文档,请大家多包涵

    ibatis入门实例(全代码)

    简单的ibatis入门实例(全代码),附带数据库以及表格创建语句,适合新手学习

    Ibatis.net+ oracle 简单事例

    一个Ibatis。net 的应用事例 数据库为oracle 用vs2008 导入即可使用。

    iBatis.Net简单三层Demo

    Web :前台应用; 2. BLL :业务处理层,如果嫌麻烦,可以再进一步抽象出来,然后将代码放置Web层的aspx.cs里面; 3. Model :这个就不多说了,地球人都知道(数据实体类) 4. SqlMaps:资源类,把配置文件和sql ...

    iBATIS实战

    书中既详实地介绍了iBATIS的设计理念和基础知识,也讨论了动态SQL、高速缓存、DAD框架等高级主题,还讲解了iBATIS在实际开发中的应用。书的最后给出了一个设计优雅、层次清晰的示例程序JGameStore,该示例涵盖全书的...

    一个程序员的自省 iBATIS In Action:什么是iBATIS(二)

    使用iBATIS只要五分钟我们就可以创建一个完整的应用程序了——当然这不是大型的ERP(Enterprise Resource Planning)解决方案,也不是大规模的电子商务网站,只是一个简单的命令行工具,它可以执行iBATIS SQL Map中...

    ibatis2所需jar包

    iBATIS[2]是一个可以设计和实现更好的 Java/.NET 应用程序持久化层的框架。iBATIS 把对象和存储过程或者使用 XML 描述符的 SQL 语句进行了关联。简单是 iBATIS 最大的优势

    ibatis学习总结

    这个框架将让你能够更好的在JAVA应用中设计和实现实体层。这个框架有两个主要的组成部分,一个是SQL Maps,另一个是Data Access Objects。另外还包括一些可能很有用的工具。 SQL Maps: Sql Maps是这个框架中最...

    持久层框架ibatis学习笔记

    iBatis 是一套简单易学的持久层框架,应用范围也比较广发,与jdbc 相比,简化了JDBC 的百分之61 的代码量,将Sql 语言与java 程序分离,便于维护和开发,ORM 关系映射上比 JDBC 更加容易更加方便这些有点足以让我们...

    一个程序员的自省 iBATIS In Action:iBATIS的安装和配置

    iBATIS的安装过程快速而简单。它是一个类库,而不是应用程序,所以实际上并不需要安装,但要在应用程序中使用它还是要经过几个步骤。 如果您熟悉C#和ADO.NET,那么可能需要好好阅读本章为下面的一两章做好准备。...

    Strust2+Spring+ibatis整合开发实例

    Strust2+Spring+ibatis整合开发实例的一个简单应用。

    ibatis教程

    iBatis是一个简单易用的、灵活的Java ORM工具包,iBatis执行效率非常高,接近于JDBC的代码的效率,因此iBatis适合做对数据性能要求很高的应用系统。 iBatis目前的最新版本是3.02,最稳定的版本是2.3.4,由于iBatis的...

    Spring + Struts2 + iBatis + Eclipse 整合

    适合于初学者, 能了解struts2、spring、iBatis之间的简单的应用。

    ibatis 开发指南(pdf)

    ibatis 开发指南 ibatis Quick Start............................................................................................ 5 准备工作...........................................................

    IBatisNet.DataMapper 之简单三层

    iBATIS不会对现存应用的设计或者数据库结构强加任何影响 iBATIS非常适合于有成长趋势的系统 3.iBATIS之于大型、企业级系统:为之而设计 iBATIS的某些特性使得它能够高效地处理大型数据集 iBATIS允许你用多种方式...

    iBATIS中的单元测试

    从概念上说,持久层可以分为3层,而iBATIS使得对这些不同的层进行单元测试都变得非常简单,如图13-1所示。对映射层所进行的单元测试,可能是在大部分应用程序中所发生的最低层次的单元测试了。此过程包括对SQL语句...

Global site tag (gtag.js) - Google Analytics