ibatis高效学习

本文详细介绍了Ibatis框架的基本概念,包括其与Hibernate的区别,所需的jar包,以及配置文件的详细解析。同时,文章深入讲解了如何将Ibatis与Spring框架进行整合,包括配置数据库连接,设置SqlMapClient,以及事务管理的具体步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Ibatis学习记录

Ibatis的基本介绍

iBatis是Apcahe的一个开源项目,后来改名为mybatis

iBatis和hibernate一样是一种ORM(对象关系映射)的框架,不同之处在于Hibernate是提供了全面的数据库封装机制的全自动化ORM实现,实现了POJO和数据库表之间的映射,以及SQL的自动的生成和执行。而iBatis是一种半自动化的实现,需要手写sql,着力于POJO和SQL之间的映射,也就是说iBatis并不会为程序员在运行期自动生成SQL执行,具体的SQL需要程序员自己编写,然后通过配置映射文件,将SQL所需的参数,以及返回的结果字段映射到指定的POJO.


iBatis所需jar包

ibatis-2.3.4.726.jar和ojdbc14.jar


Ibatis的配置文件

主配置文件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>
	< settings  
      cacheModelsEnabled ="true" //是否启用SqlMapClient上的缓存机制。 建议设为"true" 
      enhancementEnabled ="true" //是否针对POJO启用字节码增强机getter/setter的调用效能,避免Reflect所带来的性能开销。同时,这也为Lazy Loading带来提升。 建议设为"true" 
      lazyLoadingEnabled ="true" //是否启用错误日志,在开发期间建议设为"true" 以方便调试       
      errorTracingEnabled ="true"//是否启用延迟加载机制,建议设为"true"     
      maxRequests ="32"//最大并发请求数(Statement并发数)           
      maxSessions ="10"//最大Session数            
      maxTransactions ="5"//最大并发事务数          
      useStatementNamespaces ="false"//是否使用Statement命名空间。  这里的命名空间指的是映射文件中,sqlMap节的namespace属性
       />   
	<!-- 配置数据库连接信息 -->
	 < transactionManager    type ="JDBC" >   //type定义的事务管理器:JDBC JTA EXTERNAL
     < dataSource    type ="SIMPLE" >   //dataSource从属于transactionManager节点,用于设定ibatis运行期使用的DataSource属性
         								//type属性指定dataSource的类型:SIMPLE DBCP JNDI
         < property    name ="JDBC.Driver"    value ="com.mysql.jdbc.Driver" />   //JDBC 驱动。 
         < property    name ="JDBC.ConnectionURL"    value ="jdbc:mysql://localhost/test" />   //数据库URL
         < property    name ="JDBC.Username"    value ="root" />   //数据库用户名 
         < property    name ="JDBC.Password"    value ="fys440184" />   //数据库用户密码 
         < property    name ="Pool.MaximumActiveConnections"    value ="10" />   //数据库连接池可维持的最大容量。
         < property    name ="Pool.MaximumIdleConnections"    value ="5" />   //数据库连接池中允许的挂起(idle)连接数。 
         < property    name ="Pool.MaximumCheckoutTime"    value ="120000" />   
         < property    name ="Pool.TimeToWait"    value ="500" />   
         < property    name ="Pool.PingQuery"    value ="select 1 from ACCOUNT" />   
         < property    name ="Pool.PingEnabled"    value ="false" />   
         < property    name ="Pool.PingConnectionsOlderThan"    value ="1" />   
         < property    name ="Pool.PingConnectionsNotUsedFor"    value ="1" />   
       </ dataSource >   
     </ transactionManager >   
    
	<sqlMap resource="cn/pojo/Manager.xml" />
    //引入sqlMap
 
</sqlMapConfig>

