IBatis介绍1

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS PostgreSQL,高可用系列 2核4GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介:
   由于之前写的文章在提交的时候出错,导致没保存上 。重新打起精神,继续这篇Ibatis的基础介绍。

1、Ibatis功能简介

  Ibatis用于完成OR的映射,但又没有Hibernate那么复杂,它只是减少了sql在java代码中的出现,sql语句都在xml配置文件中去完成。需要引入mysql的驱动包和Ibatis的包即可,本次使用的是mysql5.1、Ibatis2.3.4版本。文章下面有附件,包含了本次的代码、驱动和ibatis的jar包。

2、具体步骤如下:

1)在Mysql中创建表
create  table t_user(id  intname  varchar(10), sex  int);
 
2)创建POJO类: User.java
package com.ctgusec.zhupan.model;

import java.io.Serializable;

public  class User  implements Serializable {
   private  static  final  long serialVersionUID = 1L;
   private Integer id;
   private String name;
   private Integer sex;

   public Integer getId() {
     return id;
  }

   public  void setId(Integer id) {
     this.id = id;
  }

   public String getName() {
     return name;
  }

   public  void setName(String name) {
     this.name = name;
  }

   public Integer getSex() {
     return sex;
  }

   public  void setSex(Integer sex) {
     this.sex = sex;
  }

   public  static  long getSerialversionuid() {
     return serialVersionUID;
  }
}
 
3)创建User类的对应Ibatis配置文件:User.xml, 在包com.ctgusec.zhupan.maps下面
<? 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  namespace ="User" >

   < typeAlias  alias ="user"  type ="com.ctgusec.zhupan.model.User"  />
   < select  id ="getUser"  parameterClass ="java.lang.String"
     resultClass ="user" >

    select name,sex from t_user
    where name = #name#
   </ select >

   < select  id ="getAllUser"  resultClass ="user" >

    select
    name,
    sex
    from t_user
   </ select >

   < update  id ="updateUser"  parameterClass ="user" >

    UPDATE t_user
    SET
    name=#name#,
    sex=#sex#
    WHERE id = #id#
   </ update >

   < insert  id ="insertUser"  parameterClass ="user" >
    INSERT INTO t_user (name,
    sex) VALUES ( #name#, #sex# )
   </ insert >

   < delete  id ="deleteUser"  parameterClass ="java.lang.String" >
    delete from t_user
    where
    id=#value#
   </ delete >

</ sqlMap >    
 
4)配置Ibatis的总控文件:SqlMapConfig.xml,在包com.ctgusec.zhupan.maps下面
<? 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">

< sqlMapConfig >

   < settings  cacheModelsEnabled ="true"  enhancementEnabled ="true"
     lazyLoadingEnabled ="true"  errorTracingEnabled ="true"  maxRequests ="32"
     maxSessions ="10"  maxTransactions ="5"  useStatementNamespaces ="false"  />

   < transactionManager  type ="JDBC" >
     < dataSource  type ="SIMPLE" >
       < property  name ="JDBC.Driver"  value ="com.mysql.jdbc.Driver"  />
       < property  name ="JDBC.ConnectionURL"  value ="jdbc:mysql://localhost:3306/ibatis"  />
       < property  name ="JDBC.Username"  value ="root"  />
       < property  name ="JDBC.Password"  value ="123"  /> <!--com测试admin-->
       < property  name ="Pool.MaximumActiveConnections"  value ="10"  />
       < property  name ="Pool.MaximumIdleConnections"  value ="5"  />
       < property  name ="Pool.MaximumCheckoutTime"  value ="120000"  />
       < property  name ="Pool.TimeToWait"  value ="500"  />
       < property  name ="Pool.PingQuery"  value ="select 1 from sample"  />
       < property  name ="Pool.PingEnabled"  value ="false"  />
       < property  name ="Pool.PingConnectionsOlderThan"  value ="1"  />
       < property  name ="Pool.PingConnectionsNotUsedFor"  value ="1"  />

     </ dataSource >
   </ transactionManager >

   < sqlMap  resource ="com/ctgusec/zhupan/maps/User.xml"  />
</ sqlMapConfig >    
 
5)对Ibatis的调用,只需要调用Ibatis的POJO对应的配置文件中的id即可
package com.ctgusec.zhupan;

import java.sql.SQLException;
import java.util.List;
import com.ctgusec.zhupan.model.User;
import com.ibatis.sqlmap.client.SqlMapClientBuilder;

public  class ExampleMain {
   public  static  void update() {
     // 首先初始化iBatis获得一个SqlMapClient对象
    String resource =  "com/ctgusec/zhupan/maps/SqlMapConfig.xml";
    com.ibatis.sqlmap.client.SqlMapClient sqlMap =  null;
     try {
      java.io.Reader reader = com.ibatis.common.resources.Resources
          .getResourceAsReader(resource);
      sqlMap = SqlMapClientBuilder.buildSqlMapClient(reader);
    }  catch (Exception e) {
      e.printStackTrace();
    }
     // sqlMap系统初始化完毕,开始执行update操作
     try {
      sqlMap.startTransaction();
      User user =  new User();
      user.setId( new Integer(1));
      user.setName( "zhupan");
      user.setSex( new Integer(1));
      sqlMap.update( "updateUser", user);
      sqlMap.commitTransaction();
    }  catch (SQLException e) {
      System.out.println(e.getMessage());
    }  finally {
       try {
        sqlMap.endTransaction();
      }  catch (SQLException e) {
        e.printStackTrace();
      }
    }
  }

