`
hello_world_hello
  • 浏览: 8800 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论
阅读更多

   一:ibatis简介 ibatis是apache的一个开源的框架,实现了O/R mapping(对象关系映射)。特点:小巧上手比较快。
     优点:
          1):java代码和sql语句分离,这样在修改sql语句后,无须重新编译java代码
          2):ibatis对jdbc进行了封装,使用者无须手动写代码把数据放到对象中
          3):简单容易上手
     缺点:
          1):相对于hibernate来说,ibatis需要手动写sql语句。
          2):ibatis在给sql语句传递参数时,只能传递一个参数。
     二:ibatis简单使用
       
        步骤: 1):导入相关jar包:ibatis-xxx.jar,mysql-connector-java- xxx-bin.jar(附件中可以下载)
              2):总配置文件(SqlMapConfig.xml)
              3):实体映射文件(对实体操作的sql语句映射)
    三:实例

    jdbc.properties文件

driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/ibatis
username=root
password=123

 

 

    总配置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="jdbc.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> 
        <!-- 引入实体映射文件 -->
	<sqlMap resource="com/zt/entity/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"> 
<sqlMap> 
	<!-- alias 可以看成是Student的别名,这样在下面就不用写类的全限定名 了, 只写别名即可 -->
	<typeAlias alias="Student" type="com.zt.entity.Student" /> 
	<!-- 查询所有学生信息 -->
	<select id="queryAllStudents" resultClass="Student"> 
		select * from student 
	</select> 

	<!-- 通过参数查询学生信息 -->
 	<select id="getStudentById" parameterClass="int" resultClass="Student">
		select * from student where id=#id#    
		<!-- #id#  类似于占位符-->
 	</select> 
 	
	<!-- 根据参数进行模糊查询 -->
 	<select id="queryStudentsByName" parameterClass="String"
		resultClass="Student">  
 		select * from student where name like '%$name$%'
 	</select>  

	<!-- 插入操作 -->
	<insert id="insertStudent" parameterClass="Student">
		insert into student (id, name, birthday, password) 
		values
		(#id#, #name#, #birthday#, #password#) 
	</insert>
	
	<!-- 插入操作,主键自动生成 -->
	<insert id="insertStudent1" parameterClass="Student">
	   <selectKey resultClass="int" keyProperty="id">  
             SELECT @@IDENTITY AS ID 
           </selectKey>  
		insert into student (id, name, birthday, password) 
		values
		(#id#, #name#, #birthday#, #password#) 
		
	</insert>
	<!-- 更新操作 -->
 	<update id="updateStudent" parameterClass="Student">
 		update student set name=#name#,birthday=#birthday#,password=#password# where id=#id# 
	</update>  
	
	<!-- 删除操作 -->
	<delete id="deleteById" parameterClass="int"> 
		delete from student where id=#id#
	</delete>

</sqlMap> 

    实体Student.java

 

 

package com.zt.entity;

import java.util.Date;

public class Student {
	private int id;
	private String name;
	private String password;
	private Date birthday;
	
	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 String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}
	public Date getBirthday() {
		return birthday;
	}
	public void setBirthday(Date birthday) {
		this.birthday = birthday;
	}
	
	@Override
	public String toString() {
		return "id:" + id + " name:" + name + "    password:" + password;
	}
}

    IStudent 接口,定义了对Student的常用操作

 

   

package com.zt.entity;

import java.util.List;

/**
 * 学生增删改
 * @author zt_pc
 *
 */
public interface IStudentDao {
	/**
	 * 添加操作
	 * @param student
	 * @return
	 */
	public Integer save(Student student);
	/**
	 * 添加操作主键自动生成
	 * @param student
	 * @return Integer
	 */
	public Integer save1(Student student);
	/**
	 * 更新操作
	 * @param student
	 * @return
	 */
	public void update(Student student);
	/**
	 * 查询所有学生信息
	 * @param student
	 * @return List<Student>
	 */
	public List<Student> queryStudents();
	/**
	 * 根据ID查询学生信息
	 * @param id
	 * @return Student
	 */
	public Student getStudentById(int id);
	/**
	 * 模糊查询
	 * @param name
	 * @return
	 */
	public List<Student> queryStudentsByName(String name);
	/**
	 * 删除操作
	 * @param id
	 * @return
	 */
	public void deleteById(int id);
}

    StudentDao 实现了ISudentDao

 

package com.zt.entity;

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

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

public class StudentDao implements IStudentDao {

	private static SqlMapClient sqlMapClient = null;
	
	static {
		try {
			Reader reader = Resources.getResourceAsReader("SqlMapConfig.xml");
			sqlMapClient = SqlMapClientBuilder.buildSqlMapClient(reader);
		} catch (IOException e) {
			throw new RuntimeException("文件未找到");
		}
	}
	
	@Override
	public Integer save(Student student) {
		Integer id = null;
		try {
			//queryForList的第一个参数是student.xml文件sql语句的id,第二个参数是要插入的数据
			id = (Integer)sqlMapClient.insert("insertStudent", student);
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return id;
	}

	@Override
	public Integer save1(Student student) {
		Integer id = null;
		try {
			//queryForList的第一个参数是student.xml文件sql语句的id,第二个参数是要插入的数据
			id = (Integer)sqlMapClient.insert("insertStudent1", student);
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return id;
	}

	@Override
	public void update(Student student) {
		try {
			//update的第一个参数是student.xml文件sql语句的id,第二个参数要更新数据
			sqlMapClient.update("updateStudent", student);
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}

	@SuppressWarnings("unchecked")
	@Override
	public List<Student> queryStudents() {
		List<Student> students = null;
		try {
			//queryForList的第一个参数是student.xml文件sql语句的id
			students = (List<Student>)sqlMapClient.queryForList("queryAllStudents");
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return students;
	}

	@SuppressWarnings("unchecked")
	@Override
	public List<Student> queryStudentsByName(String name) {
		List<Student> students = null;
		try {
			//queryForList的第一个参数是student.xml文件sql语句的id,第二个参数是查询条件
			students = sqlMapClient.queryForList("queryStudentsByName", name);
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return students;
	}

	@Override
	public void deleteById(int id) {
		try {
			sqlMapClient.delete("deleteById", id);
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
	
	@Override
	public Student getStudentById(int id) {
		Student student= null;
		try {
			//queryForObject的第一个参数是student.xml文件sql语句的id,第二个参数是查询条件
			student = (Student) sqlMapClient.queryForObject("getStudentById", id);
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return student;
	}
	
	//测试
	public static void main(String[] args) {
		IStudentDao studentDao = new StudentDao();
		
		//测试查询所有学生
		List<Student> students1 = studentDao.queryStudents();
		
		if(students1 == null) return;
		for (Student student : students1) {
			System.out.println(student);
		}
		
		
		//测试根据参数查询查询学生
		Student student1 = studentDao.getStudentById(1);
		if(student1 == null) return;
		System.out.println(student1);
		
		//测试模糊查询
		List<Student> students2 = studentDao.queryStudentsByName("gs");
		if(students2 == null) return;
		for (Student student : students2) {
			System.out.println(student);
		}
		
		
//		测试插入操作
		Student student2 = new Student();
		student2.setId(4);
		student2.setName("wangsi");
		student2.setBirthday(new Date());
		student2.setPassword("123");
		
		Integer id = studentDao.save1(student2);
		System.out.println(id);
		
		
		//测试更新操作
		Student student3 = new Student();
		student3.setId(4);
		student3.setName("wangsi12");
		student3.setBirthday(new Date());
		student3.setPassword("1234");
		
		studentDao.update(student3);
		
		//测试删除操作
		studentDao.deleteById(6);
		
	}
}

 

 

   总结:ibatis在执行增删改查操作时,首先根据要执行sql语句的ID 去 实体映射文件中查找相应的sql语句。

其中parameterClass 属性表示传递参数的类型,returnClass 表示返回值的类型。

 



         

 

分享到:
评论

相关推荐

    Ibatis入门例子,Ibatis教程

    在本教程中,我们将通过一个简单的Ibatis入门例子,带你逐步了解并掌握这个强大的框架。 首先,我们需要在项目中引入Ibatis的依赖。通常,我们会在Maven的pom.xml文件中添加以下依赖: ```xml &lt;groupId&gt;org....

    Ibatis 入门经典 实例

    《Ibatis 入门经典 实例》 Ibatis 是一款著名的轻量级 Java 持久层框架,它提供了一种映射 SQL 和 Java 对象的简单方式,从而减轻了开发人员在数据库操作中的工作负担。这篇实例教程将带你深入理解 Ibatis 的核心...

    iBatis入门(三)

    **iBatis入门(三)** 在本篇中,我们将深入探讨iBatis,这是一个流行的开源持久层框架,它允许开发者将SQL语句与Java代码分离,提供更灵活的数据库操作方式。iBatis的核心是SQL Maps,这些映射文件包含了SQL语句以及...

    ibatis 入门

    标题 "ibatis 入门" 暗示我们要探讨的是关于使用和理解开源持久层框架 iBATIS 的基础知识。iBATIS 是一个优秀的 Java 应用框架,它将 SQL 查询与 Java 代码分离,提供了更灵活的数据访问方式。这篇博客(博文链接已...

    最简单的iBatis入门例子

    本教程将带你一步步走进iBatis的世界,通过一个最简单的入门例子来了解其基本概念和使用方法。 一、iBatis简介 iBatis(现在称为MyBatis)是由Apache软件基金会维护的一个开源项目,它解决了Java应用程序直接操作...

    ibatis入门教程_ibatis入门教程_源码

    Ibatis,全称为MyBatis,是一个优秀的Java持久层框架,它主要负责SQL映射,使得...通过学习这个Ibatis入门教程,你可以了解并掌握如何在Java应用中使用Ibatis进行数据操作,为后续的进阶学习和项目开发打下坚实的基础。

    ibatis入门到精通详细讲解

    **Ibatis 入门到精通详细讲解** Ibatis 是一个优秀的持久层框架,它允许开发者将 SQL 语句与 Java 代码分离,提供了一个灵活的映射框架,从而减轻了开发人员在数据库操作上的工作负担。这篇详细讲解将带你从入门到...

    ibatis入门与ibatis迭代的用法

    **ibatis入门** iBatis,一款轻量级的Java持久层框架,是MyBatis的前身,由美国华人开发团队开发。它提供了一个SQL、Java和XML的映射框架,将SQL语句与Java代码分离,使得开发者可以更加灵活地处理数据库操作,避免...

    ibatis ibatis入门教程

    【标题】:Ibatis Ibatis入门教程 【描述】:Ibatis是一款优秀的持久层框架,它简化了Java应用与数据库之间的交互,通过提供一个映射SQL的XML或注解方式,使得开发人员能够将精力集中在业务逻辑上,而不是繁琐的...

    ibatis 自己学的一个ibatis项目(只是打通了Oracle) 非常适合入门

    自己写了一个Ibatis入门文件 JDK用的1.4 ibatis用的2.3.0 一定要注意版本问题,不然出现本本不兼容很费劲,我调了一上午,注意一定要用JDK1.4 ibatis2.3.0! 数据库自己建一张简单的表就行了,特别说明 只适合新手...

    ibatis 入门的例子

    这个压缩包中的"ibatisJavaTest"项目应该是一个简单的Ibatis入门示例,可能包含了配置文件、映射文件、测试类等。通过分析和运行这个项目,你可以直观地了解Ibatis如何与数据库交互,以及如何编写和使用Mapper接口。...

    iBATIS入门实例测试

    **iBATIS入门实例测试** iBATIS是一个优秀的开源持久层框架,它简化了Java应用程序与数据库之间的交互,使得开发者可以专注于SQL语句本身,而无需处理大量的JDBC代码。本教程将通过一个简单的实例来介绍如何使用...

    ibatis入门学习经典案例

    【标题】"ibatis入门学习经典案例"是一个针对初学者设计的教程,旨在帮助他们快速理解和掌握MyBatis(原名iBatis)这一流行的Java持久层框架。这个案例提供了完整的部署和运行环境,使学习过程更为直观和便捷。 ...

    ibatis入门实例(全代码)

    在这个"ibatis入门实例(全代码)"中,我们将探讨如何通过 Ibatis 实现对数据库的操作,包括数据库的初始化、SQL 映射文件的编写以及 Java 代码的集成。 首先,让我们了解数据库的准备工作。在实例中,提供了数据库...

    ibatis入门实例,很方便,导入即用

    **Ibatis 入门实例详解** Ibatis 是一个优秀的、开源的 Java 数据访问框架,它简化了数据库操作,使得开发者可以更加专注于 SQL 而不需处理底层的 JDBC 编码。Ibatis 提供了一个映射框架,允许将 SQL 查询与 Java ...

    iBatis入门Helloworld

    iBatis,现已被更名为MyBatis,是一个优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射。...通过这个简单的"iBatis入门Helloworld"项目,你可以快速掌握iBatis的基础操作,并为进一步学习和应用打下坚实基础。

Global site tag (gtag.js) - Google Analytics