sqlMap配置文件
<?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="manager"> //名称空间
//里面有<select></select>,<insert></insert>,<update></update>,<delete></delete>来完成SQL操作
		
	<typeAlias  alias="manager"  //别名处理器 type="com.fys.pojo.Manager"/>
	
	<select id="login" resultClass="com.fys.pojo.Manager" parameterClass="java.util.Map">
		select * from manager where mid=#mid# and password=#password#
	</select>
	
	
	<insert id="registManager"  parameterClass="com.fys.pojo.Manager">
		insert into manager(mid,mname,memail,password,mdid) values(#mid#,#mname#,#memail#,#password#,#mdid#)
	</insert>
	
	<select id="existsId" resultClass="com.fys.pojo.Manager" parameterClass="int" >
		select * from manager where mid=#mid#
	</select>

	
	<insert id="addEmp" parameterClass="com.fys.pojo.Employee">
		insert into emp(id,name,salary,email,edid) values(#id#,#name#,#salary#,#email#,#edid#)
	</insert>
	
	
	<select id="findEmp" resultClass="com.fys.pojo.Employee" parameterClass="int">
		select * from emp where id=#id#
	</select>
	
	<delete id="delEmp" parameterClass="int">
		delete from emp where id=#id#
	</delete>
	
	
	<select id="queryAllEmps" resultClass="com.fys.pojo.Employee">
		SELECT *FROM emp
	</select>
	
	<select id="findEmpByDepartId" resultClass="com.fys.pojo.Employee" parameterClass="int">
		SELECT *FROM emp where edid=#edid#
	</select>
	
	<update id="updateEmp" parameterClass="com.fys.pojo.Employee">
		update emp set name=#name#,salary=#salary#,email=#email#,edid=#edid# where id =#id#
	</update>
	
	
</sqlMap>

整合Spring

把数据库放到Spirng中

<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">
			 
	
			    <!-- dao层类的设置 ,关联sqlMapClient-->
				<bean id="userDao" class="com.fys.dao.UserDao">
					<property name="sqlMapClient" ref="sqlMapClient"></property>
				</bean>
				 
				<!-- 表示把属性资源文件的信息加载到Spring环境中进行利用 -->
				<bean class="org.springframework.beans.factory.config.PreferencesPlaceholderConfigurer">
					<property name="locations">
						<list>
							<value>classpath:db.properties</value>
						</list>
					</property>
				</bean>
				 
				<!-- 配置Druid连接池,通过读取属性文件 -->
			<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
			<property name="driverClassName" value="${driverClassName}"></property>
			<property name="url" value="${url}"></property>
			<property name="username" value="${username}"></property>
			<property name="password" value="${password}"></property>
			</bean>
			 
				<!-- IBatis核心对象sqlMapClient的声明 ,通过工厂SqlMapClientFactoryBean和IBatis核心配置文件-->
				<bean id="sqlMapClient" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">
					<property name="dataSource" ref="c3p0"></property>
					<property name="configLocations">
						<list>
							<value>classpath:SqlMapConfig.xml</value>
						</list>
					</property>
				</bean>
				 
				<!-- 配置功能扩展对象 - 事务管理,通过德鲁伊 -->
				<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
					<property name="dataSource" ref="dataSource"></property>
				</bean>
				 
				<!-- 声明事务管理AOP功能 -->
				<aop:config>
					<aop:advisor advice-ref="transactionAdvice" pointcut="execution(* com.ljh.service.*.*(..))"/>        
				</aop:config>        
				 
				<!--事务的配置-->
				<tx:advice id="transactionAdvice" transaction-manager="transactionManager">
					<tx:attributes>
						<tx:method name="save*" propagation="REQUIRED" isolation="DEFAULT" rollback-for="java.lang.Exception"/>
						<tx:method name="delete*" propagation="REQUIRED" isolation="DEFAULT" rollback-for="java.lang.Exception"/>
						<tx:method name="update*" propagation="REQUIRED" isolation="DEFAULT" rollback-for="java.lang.Exception"/>
						<tx:method name="select*" read-only="true"/>
					</tx:attributes>
				</tx:advice>
			 
			</beans>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值