iBatis 简单介绍:

iBatis 是apache 的一个开源项目。一个O/R Mapping 解决方式,iBatis 最大的特点就是小巧。上手非常快。假设不须要太多复杂的功能。iBatis 是可以满足你的要求又足够灵活的最简单的解决方式,如今的iBatis 已经改名为Mybatis
了。

官网为:http://www.mybatis.org/

搭建iBatis 开发环境:

1 、导入相关的jar 包,ibatis-2.3.0.677.jar 、mysql-connector-java-5.1.6-bin.jar

2 、编写配置文件:

Jdbc 连接的属性文件  (eg:SqlMap.properties)

总配置文件 (SqlMapConfig.xml)

关于每一个实体的映射文件(Map 文件) (eg:Student.xml)

------------------------------------------------------------------------------------------

本文以 对学生Student的 增删改查为例

Demo:

project文件夹:

数据库结构截图:

--------------------------------------------------------------------------------------------------------------------------

1. Student.java

  1. package com.ibatis.entity;
  2. import java.sql.Date;
  3. public class Student {
  4. 	// 注意这里须要保证有一个无參构造方法,由于包含Hibernate在内的映射都是使用反射的,假设没有无參构造可能会出现故障
  5. 	private int id;
  6. 	private String name;
  7. 	private Date birth;
  8. 	private float score;
  9. 	public int getId() {
  10. 		return id;
  11. 	}
  12. 	public void setId(int id) {
  13. 		this.id = id;
  14. 	}
  15. 	public String getName() {
  16. 		return name;
  17. 	}
  18. 	public void setName(String name) {
  19. 		this.name = name;
  20. 	}
  21. 	public Date getBirth() {
  22. 		return birth;
  23. 	}
  24. 	public void setBirth(Date birth) {
  25. 		this.birth = birth;
  26. 	}
  27. 	public float getScore() {
  28. 		return score;
  29. 	}
  30. 	public void setScore(float score) {
  31. 		this.score = score;
  32. 	}
  33. 	@Override
  34. 	public String toString() {
  35. 		return "Student [id=" + id + ", name=" + name + ", birth=" + birth
  36. 				+ ", score=" + score + "]";
  37. 	}
  38. }
  39. 2. SqlMap.properties

  40. driver=com.mysql.jdbc.Driver
  41. url=jdbc:mysql://localhost:3306/mydb
  42. username=root
  43. password=123456

  44. 3. Student.xml

  45. <?xml version="1.0" encoding="UTF-8" ?
  46. >
  47. <!DOCTYPE sqlMap PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN"
  48.    "http://ibatis.apache.org/dtd/sql-map-2.dtd">
  49. <sqlMap>
  50. 	<!-- 通过typeAlias使得我们在以下使用Student实体类的时候不须要写包名 -->
  51. 	<typeAlias alias="Student" type="com.ibatis.entity.Student" />
  52. 	<!-- 这样以后改了sql,就不须要去改java代码了 -->
  53. 	<!-- id表示select里的sql语句。resultClass表示返回结果的类型 -->
  54. 	<select id="selectAllStudent" resultClass="Student">
  55. 		select * from
  56. 		tbl_student
  57. 	</select>
  58. 	<!-- parameterClass表示參数的内容 -->
  59. 	<!-- #表示这是一个外部调用的须要传进的參数,能够理解为占位符 -->
  60. 	<select id="selectStudentById" parameterClass="int" resultClass="Student">
  61. 		select * from tbl_student where id=#id#
  62. 	</select>
  63. 	<!-- 注意这里的resultClass类型,使用Student类型取决于queryForList还是queryForObject -->
  64. 	<select id="selectStudentByName" parameterClass="String"
  65. 		resultClass="Student">
  66. 		select name,birth,score from tbl_student where name like
  67. 		'%$name$%'
  68. 	</select>
  69. 	<insert id="addStudent" parameterClass="Student">
  70. 		insert into
  71. 		tbl_student(name,birth,score) values
  72. 		(#name#,#birth#,#score#);
  73. 		<selectKey resultClass="int" keyProperty="id">
  74. 			select @@identity as inserted
  75. 			<!-- 这里须要说明一下不同的数据库主键的生成,对各自的数据库有不同的方式: -->
  76. 			<!-- mysql:SELECT LAST_INSERT_ID() AS VALUE -->
  77. 			<!-- mssql:select @@IDENTITY as value -->
  78. 			<!-- oracle:SELECT STOCKIDSEQUENCE.NEXTVAL AS VALUE FROM DUAL -->
  79. 			<!-- 另一点须要注意的是不同的数据库生产商生成主键的方式不一样,有些是预先生成 (pre-generate)主键的,如OraclePostgreSQL
  80. 				有些是事后生成(post-generate)主键的,如MySQLSQL Server 所以假设是Oracle数据库,则须要将selectKey写在insert之前 -->
  81. 		</selectKey>
  82. 	</insert>
  83. 	<delete id="deleteStudentById" parameterClass="int">
  84. 		<!-- #id#里的id能够任意取,可是上面的insert则会有影响,由于上面的name会从Student里的属性里去查找 -->
  85. 		<!-- 我们也能够这样理解,假设有#占位符。则ibatis会调用parameterClass里的属性去赋值 -->
  86. 		delete from tbl_student where id=#id#
  87. 	</delete>
  88. 	<update id="updateStudent" parameterClass="Student">
  89. 		update tbl_student set
  90. 		name=#name#,birth=#birth#,score=#score# where id=#id#
  91. 	</update>
  92. </sqlMap>

  93. 4. SqlMapConfig.xml

  94. <?xml version="1.0" encoding="UTF-8"?>
  95. <!DOCTYPE sqlMapConfig PUBLIC "-//ibatis.apache.org//DTD SQL Map Config 2.0//EN"
  96.     "http://ibatis.apache.org/dtd/sql-map-config-2.dtd">
  97. <sqlMapConfig>
  98. 	<!-- 引用JDBC属性的配置文件 -->
  99. 	<properties resource="com/ibatis/SqlMap.properties" />
  100. 	<!-- 使用JDBC的事务管理 -->
  101. 	<transactionManager type="JDBC">
  102. 		<!-- 数据源 -->
  103. 		<dataSource type="SIMPLE">
  104. 			<property name="JDBC.Driver" value="${driver}" />
  105. 			<property name="JDBC.ConnectionURL" value="${url}" />
  106. 			<property name="JDBC.Username" value="${username}" />
  107. 			<property name="JDBC.Password" value="${password}" />
  108. 		</dataSource>
  109. 	</transactionManager>
  110. 	<!-- 这里能够写多个实体的映射文件 -->
  111. 	<sqlMap resource="com/ibatis/Student.xml" />
  112. </sqlMapConfig>

  113. 5. StudentDao.java

  114. package com.ibatis.dao;
  115. import java.util.List;
  116. import com.ibatis.entity.Student;
  117. public interface StudentDao {
  118. 	/**
  119. 	 * 加入学生信息
  120. 	 *
  121. 	 * @param student
  122. 	 *            学生实体
  123. 	 * @return 返回是否加入成功
  124. 	 */
  125. 	public boolean addStudent(Student student);
  126. 	/**
  127. 	 * 依据学生id删除学生信息
  128. 	 *
  129. 	 * @param id
  130. 	 *            学生id
  131. 	 * @return 删除是否成功
  132. 	 */
  133. 	public boolean deleteStudentById(int id);
  134. 	/**
  135. 	 * 更新学生信息
  136. 	 *
  137. 	 * @param student
  138. 	 *            学生实体
  139. 	 * @return 更新是否成功
  140. 	 */
  141. 	public boolean updateStudent(Student student);
  142. 	/**
  143. 	 * 查询所有学生信息
  144. 	 *
  145. 	 * @return 返回学生列表
  146. 	 */
  147. 	public List<Student> selectAllStudent();
  148. 	/**
  149. 	 * 依据学生姓名模糊查询学生信息
  150. 	 *
  151. 	 * @param name
  152. 	 *            学生姓名
  153. 	 * @return 学生信息列表
  154. 	 */
  155. 	public List<Student> selectStudentByName(String name);
  156. 	/**
  157. 	 * 依据学生id查询学生信息
  158. 	 *
  159. 	 * @param id
  160. 	 *            学生id
  161. 	 * @return 学生对象
  162. 	 */
  163. 	public Student selectStudentById(int id);
  164. }
  165. 6. StudentDaoImpl.java

  166. package com.ibatis.daoimpl;
  167. import java.io.IOException;
  168. import java.io.Reader;
  169. import java.sql.SQLException;
  170. import java.util.List;
  171. import com.ibatis.dao.StudentDao;
  172. import com.ibatis.entity.Student;
  173. import com.ibatis.common.resources.Resources;
  174. import com.ibatis.sqlmap.client.SqlMapClient;
  175. import com.ibatis.sqlmap.client.SqlMapClientBuilder;
  176. public class StudentDaoImpl implements StudentDao {
  177. 	private static SqlMapClient sqlMapClient = null;
  178. 	// 读取配置文件
  179. 		static {
  180. 			try {
  181. 				Reader reader = Resources
  182. 						.getResourceAsReader("com/ibatis/SqlMapConfig.xml");
  183. 				sqlMapClient = SqlMapClientBuilder.buildSqlMapClient(reader);
  184. 				reader.close();
  185. 			} catch (IOException e) {
  186. 				e.printStackTrace();
  187. 			}
  188. 		}
  189. 		public boolean addStudent(Student student) {
  190. 			Object object = null;
  191. 			boolean flag = false;
  192. 			try {
  193. 				object = sqlMapClient.insert("addStudent", student);
  194. 				System.out.println("加入学生信息的返回值:" + object);
  195. 			} catch (SQLException e) {
  196. 				e.printStackTrace();
  197. 			}
  198. 			if (object != null) {
  199. 				flag = true;
  200. 			}
  201. 			return flag;
  202. 		}
  203. 		public boolean deleteStudentById(int id) {
  204. 			boolean flag = false;
  205. 			Object object = null;
  206. 			try {
  207. 				object = sqlMapClient.delete("deleteStudentById", id);
  208. 				System.out.println("删除学生信息的返回值:" + object + "。这里返回的是影响的行数");
  209. 			} catch (SQLException e) {
  210. 				e.printStackTrace();
  211. 			}
  212. 			if (object != null) {
  213. 				flag = true;
  214. 			}
  215. 			return flag;
  216. 		}
  217. 		public boolean updateStudent(Student student) {
  218. 			boolean flag = false;
  219. 			Object object = false;
  220. 			try {
  221. 				object = sqlMapClient.update("updateStudent", student);
  222. 				System.out.println("更新学生信息的返回值:" + object + ",返回影响的行数");
  223. 			} catch (SQLException e) {
  224. 				e.printStackTrace();
  225. 			}
  226. 			if (object != null) {
  227. 				flag = true;
  228. 			}
  229. 			return flag;
  230. 		}
  231. 		public List<Student> selectAllStudent() {
  232. 			List<Student> students = null;
  233. 			try {
  234. 				students = sqlMapClient.queryForList("selectAllStudent");
  235. 			} catch (SQLException e) {
  236. 				e.printStackTrace();
  237. 			}
  238. 			return students;
  239. 		}
  240. 		public List<Student> selectStudentByName(String name) {
  241. 			List<Student> students = null;
  242. 			try {
  243. 				students = sqlMapClient.queryForList("selectStudentByName",name);
  244. 			} catch (SQLException e) {
  245. 				e.printStackTrace();
  246. 			}
  247. 			return students;
  248. 		}
  249. 		public Student selectStudentById(int id) {
  250. 			Student student = null;
  251. 			try {
  252. 				student = (Student) sqlMapClient.queryForObject(
  253. 						"selectStudentById", id);
  254. 			} catch (SQLException e) {
  255. 				e.printStackTrace();
  256. 			}
  257. 			return student;
  258. 		}
  259. }
  260. 7. TestIbatis.java

  261. package com.ibatis.test;
  262. import java.sql.Date;
  263. import java.util.List;
  264. import com.ibatis.daoimpl.StudentDaoImpl;
  265. import com.ibatis.entity.Student;
  266. public class TestIbatis {
  267. 	public static void main(String[] args) {
  268. 		StudentDaoImpl studentDaoImpl = new StudentDaoImpl();
  269. 		System.out.println("測试插入");
  270. 		Student addStudent = new Student();
  271. 		addStudent.setName("李四");
  272. 		addStudent.setBirth(Date.valueOf("2011-09-02"));
  273. 		addStudent.setScore(88);
  274. 		System.out.println(studentDaoImpl.addStudent(addStudent));
  275. 		System.out.println("測试依据id查询");
  276. 		System.out.println(studentDaoImpl.selectStudentById(1));
  277. 		System.out.println("測试模糊查询");
  278. 		List<Student> mohuLists = studentDaoImpl.selectStudentByName("李");
  279. 		for (Student student : mohuLists) {
  280. 			System.out.println(student);
  281. 		}
  282. 		System.out.println("測试查询全部");
  283. 		List<Student> students = studentDaoImpl.selectAllStudent();
  284. 		for (Student student : students) {
  285. 			System.out.println(student);
  286. 		}
  287. 		System.out.println("依据id删除学生信息");
  288. 		System.out.println(studentDaoImpl.deleteStudentById(1));
  289. 		System.out.println("測试更新学生信息");
  290. 		Student updateStudent = new Student();
  291. 		updateStudent.setId(1);
  292. 		updateStudent.setName("李四1");
  293. 		updateStudent.setBirth(Date.valueOf("2011-08-07"));
  294. 		updateStudent.setScore(21);
  295. 		System.out.println(studentDaoImpl.updateStudent(updateStudent));
  296. 	}
  297. }
  298. iBatis 的优缺点:

  299. 长处:

  300. 1 降低代码量,简单。

  301. 2 性能增强。

  302. 3 Sql

  303. 语句与程序代码分离。

  304. 4 增强了移植性。

  305. 缺点:

  306. 1 Hibernate 相比,sql 须要自己写;

  307. 2 參数数量仅仅能有一个,多个參数时不太方便;

ibatis 入门的更多相关文章

  1. 一个简单的iBatis入门例子

    一个简单的iBatis入门例子,用ORACLE和Java测试 目录结构: 1.导入iBatis和oracle驱动. 2.创建类Person.java package com.ibeats;import ...

  2. Ibatis入门基本语法(转) good

    Ibatis入门基本语法 一个项目中在写ibatis中的sql语句时,where user_id in (#user_id_list# ), 运行时总是不行,后来上网查了查,才知道这里不该用#,而应该 ...

  3. ibatis入门教程

    转载自  http://www.cnblogs.com/ycxyyzw/archive/2012/10/13/2722567.html iBatis 简介: iBatis 是apache 的一个开源项 ...

  4. IBatis入门

    iBatis 简介: iBatis 是apache 的一个开源项目,一个O/R Mapping 解决方案,iBatis 最大的特点就是小巧,上手很快.如果不需要太多复杂的功能,iBatis 是能够满足 ...

  5. Ibatis入门基本语法

    1.       Ibatis是开源软件组织Apache推出的一种轻量级的对象关系映射(ORM)框架,和Hibernate.Toplink等在java编程的对象持久化方面深受开发人员欢迎. 对象关系映 ...

  6. ibatis入门教程一

    这几天研究ibatis玩,参考一篇贴子进行安装配置:蓝雪森林 选择这个帖子来跟随配置是因为这个帖子看着比较干净,但是我仍旧在配置得过程中出现了好几个问题,所以我决定在这个帖子的基础上将更多细节加上,做 ...

  7. ibatis入门实例(完整)

    一:首先展示一下我的web文件结构,首先导入Ibatis所需jar和数据库驱动,从第二步开始跟着笔者一步步来 二:数据库建测试表 CREATE TABLE STUDENT ( ID NUMBER(5) ...

  8. Java后台技术IBATIS入门

    做过.net后台开发的同志一定用过Entity FrameWork,该框架实现了实体Entity到数据库行的映射,通过操作实体DataSet,就能够直接同步修改到数据库.但是Java暂时没有类似的技术 ...

  9. IBatis和Hibernate区别

    1. 简介 Hibernate是当前最流行的O/R mapping框架.它出身于sf.net,现在已经成为Jboss的一部分了.iBATIS是另外一种优秀的O/R mapping框架,现已改名叫myB ...

随机推荐

  1. scrapy增加爬取效率

    增加并发: 默认scrapy开启的并发线程为32个,可以适当进行增加.在settings配置文件中修改CONCURRENT_REQUESTS = 100值为100,并发设置成了为100. 降低日志级别 ...

  2. java_tcp_简单示例

    package netProgram; import java.io.DataOutputStream; import java.io.IOException; import java.net.Ser ...

  3. 2.10.4 aside元素

    aside元素 <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> < ...

  4. 允许IIS下载无后缀文件及“请求的内容似乎是脚本,因而将无法由静态文件处理程序来处理。”的解决方法

    1)增加MIME类型 ,如下 application/octet-stream 2)注意是"." , ".*"则适用于任何有文件后缀时使用,无后缀请不要加*

  5. 大项目之网上书城(九)——订单Demo

    目录 大项目之网上书城(九)--订单Demo 主要改动 1.OrderServiceImpl 代码 2.OrderDaoImpl 代码 3.OrderitemDaoImpl 代码 4.orderite ...

  6. NOIP专题复习1 图论-最短路

    一.知识概述 今天我们要复习的内容是图论中的最短路算法,我们在这里讲3种最短路求法,分别是:floyd,dijkstra,spfa. 那么我们从几道例题来切入今天讲解的算法. 二.典型例题 1.热浪 ...

  7. Python学习-列表的其它主要操作

    列表的其它主要操作 还记得之前使用del语句去清除一个列表中的所有内容,那么会因为把列表全部清空,所以输出会报错.可以使用clear() 完成 clear(self):可以将一个列表变成空列表 lis ...

  8. KBE——查询

    关于def文件的flags(这个标签表明了属性的作用域) 没有只在client的作用域

  9. [Python3网络爬虫开发实战] 2.4-会话和Cookies

    在浏览网站的过程中,我们经常会遇到需要登录的情况,有些页面只有登录之后才可以访问,而且登录之后可以连续访问很多次网站,但是有时候过一段时间就需要重新登录.还有一些网站,在打开浏览器时就自动登录了,而且 ...

  10. Python数据类型之数字类型

    整数 在Python中,整数可以执行 加(+)减(-)乘(*)除(/) 运算. 1 + 2 3 - 2 2 * 3 3 / 2 # 1.5 在控制台,Python直接返回运算结果. Python中也可 ...