近日,由于公司项目应用开发的逻辑层使用的是iBatis。上网查了些资料,自己写了点demo入门。感觉良好。iBatis实在是比Hibernate很容易入门,贡献出来与各路菜鸟分享(后文附源码),希望得到大神指教。转载请保留本文出处:http://itred.cnblogs.com ; 作者:itRed

  ORM框架中操作数据库的逻辑层中,Hibernate和iBatis相对来说是比较受欢迎的。Hibernate是“全自动”的,能够完全生成SQL语句;而iBatis是“半自动化”的,需要程序员根据自己的应用程序写相应的SQL语句。但是,在实际的开发过程中还是应根据实际情况进行选择。(iBatis的优缺点比较)

                                                   优点                                              缺点

与JDBC相比减少了很多的代码量;入门简单;架构级性能较强;

Sql语句和程序代码的分离;简化项目中的分工;

增强了移植性。

Sql语句需要程序员自己写;

参数数量只能一个,但是如果需要多个参数时,

需要将参数打包封装成Map等;

  

在进行iBatis应用程序开发之前首先需要对iBatis这个技术有一定的了解。iBatis是apache下的一个开源项目,因为其小巧,上手很快深受程序员的喜爱。iBatis的核心是SqlMap。

  本案例将详细介绍iBatis操作MySQL数据库。 利用iBatis对数据库中的记录进行简单的增删改查操作。测试方法main,显示结果到控制台。部分结果直接查看数据库信息。虽然demo比较简单,但是很能起到抛砖引玉的作用。

  数据准备:

数据库名称:ibatis

表名称:student

本人数据库中的数据信息:

案例解析及源码:

在正式操作数据库之前需要做一些准备工作,部分备注详见源码注释中:

首先需要导入ibatis的相关jar包,以及连接数据库的驱动jar包;在新建的项目文件下建一个Student的实体Bean。