   public  static List getUser() {
     // 首先初始化iBatis获得一个SqlMapClient对象
    String resource =  "com/ctgusec/zhupan/maps/SqlMapConfig.xml";
    com.ibatis.sqlmap.client.SqlMapClient sqlMap =  null;
    List user =  null;
     try {
      java.io.Reader reader = com.ibatis.common.resources.Resources
          .getResourceAsReader(resource);
      sqlMap = SqlMapClientBuilder.buildSqlMapClient(reader);
    }  catch (Exception e) {
      e.printStackTrace();
    }
     // sqlMap系统初始化完毕,开始执行getAllUser操作
     try {
      sqlMap.startTransaction();
      user = sqlMap.queryForList( "getAllUser"null);
      sqlMap.commitTransaction();
    }  catch (SQLException e) {
      System.out.println(e.getMessage());
    }  finally {
       try {
        sqlMap.endTransaction();
      }  catch (SQLException e) {
        e.printStackTrace();
      }
    }
     return user;
  }

   public  static  void main(String[] args) {
     // update();
    List user = getUser();
     //System.out.println(user.size());
      for ( int i = 0; i < user.size(); i++) {
     System.out.println(((User) user.get(i)).getName());
     }

  }
}
 
6) 测试,运行结果如下
zhangsan
lisi
wangwu

3、总结

  Ibatis减少了sql语句在java代码中的出现,java编程只需要操作对象就可以了,是面向对象的编程更加的纯洁。
 
【注意】
1、dbcp直连mysql数据库

 
 
  1. Properties pros = new Properties(); 
  2.     pros.put("driverClassName""com.mysql.jdbc.Driver"); 
  3.     pros.put("url""jdbc:mysql://10.20.144.27:3306/druid"); 
  4.     pros.put("username""druid"); 
  5.     pros.put("password""druid123"); 
  6.     DataSource dataSource = BasicDataSourceFactory.createDataSource(pros); 
Connection conn = dataSource.getConnection();


本文转自 tianya23 51CTO博客,原文链接:http://blog.51cto.com/tianya23/275606,如需转载请自行联系原作者
相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。 &nbsp; 相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/mysql&nbsp;
相关文章
|
JavaScript 前端开发 Java
《正则表达式经典实例(第2版)》——1.3 正则表达式工具
除非已经拥有了相当长的使用正则表达式编程的经验,否则建议你先在一个工具中试验一下正则表达式,而不是直接在源代码中使用它们。本章和第2章中提供的正则表达式示例都是原始正则表达式,其中并不包含编程语言(即使是Unlx shell)所必需的额外的转义符号。
2561 0
|
2月前
|
人工智能 机器人 计算机视觉
当AI有了“分身”:虚拟化身与情感交互的实战指南
当AI有了“分身”:虚拟化身与情感交互的实战指南
302 0
|
关系型数据库 MySQL Java
com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException 异常解决
com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException 异常解决
|
存储 固态存储 关系型数据库
PostgreSQL核心操作之数据备份恢复
PostgreSQL核心操作之数据备份恢复
1214 0
|
XML 前端开发 Java
SpringMVC中<mvc:annotation-driven/>标签原理与实践详解
SpringMVC中<mvc:annotation-driven/>标签原理与实践详解
392 0
【分享】下拉选项,远程获取数据,根据条件设置颜色,并按颜色排序
有时候需要用下拉选项来只管展示数据的(库存)剩余情况,我拿宜搭下拉选择组件的颜色属性来做展示(大家可以举一反三)
610 1
|
SQL Java 调度
SpringBoot 整合 Quartz 定时任务框架
SpringBoot 整合 Quartz 定时任务框架
593 0
|
SQL 监控 关系型数据库
RDS怎么查看存储空间的详细使用情况?
RDS怎么查看存储空间的详细使用情况?
RDS怎么查看存储空间的详细使用情况?
|
SQL JSON Java
Seata分布式事务模式(TA、TCC、XA、SAGA)工作机制
分布式应用有一个比较明显的问题就是,一个业务流程通常需要几个服务来完成,业务的一致性很难保证。为了保障业务一致性,每一步都要在 catch 里去处理前面所有的“回滚”操作,可读性及维护性差,开发效率低下。
1098 0
|
消息中间件 NoSQL 安全
面试官必问的 3 道 MQ 面试题,还有谁不会??
面试官必问的 3 道 MQ 面试题,还有谁不会??
448 0
面试官必问的 3 道 MQ 面试题,还有谁不会??