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轻松入门的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: [转]C#开发ActiveX控件,.NE
- 下一篇: 线程编程常见API简介(上)