package com.red;import java.util.Date;
/*** Student实体类* @author Red**/
public class Student {
//保证一个无参数方法。反射机制private int sid=0;private String sname=null;private String major=null;private Date birth=null;private int score=0;public int getSid() {return sid;}public void setSid(int sid) {this.sid = sid;}public String getSname() {return sname;}public void setSname(String sname) {this.sname = sname;}public String getMajor() {return major;}public void setMajor(String major) {this.major = major;}public Date getBirth() {return birth;}public void setBirth(Date birth) {this.birth = birth;}public int getScore() {return score;}public void setScore(int score) {this.score = score;}@Overridepublic String toString() { //重写toString方法,方便控制台显示String content="sid="+sid+"\tsname:"+sname+"\tmajor:"+major+"\tbirth:"+birth+"\tscore:"+score;return content;}}

Student.java

建一个接口以及它的实现类,为了测试方便直接将main方法放到该接口实现类中;

package com.red;import java.util.List;
/*** 接口* @author Red**/
public interface IStudentDAO {public void addStudent(Student student);public void deleteStudentById(int id);public void updateStudentById(Student studnet);public List<Student> queryAllStudent();public List<Student> queryStudentByName(String name);public Student queryStudentById(int id);
}

IStudentDAO

package com.red;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 IStudentDAOImpl implements IStudentDAO {private static SqlMapClient sqlMapClient=null;static{try{Reader reader=Resources.getResourceAsReader("com/red/SqlMapConfig.xml");sqlMapClient = SqlMapClientBuilder.buildSqlMapClient(reader);reader.close();}catch (Exception e) {e.printStackTrace();}}public void addStudent(Student student) {try {sqlMapClient.insert("insertStudent", student);} catch (SQLException e) {e.printStackTrace();}}public void deleteStudentById(int id) {try {sqlMapClient.delete("deleteStudentById",id);} catch (SQLException e) {e.printStackTrace();}}public List<Student> queryAllStudent() {List<Student>     studentList=null;;try {studentList=sqlMapClient.queryForList("selectAllStudent");} catch (SQLException e) {e.printStackTrace();}return studentList;}public Student queryStudentById(int id) {Student student=null;try {student=(Student) sqlMapClient.queryForObject("selectStudentById",id);} catch (SQLException e) {e.printStackTrace();}return student;}/*** 模糊查询*/public List<Student> queryStudentByName(String name) {List<Student> studentList=null;try {studentList=sqlMapClient.queryForList("selectStudentByName", name);} catch (SQLException e) {e.printStackTrace();}return studentList;}public void updateStudentById(Student student) {try {sqlMapClient.update("updateStudentById", student);} catch (SQLException e) {e.printStackTrace();}}public static void main(String[] args) {IStudentDAO dao=new IStudentDAOImpl();/*** 查询所有的学生对象*/for(Student student:dao.queryAllStudent()){//遍历student对象
            System.out.println(student);}/*** 查询指定id的学生对象Student student=dao.queryStudentById(1);System.out.println(student);//以上两行代码可缩写为:System.out.println(dao.queryStudentById(1));*//*** 插入学生对象数据Student student=new Student();student.setSid(3);student.setSname("小明");student.setMajor("应用化学");student.setBirth(Date.valueOf("2013-09-09"));student.setScore(88);dao.addStudent(student);*//*** 删除指定id的学生数据dao.deleteStudentById(1);*//*** 修改数据对象Student student=new Student();student.setSid(3);student.setSname("朱小明");student.setMajor("嵌入式开发");student.setBirth(Date.valueOf("2013-09-09"));student.setScore(68);dao.updateStudentById(student);*//*** 模糊查询for(Student student:dao.queryStudentByName("t")){System.out.println(student);}*/}
}

IStudentDAOImpl

建立一个SqlMap.properties的文件,该属性文件主要负责数据库的链接

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

SqlMap.properies

建立一个SqlMapConfig.xml文件,主要负责ibatis的配置

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sqlMapConfig PUBLIC "-//ibatis.apache.org//DTD SQLL Map Config 2.0//EN""http://ibatis.apache.org/dtd/sql-map-config-2.dtd"><sqlMapConfig><properties resource="com/red/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><sqlMap resource="com/red/Student.xml"/>
</sqlMapConfig>

SqlMapConfig.xml

建立实体类的映射文件(SQL语句就在其中)

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE sqlMapPUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN""http://ibatis.apache.org/dtd/sql-map-2.dtd"><sqlMap><typeAlias alias="student" type="com.red.Student"/><!-- 配置表和实体之间的映射关系 --><resultMap class="com.red.Student" id="student"><result property="sname" column="SNAME"/><result property="major" column="MAJOR"/><result property="birth" column="BIRTH"/><result property="score" column="SCORE"/></resultMap><select id="selectAllStudent" resultClass="student">SELECT SID,SNAME,MAJOR,BIRTH,SCORE FROM `ibatis`.`student`</select><select id="selectStudentById" parameterClass="int" resultClass="student">SELECT SID,SNAME,MAJOR,BIRTH,SCORE FROM `ibatis`.`student`WHERE SID=#sid#</select><insert id="insertStudent" parameterClass="student">INSERT INTO `ibatis`.`student`(SID,SNAME,MAJOR,BIRTH,SCORE)values(#sid#,#sname#,#major#,#birth#,#score#)</insert><delete id="deleteStudentById" parameterClass="int">DELETE FROM `ibatis`.`student`WHERE sid=#sid#</delete><update id="updateStudentById" parameterClass="student">UPDATE `ibatis`.`student` SETSNAME=#sname#,MAJOR=#major#,BIRTH=#birth#,SCORE=#score#WHERE sid=#sid#</update><select id="selectStudentByName" parameterClass="String" resultClass="student">SELECT SID,SNAME,MAJOR,BIRTH,SCORE FROM `ibatis`.`student`WHERE SNAME LIKE '%$sname$%'</select>
</sqlMap>

Student.xml

ibatis查询数据库所有数据(重点解析本查询案例,另外的几个操作很简单,源码附注释,很容易看懂。不懂可以Email我。)

1 public List<Student> queryAllStudent() {
2         List<Student>     studentList=null;;
3         try {
4             studentList=sqlMapClient.queryForList("selectAllStudent");
5         } catch (SQLException e) {
6             e.printStackTrace();
7         }
8         return studentList;
9     }

Student中的SQL语句:

前几日刚在公司学到的经验,程序员在写SQL语句中的字段和关键字时尽量大写,显得专业,而且提高数据库的查询效率。

<select id="selectAllStudent" resultClass="student">SELECT SID,SNAME,MAJOR,BIRTH,SCORE FROM `ibatis`.`student`</select>

Main方法中的测试代码:

IStudentDAO dao=new IStudentDAOImpl();
for(Student student:dao.queryAllStudent()){//遍历student对象
            System.out.println(student);}

运行结果:

iBatis 模糊查询

iBatis 添加数据记录

iBatis 修改数据记录

iBatis 删除数据记录

这些操作都可以依葫芦画瓢,后文附本DEMO的源码,欢迎各位来邮交流学习心得。E-mail: it_red@sina.com

测试时,只需要去除要运行部分的注释。右击测试main方法就可顺利在控制台看到运行结果。

本文源码下载链接

   作者:itRed出处:http://itred.cnblogs.com版权声明:本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段说明,且在文章明显位置给出原文链接,否则保留追究法律责任的权利。

转载于:https://www.cnblogs.com/itred/p/3947038.html

ibatis轻松入门相关推荐

