zoukankan      html  css  js  c++  java
  • 初识iBatis

    在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();
    		}
    		
    	}
     
    
     
    
     
    
     
    
     
    
     
    

      

  • 相关阅读:
    Android NumberPicker和DatePicker分割线颜色设置
    用来解析,格式化,存储和验证国际电话号码:libphonenumber
    Unbutu网卡驱动安装(Intel内置网卡8086:15b8)
    Android版本判断
    Ubuntu中、英文环境设置
    adb常用命令介绍
    Android Environment 类详解
    Android字符串相关类
    Android字符串相关类
    Android字符串相关类
  • 原文地址:https://www.cnblogs.com/monkjavaer/p/9569264.html
Copyright © 2011-2022 走看看