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>