在JAVA EE应用程序中,持久层框架常用的有:Hibernate和IBATIS(或MyBatis),Hibernate是全自动的,IBatis是半自动的。

IBatis的主要的作用是把SQL语句从我们的应用程序中给抽离出来(把SQL语句写到相应的配置文件当中),实现应用程序和SQL语句的解耦,让我们的应用程序看上去更加优雅,也便于后期的维护。根据上述描述,IBatis框架要求程序熟稔掌握SQL语句的编写。

1.使用IBatis框架的步骤:

导入相应的jar包
配置IBatis的配置文件    sqlmapconfig.xml
配置映射文件
加载配置文件和映射文件获取SqlClientMap对象
使用SqlClientMap完成CRUD操作

2.为了在开发过程更加直观,我们需要将 ibatis 日志打开以便观察 ibatis 运作的细节。ibatis 采用 Apache common_logging,并结合 Apache log4j 作为日志输出组件。在CLASSPATH 中新建 log4j.properties 配置文件,内容如下:

log4j.rootLogger=debug,stdout,logfile
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.SimpleLayout
log4j.appender.logfile=org.apache.log4j.FileAppender
log4j.appender.logfile.File=D:/test.log
log4j.appender.logfile.layout=org.apache.log4j.PatternLayout
log4j.appender.logfile.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %F %p %m%n log4j.logger.com.ibatis=DEBUG
log4j.logger.com.ibatis.common.jdbc.SimpleDataSource=DEBUG
log4j.logger.com.ibatis.common.jdbc.ScriptRunner=DEBUG
log4j.logger.com.ibatis.sqlmap.engine.impl.SqlMapClientDelegate=DEBUG
log4j.logger.java.sql.Connection=DEBUG
log4j.logger.java.sql.Statement=DEBUG
log4j.logger.java.sql.PreparedStatement=DEBUG

  

3.配置文件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"> <sqlMapConfig>
<!--
在ibatis中如果要加注释,一定要注意前后要有空格,否则iBATIS不能正确解析
配置文件 千万千万要注意
--> <!--
settings标签属性释义:
【cacheModelsEnabled】是否启用SqlMapClient上的缓存机制,建议启用
【enhancementEnabled】是否针对POJO实体启用字节码增强机制,以提升getter/setter
的调用效能,避免使用Java Reflect带来的性能开销。同时,这也为Lazy Loading带来了极大的性能提升
建议设置为true
【errorTracingEnabled】是否启用错误日志。在开发期间,建议启用,便于调试。
【lazyLoadingEnabled】是否启用延迟加载机制,建议启用
【useStatementNamespaces】是否使用Statement命名空间
这里命名命名空间指的是配置文件中SqlMap节点的namespace属性值,比如
<sqlMap namespace="User">
指定命名过后,且该值为true的情况下,那么在访问sql语句的时候就要加上命名空间,
比如:sqlMap.update("User.updateUser",user);
-->
<settings
useStatementNamespaces="true"
cacheModelsEnabled="true"
lazyLoadingEnabled="true"
enhancementEnabled="true"
/>
<!-- 指定事务管理策略为JDBC【即默认使用Connection对象的commit和rollback实现事务管理】 -->
<transactionManager type="JDBC">
<!-- dataSource用于配置数据源【数据库连接池】,它从属于transactionManager -->
<dataSource type="SIMPLE">
<property name="JDBC.Driver" value="oracle.jdbc.driver.OracleDriver"/>
<property name="JDBC.ConnectionURL" value="jdbc:oracle:thin:@localhost:1521:orcl"/>
<property name="JDBC.Username" value="scott"/>
<property name="JDBC.Password" value="orcl123"/>
<!-- 设置为自动提交,这样的话,就不用每一次都手动 提交 -->
<property name="JDBC.AutoCommit" value="true"/> <property name="Pool.MaximumActiveConnections" value="10"/>
<property name="Pool.MaximumIdleConnections" value="5"/>
<!-- 数据库连接池中的数据库连接对象被某一个任务占用的最大的时间,当超过这一时间,将被强制收回。
该属性值一般要指定大一点。
-->
<property name="Pool.MaximumCheckoutTime" value="150000"/>
<!-- 当一个线程需要数据库连接对象,而现在连接池中已经没有空闲的数据库连接对象了,
那么现在线程进入等待状态,该参数设置了线程最大等待多长时间。
-->
<property name="Pool.MaximumTimeToWait" value="500"/> <!--
连接状态检测语句
用于检查数据库连接池中的数据库连接对象是否可用。
避免用户拿到的是一个无效的数据库连接对象
-->
<property name="Pool.PingQuery" value="select 1 from User"/>
<!-- 是否运行检测连接状态 -->
<property name="Pool.PingEnabled" value="false"/>
<!-- 对持续连接时间超过设定值【毫秒】的连接进行检测 -->
<property name="Pool.PingConnectionsOrderThan" value="10"/>
<!-- 对空闲超过设定值【毫秒】的连接进行检测 -->
<property name="Pool.PingConnectionsNotUsedFor" value="10"/>
</dataSource>
</transactionManager> <!-- 在IBatis中,虽然不能称之为映射文件,但实体类对应的SQL语句配置文件还是尽量和实体类在同一路径下 -->
<sqlMap resource="pojo/User.xml"/> </sqlMapConfig>

4.USER

public class User {

	private int userid;
private String username;
private int age;
//省略 getter setter...
}

