ibatis介绍及配置文件讲解,结合实例
来源:互联网 发布:php curl 超时处理 编辑:程序博客网 时间:2024/05/20 04:11
写下博客最大的好处就是即可以分享给大家,自己也作为一种记忆方式吧。为了便于个人对知识点整理写此文章,还望各位指点。
ibatis是一种“半自动化”的ORM实现,它针对sql语句进行映射。它还是从关系型开始到对象型的思路来解决数据库的操作问题。我这里主要结合一个例子说一说。由于初出茅庐,这里面许多东西都是查找和询问得到的。
下面是主要配置文件sqlMapConfig.xml配置文件,它主要是完成事务的配置、数据库的连接、引入SqlMap.xml配置文件(配置sql语句、输入映射和输出映射)。
下面是sqlMapConfigure.xml
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE sqlMapConfig PUBLIC "-//iBATIS.com//DTD SQL Map Config 2.0//EN""http://www.ibatis.com/dtd/sql-map-config-2.dtd"><sqlMapConfig><!--<settings --><!-- cacheModelsEnabled ="true" 是否启用缓存机制--> <!-- lazyLoadingEnabled="true" 是否启用延迟加载机制 --> <!-- enhancementEnabled="true" 是否启用字节码增强机制 --><!-- errorTracingEnabled="true" 是否启用错误处理机制 --> <!-- maxRequests="32" 最大并发请求数 --> <!-- maxSessions="10" 最大Session数 --> <!-- maxTransactions="5" 最大并发事务数 --> <!-- useStatementNamespaces="true" /> 是否启用名称空间 --> <!-- 数据库的连接 --><properties resource="resources/jdbc.properties" /><transactionManager type="JDBC"><!-- 定义了ibatis的事务管理器有3中(JDBC,JTA,EXTERNAL) --> <dataSource type="SIMPLE"><!-- type属性指定了数据源的链接类型,也有3种类型(SIMPLE,DBCP,JNDI) --><property name="JDBC.Driver" value="${driver}" /><property name="JDBC.ConnectionURL" value="${url}" /><property name="JDBC.Username" value="${username}" /><property name="JDBC.Password" value="${password}" /><property name="Pool.MaximumActiveConnections" value ="10" /> <!-- 连接池维持的最大容量 --> <property name="Pool.MaximumIdleConnections" value ="5" /> <!-- 连接池允许挂起的最大连接 --> <property name="Pool.MaximumCheckoutTime" value ="120000" /> <!-- 连接被某个任务所允许占用的最大时间 --> <property name="TimeToWait" value ="500" /> <!-- 线程允许等待的最大时间 --> </dataSource></transactionManager><!-- 引入SQLMap.xml(配置SQL语句、输入映射和输出映射) --><sqlMap resource="resources/User.xml"/><sqlMap resource="resources/Ext.xml"/><!-- sqmMap节点指定了映射文件的位置,配置文件中可以定义多个sqlMap元素,以指定项目内所包含的所有映射文件.--></sqlMapConfig>
配置文件的详细解释
一、transactionManager节点
transactionManagerab定义了ibatis的事务管理器,目前提供了以下几种选择:
1) JDBC:通过传统JDBC Connection.commit/rollback实现事务支持.
2) JTA: 使用容器提供的JTA服务实现全局事务管理.
3) EXTERNAL:外部事务管理,如在EJB中使用ibatis,通过EJB的部署配置即可实现自动的事务管理机制.此时ibatis将把所有事务委托给外部容器进行管理.
二 、dataSource节点
dataSource从属于 transactionManager,用于设定ibatis运行期使用DataSource属性.
type 属性: dataSource元素的 type属性指定了 dataSource的实现类型.可选项目:
1) SIMPLE:是 ibatis内置的 dataSource实现,其中实现了一个简单的数据库连接池机制,对应 ibatis实现类为
com.ibatis.sqlmap.engine.datasource.SimpleDataSourceFactory.
JDBC 使用数据库自己的事务(局部事务),connect.beginTranstion(), connect.commit()等.
2) DBCP:基于Apache DBCP连接池组件实现的DataSource封装,当无容器提供DataSource服务时,建议使用该选项,对应ibatis实现类为
com.ibatis.sqlmap.engine.datasource.DbcpDataSourceFactory.
JTA :使用jta事务管理器管理事务(全局事务),使用userTranstion对象.
3) JNDI:使用J2EE容器提供的DataSource实现, DataSource将通过指定的JNDI Name从容器中获取.对应ibatis实现类为
com.ibatis.sqlmap.engine.datasource.JndiDataSourceFactory.
Ibatis 不控制事务,事务交由外部控制,一般在CTM,或spring托管事务中使用.
接下来看一下sqlmap.xml配置文件(SQL语句的编写)
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE sqlMap PUBLIC "-//iBATIS.com//DTD SQL Map 2.0//EN" "http://www.ibatis.com/dtd/sql-map-2.dtd"><sqlMap namespace="UserDAO"><!-- 建立表与对象的映射关系 --><resultMap id="UserDO" class="entity.User"> <result property="id" column="ID" /><result property="username" column="USERNAME" /><result property="password" column="PASSWORD" /></resultMap><!-- 常用的增删改查sql语句 --><insert id="insert" parameterClass="entity.User">insert into USER (ID,USERNAME,PASSWORD)values (#id#,#username#,#password# )<!-- 自动生成主键<selectKey resultClass="int" keyProperty="id">SELECT LAST_INSERT_ID() AS ID</selectKey> --></insert><delete id="deleteUserByName" parameterClass="java.lang.String"><![CDATA[delete from USERwhere USERNAME = #username#]]></delete><update id="updateUser" parameterClass="entity.User">update USER<dynamic prepend="set"><isNotNull prepend="," property="username"><!-- 判断是否为空 -->USERNAME = #username#</isNotNull><isNotNull prepend="," property="password">PASSWORD = #password#</isNotNull></dynamic>where ID = #id#</update><!-- resultClass与上方sqlMap定义的映射对应 --><select id="selectUser" parameterClass="java.lang.String" resultMap="UserDO">select ID,USERNAME,PASSWORDfrom USERwhere USERNAME = #username#</select></sqlMap>有关这个配置文件的讲解可以看一看 ibatis中SQL映射配置文件中动态SQL语句语法
动态语句的编写与理解,方便今后查看。而且我自己也写了一个SQL语句的配置文件,如下:
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE sqlMap PUBLIC "-//iBATIS.com//DTD SQL Map 2.0//EN" "http://www.ibatis.com/dtd/sql-map-2.dtd"><!-- 自己单独写SQL语句 --><sqlMap namespace="UserDAO"> <select id="select" parameterClass="java.lang.String" resultMap="UserDO">select ID,USERNAME,PASSWORDfrom USERwhere PASSWORD = #password#</select></sqlMap>主要配置文件和SQL语句相关配置文件都结束了,接下来说一说我单独写的有关连接数据库的.properties文件
driver=com.mysql.jdbc.Driverurl=jdbc:mysql://localhost:3306/testusername=rootpassword=1234这个配置文件在书写的时候一定要小心,不可以有无用的空格,不然会保存,这样将他提出来也是便于今后修改和整理,以下是对jdbc连接数据库的详细解析:
#连接设置
driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/test
username=root
password=123
#<!-- 初始化连接 -->
initialSize=10
#最大连接数量
maxActive=50
#<!-- 最大空闲连接 -->
maxIdle=20
#<!-- 最小空闲连接 -->
minIdle=5
#<!-- 超时等待时间以毫秒为单位 6000毫秒/1000等于60秒 -->
maxWait=60000
#JDBC驱动建立连接时附带的连接属性属性的格式必须为这样:[属性名=property;]
#注意:"user" 与 "password" 两个属性会被明确地传递,因此这里不需要包含他们。
connectionProperties=useUnicode=true;characterEncoding=utf-8
#指定由连接池所创建的连接的自动提交(auto-commit)状态。
defaultAutoCommit=true
#driver default 指定由连接池所创建的连接的只读(read-only)状态。
#如果没有设置该值,则“setReadOnly”方法将不被调用。(某些驱动并不支持只读模式,如:Informix)
defaultReadOnly=
#driver default 指定由连接池所创建的连接的事务级别(TransactionIsolation)。
#可用值为下列之一:(详情可见javadoc。)NONE,READ_UNCOMMITTED, READ_COMMITTED, REPEATABLE_READ, SERIALIZABLE
defaultTransactionIsolation=READ_UNCOMMITTED
package entity;public class User {private int id;private String username;private String password;public int getId() {return id;}public void setId(int id) {this.id = id;}public String getUsername() {return username;}public void setUsername(String username) {this.username = username;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}}测试类我在这里给大家写出了基本的增删改查:
package test;import java.io.Reader;import java.util.List;import com.ibatis.common.resources.Resources;import com.ibatis.common.util.PaginatedList;import com.ibatis.sqlmap.client.SqlMapClient;import com.ibatis.sqlmap.client.SqlMapClientBuilder;import entity.User;public class Test {public static void main(String[] args) {SqlMapClient sqlMapclient = null;try {Reader reader = Resources.getResourceAsReader("SqlMapConfig.xml");//SqlMapClient是ibatis的核心组件,提供数据操作的基础平台。SqlMapClient可通过XmlSqlMapClientBuilder创建: sqlMapclient = SqlMapClientBuilder.buildSqlMapClient(reader);User user = new User();//增user.setId(3);user.setPassword("1234");user.setUsername("cg1");sqlMapclient.insert("insert", user);//改//user.setPassword("123");//user.setId(1);//sqlMapclient.update("updateUser", user);//删//sqlMapclient.delete("deleteUserByName","troy");//查//@SuppressWarnings("unchecked")////调用写的基本方法//List<User> users = (List<User>) sqlMapclient.queryForList("selectUser", "cg");//for(User temp : users) {//System.out.println(temp.getId() + "-" + temp.getUsername() + "-" + temp.getPassword());//}//@SuppressWarnings("unchecked")////调用自己后填入的方法//List<User> users1 = (List<User>) sqlMapclient.queryForList("select", "123456");//for(User temp : users1) {//System.out.println(temp.getId() + "-" + temp.getUsername() + "-" + temp.getPassword());//}reader.close();} catch (Exception e) {e.printStackTrace();}}}这篇文章主要参考了以下文章:
iBATIS配置文件详细说明
简单实例链接地址:
ibatis框架简单应用
- ibatis介绍及配置文件讲解,结合实例
- iBatis配置文件讲解
- RelativeLayout常用属性介绍及实例讲解
- RelativeLayout常用属性介绍及实例讲解
- Spring Aop重要概念介绍及应用实例结合分析
- iBatis介绍及入门教程
- iBatis介绍及入门教程
- IBATIS介绍及入门教程
- iBatis介绍及入门教程
- IBATIS介绍及入门教程
- iBatis介绍及入门教程
- Ibatis的优点及配置文件
- 多线程(五) Fork/Join框架介绍及实例讲解
- Linux 安全知识及介绍(实例讲解)
- java虚拟机之运行时数据区域及String字符串的讲解(结合实例)
- Ibatis配置文件中属性的介绍
- rtsp实例及讲解
- pthread_cond讲解及实例
- Java类型推断将不再支持可变性规范
- 未能加载文件或程序集“file:///C:\Program Files (x86)\SAP BusinessObjects\Crystal Reports for .NET Framework 4.
- “风投云涌”:那些被资本看中的IT企业的风光与辛酸
- kubernetes 1.5安装 jenkins 带动态分配资源
- Google推荐图片加载库Glide使用总结
- ibatis介绍及配置文件讲解,结合实例
- RxAndroid组合Retrofit 实现文件上传 post get
- 欢迎使用CSDN-markdown编辑器
- ubuntu下cmake的GUI界面
- 网赚项目玩的都是套路 骗局无处不在
- 华为手机Android Studio开发不显示Logcat解决办法
- MindManager中查看打印预览的教程
- “格力手机”的蝴蝶效应
- redis基础简介(六)- jedis使用管道(pipeline)对redis进行读写(使用hmset、hgetall测试)