  1. 想轻松入门Python编程,这10个经典案例你还不知道嘛?

    一直以来,Python都是一门很简单的编程语言,其实无论你有没有基础,学起来都不难. 但,必须有方法,而最好的方法其实就是学+练,即:基本常识+这10经典案例. 而同时有着系统的Python基础知识点 ...

  2. python从入门到项目实战李兴华网盘_贺胜军Python轻松入门到项目实战【经典完整版】...

    贺胜军Python轻松入门到项目实战课程目录 01_Python基本概述 01_计算机组成_操作系统.avi 02_计算机的进制.avi 03_数据存储单位1.avi 04_编码和解码.avi 05_ ...

  3. 统一建模语言UML轻松入门系列

    第五讲:统一建模语言UML轻松入门之综合实例 第四讲:统一建模语言UML轻松入门之动态建模 第三讲:统一建模语言UML轻松入门之静态建模:类和对象 第二讲:统一建模语言UML轻松入门之静态建模:用例 ...

  4. Golang并发模型:轻松入门协程池

    goroutine是非常轻量的,不会暂用太多资源,基本上有多少任务,我们可以开多少goroutine去处理.但有时候,我们还是想控制一下. 比如,我们有A.B两类工作,不想把太多资源花费在B类务上,而 ...

  5. OpenGL编程轻松入门(一)

    OpenGL编程轻松入门(一) (由同事黄燕创作)   本文介绍了有关OpenGL的基本知识,主要涉及颜色.绘制几何体.坐标变换.堆栈操作.显示列表.光照和材质.纹理映射.特殊效果.曲面和曲线的绘制. ...

  6. asp.net core轻松入门之MVC中Options读取配置文件

    接上一篇中讲到利用Bind方法读取配置文件 ASP.NET Core轻松入门Bind读取配置文件到C#实例 那么在这篇文章中,我将在上一篇文章的基础上,利用Options方法读取配置文件 首先注册MV ...

  7. 统一建模语言UML轻松入门(3)――静态建模:类和对象

    统一建模语言UML轻松入门(3)――静态建模:类和对象 --------------------------------------------------------------------- 宋宝 ...

  8. 日语输入法电脑版_日语轻松入门小百科

    如果你一直以来都对日语抱有强烈的兴趣,那么就赶紧跟我一起轻松入门吧~ 科普之一:日语五十音图 什么是假名?什么是五十音图? 日语的字母叫做假名,每个假名代表一个音节.假名有两种书写方式,即平假名和片假 ...

  9. 公钥,私钥和数字签名这样理解轻松入门!

    公钥,私钥和数字签名这样理解轻松入门! 参考博文:https://blog.csdn.net/21aspnet/article/details/7249401 (公钥和私钥是成对出现的,可以把他们看成 ...

最新文章

  1. smooth_L1_loss_layer.cu解读 caffe源码初认识
  2. js php 正则差别,JavaScript正则表达式的浏览器的差异
  3. 什么是比特币?比特币的发展史,什么是挖矿?
  4. 11款实用的一句话网站设计代码
  5. 【Java】Java文件读写
  6. etal斜体吗 参考文献_论文参考文献格式要求
  7. matlab 求矩阵奇异值,MATLAB矩阵特征值和奇异值.
  8. B站收藏夹快速导出详细步骤
  9. 出"程序员"身上的"六宗罪"
  10. 乐观的态度使工作充满激情
  11. Vulkan编程指南翻译 第六章 着色器和管线 第2节 SPIR-V 概述
  12. httpwatch使用_使用PHP自动化HTTPWatch
  13. 华为高层谈 35 岁危机,程序员如何破年龄之忧?
  14. 女生学大数据好就业吗?前景如何?
  15. 49种软件验收测试方法大分享,快来看
  16. PO:通过Floder限制订单汇总中采购单价及金额栏位
  17. matlab中利用xy求取多项式z,matlab基础练习题
  18. 猫和老鼠服务器维护多久结束,猫和老鼠手游:长时间不玩游戏,再次进入游戏后会发生这些事...
  19. 安氏图书报刊发行管理软件[酷软推荐]
  20. 华为云IoT设备接入服务全体验

热门文章

  1. jvm诊断与优化(3)
  2. div居中 边框设置 文字行高设置
  3. 延迟加载图片并监听图片加载完成
  4. c#判断输入textbox是否为数字
  5. 【Git入门之十二】DIY Git
  6. ASP.NET MVC 实现模式 - ModelBuilder
  7. 单网卡部署WEB+Mail+FTP+ISA服务器之四:局域网内部署FTP和winwebmail服务器
  8. MySQL Proxy 安装与读写分离体验
  9. pdo php分页6,php pdo自动分页类代码与例子
  10. java 缘起_缘起 网络编程