5.User.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 namespace="User"> <typeAlias alias="user" type="pojo.User"/> <select id="getUser" parameterClass="java.lang.String" resultClass="user">
select id,name,age from tuser where username=#name#
</select>
</sqlMap>

  

6.测试。

@Test
public void testGetUser(){
Reader reader = null;
try {
reader = Resources.getResourceAsReader("SqlMapConfig.xml");
SqlMapClient smc = SqlMapClientBuilder.buildSqlMapClient(reader);
User user = new User();
user=(User) smc.queryForObject("User.getUser", "tom");
System.out.println(user.getUserid()+user.getUsername()+user.getAge());
} catch (IOException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
} }

  

初识iBatis的更多相关文章

  1. ibatis的初识

    在工作中,服务端的框架基本上是struts+spring+ibatis+velocity.ibatis曾经没有接触到,而曾经使用的hibernate在公司居然没碰着.同样都是数据库封装,为什么没有选择 ...

  2. mybatis入门--初识mybatis

    初识mybatis 今天,一起来说说mybits这个框架吧.这是一个持久层的框架.之前叫做ibatis.所以,在它的代码中出现ibatis这个词的时候,不要感到惊讶.不是写错了,它确实就是这个样子的. ...

  3. MyBatis 框架系列之基础初识

    MyBatis 框架系列之基础初识 1.什么是 MyBatis MyBatis 本是 apache 的一个开源项目 iBatis,后改名为 MyBatis,它 是一个优秀的持久层框架,对 jdbc 的 ...

  4. MyBatis For .NET学习- 初识MyBatis

    MyBatis的框架. Introduction MyBatis本是apache的一个开源项目iBatis,2010年这个项目由 apache software foundation迁移到了googl ...

  5. 初识Mybatis之工程搭建

    简介:MyBatis 是一款优秀的持久层框架,它支持定制化 SQL.存储过程以及高级映射.MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集.MyBatis 可以使用简单的 ...

  6. MyBatis学习01(初识MyBatis和CRUD操作实现)

    1.初识MyBatis 环境说明: jdk 8 + MySQL 5.7.19 maven-3.6.1 IDEA 学习前需要掌握: JDBC MySQL Java 基础 Maven Junit 什么是M ...

  7. 值得注意的ibatis动态sql语法格式

    一.Ibatis常用动态sql语法,简单粗暴用一例子 <select id="iBatisSelectList" parameterClass="java.util ...

  8. org.apache.ibatis.binding.BindingException: Invalid bound statement (not found):

    org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): da.huying.usermanag ...

  9. Android动画效果之初识Property Animation(属性动画)

    前言: 前面两篇介绍了Android的Tween Animation(补间动画) Android动画效果之Tween Animation(补间动画).Frame Animation(逐帧动画)Andr ...

随机推荐

  1. 对mysql修改库里面所有的引擎mysaim 为 innodb

    1.查看当前数据引擎的命令: show engines; 2. USE `[DBNAME]`; SELECT GROUP_CONCAT(CONCAT( 'ALTER TABLE ' ,TABLE_NA ...

  2. daily_journal_3 the game of thrones

    昨晚追完了最爱的美剧(the game of thrones),哇,看到结局有点崩溃.果然还是美帝淫民开放,各种乱伦,在七夕收到的万点暴击就祝天下有情人就像剧中一样终是血亲. 昨天算是完成了git的复 ...

  3. 二分图判定+点染色/并查集 BestCoder Round #48 ($) 1002 wyh2000 and pupil

    题目传送门 /* 二分图判定+点染色:因为有很多联通块,要对所有点二分图匹配,若不能,存在点是无法分配的,no 每一次二分图匹配时,将点多的集合加大最后第一个集合去 注意:n <= 1,no,两 ...

  4. java大数轻松过

    import java.util.Scanner; import java.math.BigInteger; public class Main { public static void main(S ...

  5. C# 代码笔记_文件

           string Route = @"D:\ksy\ksy\WebSite1\";//文件地址         string File_name = "user ...

  6. python manage.py syncdb报错:No module named MySQLdb

    今天同步数据时出现这个错误: 解决方法: 1.先下载mysql-python 支持1.2.3-2.7版本 MySQL-python 1.2.3 for Windows and Python 2.7, ...

  7. 基于 CentOS 搭建Seafile个人网盘

    一.安装 Seafile 安装依赖环境使用 yum 安装 Python 及 MySQL: yum install python python-setuptools python-imaging pyt ...

  8. Windows提高_2.1第一部分:线程

    第一部分:线程 什么是线程? 线程其实可以理解为一段正在执行中的代码,它最少由一个线程内核对象和一个栈组成. 线程之间是没有从属关系的,同一进程下的所有线程都可以访问进程内的所有内容. 主线程其实是创 ...

  9. VMware 12虚拟机下Ubuntu 16连不上网解决方法

    打开自带Firefox浏览器,显示连接不上网,终端下 ping 也显示 unkown   解决方法: 1.打开虚拟机的“编辑”选项,选择“虚拟网络编辑器” 2.选择VMnet8(我不知道为啥VMnet ...

  10. 梦想CAD控件 2019.01.20更新

    下载地址:http://www.mxdraw.com/ndetail_10120.html1. 修改CAD不等比例块保存问题2. 修改CAD捕捉时,Z值对捕捉不准的影响3. 修改图片对象选择后,自动跑 ...