初学ibatis
来源:互联网 发布:淘宝搜索排行榜 编辑:程序博客网 时间:2024/05/29 16:29
ibatis是一种“半自动化”的ORM实现。所谓“半自动”,是相对于目前主流的ORM的“全自动”,无论Hibernate 还是ApacheOJB都对数据库结构提供了较为完整的封装,提供了从POJO 到数据库表的全套映射机制。程序员往往只需定义好了POJO 到数据库表的映射关系,即可通过Hibernate或者OJB 提供的方法完成持久层操作。程序员甚至不需要对SQL 的熟练掌握,Hibernate/OJB 会根据制定的存储逻辑,自动生成对应的SQL 并调用JDBC 接口加以执行。 而ibatis并不会为程序员在运行期自动生成SQL 执行。具体的
SQL 需要程序员编写,然后通过映射配置文件,将SQL所需的参数,以及返回的结果字段映射到指定POJO;
iBatis (http://www.ibatis.com) 下载网址 download下来,看看里面的例子就可以玩了。
下面就是一个Student 简单的增删改查
Student
- package com.donsoft;
- public class Student {
- private int id;
- private String name;
- private String sex;
- private int age;
- public int getAge() {
- return age;
- }
- public int getId() {
- return id;
- }
- public String getName() {
- return name;
- }
- public String getSex() {
- return sex;
- }
- public void setAge(int age) {
- this.age = age;
- }
- public void setId(int id) {
- this.id = id;
- }
- public void setName(String name) {
- this.name = name;
- }
- public void setSex(String sex) {
- this.sex = sex;
- }
- @Override
- public String toString() {
- String content = "name:" + name + "/tsex:" + sex + "/tage:" + age;
- return content;
- }
- }
IStudentDAO
- package com.donsoft;
- import java.sql.SQLException;
- import java.util.List;
- public interface IStudentDAO {
- public void insertStudent(Student student);
- public void insertStudentBySequence(Student student)throws SQLException;
- public void deleteStudentById(int id) throws SQLException;
- public void updataStudent(Student student) throws SQLException;
- public List<Student> queryAllStudent() throws SQLException;
- public List<Student> queryAllStudentByName(String name) throws SQLException;
- public Student queryStudnetById(int id) throws SQLException;
- }
IStudnetDAOImpl
- package com.donsoft;
- import java.io.IOException;
- 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/donsoft/SqlMapConfig.xml");
- sqlMapClient = SqlMapClientBuilder.buildSqlMapClient(reader);
- reader.close();
- } catch (IOException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- }
- @Override
- public void deleteStudentById(int id) throws SQLException {
- sqlMapClient.delete("deleteStudentById",id);
- }
- @Override
- public void insertStudent(Student student) {
- // TODO Auto-generated method stub
- try {
- sqlMapClient.insert("addStudent",student);
- } catch (SQLException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- }
- @Override
- public List<Student> queryAllStudent() throws SQLException{
- List<Student> studentlist=sqlMapClient.queryForList("selectAllStu");
- return studentlist;
- }
- @Override
- public List<Student> queryAllStudentByName(String name) throws SQLException {
- List<Student> studentlist = sqlMapClient.queryForList("selectStudentByName",name);
- return studentlist;
- }
- @Override
- public Student queryStudnetById(int id) throws SQLException {
- // TODO Auto-generated method stub
- Student student = (Student) sqlMapClient.queryForObject("selectStudentById",id);
- return student;
- }
- @Override
- public void updataStudent(Student student) throws SQLException {
- System.out.print(sqlMapClient.update("updateStudentById",student));
- }
- @Override
- public void insertStudentBySequence(Student student) throws SQLException {
- sqlMapClient.insert("selectStudentSequence",student);
- System.out.println("id="+student.getId());
- }
- /**
- * @param args
- */
- }
Studnet.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>
- <typeAlias alias="Student" type="com.donsoft.Student"/>
- <select id="selectAllStu" resultClass="Student">
- select * from student
- </select>
- <insert id="addStudent" parameterClass="Student">
- INSERT INTO student(id,name,sex,age) VALUES(#id#,#name#,#sex#,#age#)
- </insert>
- <insert id="selectStudentSequence" parameterClass="Student">
- <selectKey resultClass="int" keyProperty="Student">
- select studentPKSequence.nextVal
- from dual
- </selectKey>
- insert into student(id,name,sex,age) values(#id#,#name#,#sex#,#age#)
- </insert>
- <select id="selectStudentById" parameterClass="int" resultClass="Student">
- select * from student where id=#id#
- </select>
- <delete id="deleteStudentById" parameterClass="int">
- delete from student where id=#id#
- </delete>
- <update id="updateStudentById" parameterClass="Student">
- update student set
- name=#name#,
- sex=#sex#,
- age=#age#
- where id=#id#
- </update>
- <select id="selectStudentByName" parameterClass="String" resultClass="Student">
- select * from student
- where name like '%$name$%' or sex like '$%sex%$'
- </select>
- </sqlMap>
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">
- <!-- Ibatis配置文件-->
- <sqlMapConfig>
- <!-- 加载连接数据库属性文件 -->
- <properties resource="com/donsoft/SqlMapConfig.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/donsoft/Student.xml"/>
- </sqlMapConfig>
SqlMapConfig.properties
- driver=com.microsoft.jdbc.sqlserver.SQLServerDriver
- url=jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=testDB;SelectMethod=cursor
- username=sa
- password=123456
ibatis与hibernate的比较:
hibernate 它是全封闭式的,对数据库的操作提供了完整封装,所有的SQL都是自动生成和执行,开发人员不需要再关注底层的建设,甚至不需要开发人员对SQL的熟练掌握,所有操作都是java对象,而更注重业务逻辑,开发人员只需定义好POJO与数据库的映射(*.hbm.xml),在对数据操作时只需调用hibernate 提供的方法完成数据层的操作,hibernate/OJB 会根据制定的存储逻辑,自动生成相应的SQL并调用JDBC接口完成执行;ibatis 它是半封闭式的,何为半封闭式,这相对hibernate 对比,ibatis的着力点则在于POJO与SQL之间的映射关系,所有的SQL都需要开发人员在映射文件编写,通过这个映射文件的配置,将SQL所需要的参数传入进去和返回的结果字段映射到指定的POJO,而且ibatis最好的一个亮点在于可以操作存储过程。iBATIS需要手写sql语句,也可以生成一部分,Hibernate则基本上可以自动生成,偶尔会写一些Hql。同样的需求,iBATIS的工作量比Hibernate要大很多。类似的,如果涉及到数据库字段的修改,Hibernate修改的地方很少,而iBATIS要把那些sqlmapping的地方一一修改。以数据库字段一一对应映射得到的PO和Hibernate这种对象化映射得到的PO是截然不同的,本质区别在于这种PO是扁平化的,不像Hibernate映射的PO是可以表达立体的对象继承,聚合等等关系的,这将会直接影响到你的整个软件系统的设计思路。
- 初学ibatis
- 初学ibatis
- ibatis 初学
- ibatis初学
- 初学Ibatis
- 初学ibatis过程
- ibatis 初学小结
- 初学ibatis 学习笔记一
- 初学springmvc 3 + ibatis框架
- 初学ibatis时容易犯的错误
- 初学ibatis,总结遇到的问题(一)
- ibatis
- iBatis
- ibatis
- iBatis
- ibatis
- ibatis
- IBATIS
- 写个学校中兴实验室的实验手册
- 一篇很好的激励文章
- 学习javascript的一点心得
- 月薪6000与月薪30000
- 要期末考了
- 初学ibatis
- 比较好的二级公共基础题
- study
- 如何在html中实现代码高亮语法着色
- 从今天开始,我每天要坚持学java
- 2010年IT经理必须拥有的五项管理技术
- 被127次掌声打断的浙江大学教授郑强的经典语录.(大家都看
- = =
- 新加的!!