ibatis轻松入门
近日,由于公司项目应用开发的逻辑层使用的是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轻松入门相关推荐
- 想轻松入门Python编程,这10个经典案例你还不知道嘛?
一直以来,Python都是一门很简单的编程语言,其实无论你有没有基础,学起来都不难. 但,必须有方法,而最好的方法其实就是学+练,即:基本常识+这10经典案例. 而同时有着系统的Python基础知识点 ...
- python从入门到项目实战李兴华网盘_贺胜军Python轻松入门到项目实战【经典完整版】...
贺胜军Python轻松入门到项目实战课程目录 01_Python基本概述 01_计算机组成_操作系统.avi 02_计算机的进制.avi 03_数据存储单位1.avi 04_编码和解码.avi 05_ ...
- 统一建模语言UML轻松入门系列
第五讲:统一建模语言UML轻松入门之综合实例 第四讲:统一建模语言UML轻松入门之动态建模 第三讲:统一建模语言UML轻松入门之静态建模:类和对象 第二讲:统一建模语言UML轻松入门之静态建模:用例 ...
- Golang并发模型:轻松入门协程池
goroutine是非常轻量的,不会暂用太多资源,基本上有多少任务,我们可以开多少goroutine去处理.但有时候,我们还是想控制一下. 比如,我们有A.B两类工作,不想把太多资源花费在B类务上,而 ...
- OpenGL编程轻松入门(一)
OpenGL编程轻松入门(一) (由同事黄燕创作) 本文介绍了有关OpenGL的基本知识,主要涉及颜色.绘制几何体.坐标变换.堆栈操作.显示列表.光照和材质.纹理映射.特殊效果.曲面和曲线的绘制. ...
- asp.net core轻松入门之MVC中Options读取配置文件
接上一篇中讲到利用Bind方法读取配置文件 ASP.NET Core轻松入门Bind读取配置文件到C#实例 那么在这篇文章中,我将在上一篇文章的基础上,利用Options方法读取配置文件 首先注册MV ...
- 统一建模语言UML轻松入门(3)――静态建模:类和对象
统一建模语言UML轻松入门(3)――静态建模:类和对象 --------------------------------------------------------------------- 宋宝 ...
- 日语输入法电脑版_日语轻松入门小百科
如果你一直以来都对日语抱有强烈的兴趣,那么就赶紧跟我一起轻松入门吧~ 科普之一:日语五十音图 什么是假名?什么是五十音图? 日语的字母叫做假名,每个假名代表一个音节.假名有两种书写方式,即平假名和片假 ...
- 公钥,私钥和数字签名这样理解轻松入门!
公钥,私钥和数字签名这样理解轻松入门! 参考博文:https://blog.csdn.net/21aspnet/article/details/7249401 (公钥和私钥是成对出现的,可以把他们看成 ...
最新文章
- smooth_L1_loss_layer.cu解读 caffe源码初认识
- js php 正则差别,JavaScript正则表达式的浏览器的差异
- 什么是比特币?比特币的发展史,什么是挖矿?
- 11款实用的一句话网站设计代码
- 【Java】Java文件读写
- etal斜体吗 参考文献_论文参考文献格式要求
- matlab 求矩阵奇异值,MATLAB矩阵特征值和奇异值.
- B站收藏夹快速导出详细步骤
- 出"程序员"身上的"六宗罪"
- 乐观的态度使工作充满激情
- Vulkan编程指南翻译 第六章 着色器和管线 第2节 SPIR-V 概述
- httpwatch使用_使用PHP自动化HTTPWatch
- 华为高层谈 35 岁危机,程序员如何破年龄之忧?
- 女生学大数据好就业吗?前景如何?
- 49种软件验收测试方法大分享,快来看
- PO:通过Floder限制订单汇总中采购单价及金额栏位
- matlab中利用xy求取多项式z,matlab基础练习题
- 猫和老鼠服务器维护多久结束,猫和老鼠手游:长时间不玩游戏,再次进入游戏后会发生这些事...
- 安氏图书报刊发行管理软件[酷软推荐]
- 华为云IoT设备接入服务全体验