ibatis配置文件、映射文件详解
ibatis快速入门(仅需两天)绝对经典,值得收藏
![ibatis快速入门(仅需两天)绝对经典,值得收藏](https://img.taocdn.com/s3/m/0ec484d276a20029bd642d40.png)
Ibatis开发要点Ibatis提供了一种半自动化的O/R Mapping实现框架。
它以牺牲工作量和移植性的代价换取了SQL语句设计的自由性和可优化性。
典型Ibatis配置文件<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE sqlMapConfig PUBLIC "-////DTD SQL Map Config 2.0//EN" "/dtd/sql-map-config-2.dtd"><sqlMapConfig><settings cacheModelsEnabled="true" //是否开启缓存enhancementEnabled="false" //是否开启字节码增强,提高get/set调用性能lazyLoadingEnabled="true" //是否开启延迟加载errorTracingEnabled="true" //是否启用错误日志maxRequests="32" //最大并发请求maxSessions="10" //最大允许并发SqlMapClient数maxTransactions="5" //最大并发事务数useStatementNamespaces="false" /> //是否使用statment命名空间<transactionManager type="JDBC"> //传统JDBC事务支持<dataSource type="SIMPLE"> //简单数据库连接池,对应SimpleDataSourceFactory<property name="JDBC.Driver" value="com.mysql.jdbc.Driver" /><property name="JDBC.ConnectionURL" value="jdbc:mysql://localhost:3306/mysql" /> <property name="ername" value="root" /><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="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><!-- JNDI<transactionManager type="JDBC"><dataSource type="JNDI"> //使用J2EE容器实现DataSource,对应实现类JndiDataSourceFactory<property name="DataSource" value="java:comp/env/jdbc/myDataSource" /></dataSource></transactionManager>--><!-- JTA<transactionManager type="JTA"> //使用容器提供的JTA服务实现全局事务管理<property name="UserTransaction" value="java:/ctx/con/UserTransaction" /><dataSource type="JNDI"><property name="DataSource" value="java:comp/env/jdbc/myDataSource" /></dataSource></transactionManager> --><sqlMap resource="com/ibatis/ao/User.xml" /></sqlMapConfig>User模型类public class User implements Serializable{private Integer id;private String name;private Integer sex;public User(){}public User(Integer id,String name,Integer sex){this.id=id;=name;this.sex=sex;}public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getName() {return name;}public void setName(String name) { = name;}public Integer getSex() {return sex;}public void setSex(Integer sex) {this.sex = sex;}}模型类映射文件<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE sqlMap PUBLIC "-////DTD SQL Map 2.0//EN" "/dtd/ibatis/sql-map-2.dtd"><sqlMap namespace="User"><typeAlias alias="user" type="er" /> //设置映射路径<!-- 模块配置--><cacheModel id="userCache" type="LRU"> //设置缓存类型<flushInterval hours="24" /> //设置缓存有效期<flushOnExecute statement="updateUser" /> //执行特定statment是清空缓存<property name="size" value="1000" /> //设置缓存大小</cacheModel><resultMap id="userResult" class="user"> //resultMap结果映射<result property="id" column="id" /><result property="name" column="name" /><result property="sex" column="sex" /></resultMap><!-- Statement配置--><select id="getUser" resultMap="userResult" parameterClass="string"> //parameterClass参数类<![CDATA[selectname,sexfromt_userwherename=#name#]]></select><select id="getUserById" resultClass="user" parameterClass="Integer"> //resultClass结果类<![CDATA[selectname,sexfromt_userwhereid=#id#]]></select><insert id="insertUser" parameterClass="user"><![CDATA[INSERT INTO t_user (name,sex) values (#name#,#sex#)]]></insert><delete id="deleteUser" parameterClass="Integer"><![CDATA[delete from t_userWHERE id=#id#]]></delete><update id="updateUser" parameterClass="user"><![CDATA[update t_usersetname=#name#,sex=#sex#WHERE id=#id#]]></update></sqlMap>测试类public void testIbatisSqlMap() throws SQLException{String resource="sqlmap-config.xml";try {Reader reader=Resources.getResourceAsReader(resource);SqlMapClient sqlMap = SqlMapClientBuilder.buildSqlMapClient(reader); //SqlMapClient 核心类try{sqlMap.startTransaction();// User user=new User();// user.setId(new Integer(1));// user.setName("Samantha");// user.setSex(new Integer(11));// sqlMap.insert("insertUser",user);Integer key=new Integer(2);User user1=(User)sqlMap.queryForObject("getUserById",key);mitTransaction();System.out.println(user1.getName());} catch (SQLException e) {e.printStackTrace();}finally{sqlMap.endTransaction();}} catch (IOException e) {e.printStackTrace();}}Ibatis高级特性:1.数据关联:(一对多关联)<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE sqlMap PUBLIC "-////DTD SQL Map 2.0//EN" "/dtd/ibatis/sql-map-2.dtd"><sqlMap namespace="User"><typeAlias alias="user" type="er" /><typeAlias alias="address" type="com.ibatis.ao.Address" /><resultMap id="get-user-result" class="user"><result property="id" column="id" /><result property="name" column="name" /><result property="sex" column="sex" /><result property="addresses" column="id" select="User.getAddressByUserId" /> </resultMap><select id="User.getUsers" parameterClass="ng.String"resultMap="get-user-result"><![CDATA[selectid,name,sexfrom t_userwhere id = #id#]]></select><select id="User.getAddressByUserId" parameterClass="int"resultClass="address"><![CDATA[selectaddress,zipcodefrom t_addresswhere user_id = #userid#]]></select></sqlMap>对应代码:public void testIbatisSqlMap() throws SQLException, IOException {String resource = "sqlmap-config.xml";Reader reader = Resources.getResourceAsReader(resource);SqlMapClient sqlMap = SqlMapClientBuilder.buildSqlMapClient(reader);// sqlMap系统初始化完毕List userList = sqlMap.queryForList("User.getUsers", "2");for (int i = 0; i < userList.size(); i++) {User user = (User) userList.get(i);System.out.println("==>" + user.getName());for (int k = 0; k < user.getAddresses().size(); k++) {Address addr = (Address)user.getAddresses().get(k);System.out.println(new String(addr.getAddress()));}}}这种对应在大数据量的情况下会产生性能问题如果是一对一关系:<resultMap ><result property="id" column="id"/><result property="name" column="name"/><result property="sex" column="sex"/><result property="address" column="t_address.address"/><result property="zipCode" column="t_address.zipcode"/></resultMap><select parameterClass="string"resultMap="get-user-result"><![CDATA[select*from t_user,t_addresswhere t_user.id=t_er_id]]></select>2.延迟加载:当真正访问对象时才执行SQL语句,提高了系统性能。
ibatis映射及参数设置
![ibatis映射及参数设置](https://img.taocdn.com/s3/m/3b68ff08974bcf84b9d528ea81c758f5f61f2964.png)
ibatis映射及参数设置<sqlMap namespace="sc_item"> <resultMap id="scaleItem" class="cn.db.model.ScaleItem" > <result property="id" column="id"/> <result property="scaleId" column="scaleId"/> <result property="content" column="content"/> <result property="status" column="status"/> <result property="dimensionId" column="dimensionId"/> <result property="serial" column="serial"/> </resultMap> <delete id="batchDelete"> <![CDATA[ DELETE FROM sc_item WHERE scaleId = #scaleId# AND ID = #id# ]]> </delete></sqlMap>红⾊是对应class中类的属性,紫⾊是参数,调⽤该语句的时候要注意参数是否对应。
如:private void deleteItems(String scaleId, List<Long> itemIds){ if(itemIds == null || itemIds.size() == 0) return; List<Map<String, Object>> params = new ArrayList<Map<String,Object>>(); for (Long itemId : itemIds) { Map<String, Object> param = new HashMap<String, Object>(); param.put("scaleId", scaleId); param.put("id", itemId); params.add(param); } this.dao.batchDelete("sc_item.batchDelete", params);}。
iBATIS的sqlMap配置文件
![iBATIS的sqlMap配置文件](https://img.taocdn.com/s3/m/50fc0b9af021dd36a32d7375a417866fb84ac0af.png)
iBATIS的sqlMap配置文件sqlMapConfig.xml文件是Ibatis的核心配置文件(注意也可以不用这个名字)Ibatis的所有东西都是通过这个文件传递给应用程序的。
下面是一个基本的配置文件。
<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE sqlMapConfigPUBLIC "-////DTD SQL Map Config 2.0//EN""/dtd/sql-map-config-2.dtd"><sqlMapConfig><properties resource="db.properties"/><settings cacheModelsEnabled="true" lazyLoadingEnabled="true"enhancementEnabled="true" errorTracingEnabled="true"useStatementNamespaces="false"maxRequests="30" maxSessions="20"maxTransactions="10" /><sqlMap resource="com/hzmc/capaa/domain/persistence /trustuser/AdminUser.xml" ></sqlMapConfig>下面介绍一下<settings>元素的配置1lazyLoadingEnabled:是否延迟加载(只加载必要信息而推迟其他未明确请求数据的技术),默认值是true。
Mybatis的配置文件和映射文件详解
![Mybatis的配置文件和映射文件详解](https://img.taocdn.com/s3/m/9b240811fd4ffe4733687e21af45b307e871f90f.png)
Mybatis的配置⽂件和映射⽂件详解⼀、Mybatis的全局配置⽂件1、SqlMapConfig.xml(名称可变)是mybatis的全局配置⽂件,配置内容如下:properties(属性)settings(全局配置参数)typeAliases(类型别名)typeHandlers(类型处理器)objectFactory(对象⼯⼚)plugins(插件)environments(环境集合属性对象)environment(环境⼦属性对象)transactionManager(事务管理)dataSource(数据源)mappers(映射器)2、properties将数据库连接参数单独配置在db.properties(名称可变)中,放在类路径下。
这样只需要在SqlMapConfig.xml中加载db.properties的属性值。
这样在SqlMapConfig.xml中就不需要对数据库连接参数硬编码。
将数据库连接参数只配置在db.properties中,原因:⽅便对参数进⾏统⼀管理,其它xml可以引⽤该db.properties例如:db.propertiesjdbc.driver=com.mysql.jdbc.Driverjdbc.url=jdbc:mysql://localhost:3306/mybatisername=rootjdbc.password=root相应的SqlMapConfig.xml<properties resource="db.properties"/><environments default="development"><environment id="development"><transactionManager type="JDBC"/><dataSource type="POOLED"><property name="driver" value="${jdbc.driver}"/><property name="url" value="${jdbc.url}"/><property name="username" value="${ername}"/><property name="password" value="${jdbc.password}"/></dataSource></environment></environments>注意: MyBatis 将按照下⾯的顺序来加载属性:⾸先、在properties标签中指定的属性⽂件⾸先被读取。
iBatis详细使用手册(.net版)
![iBatis详细使用手册(.net版)](https://img.taocdn.com/s3/m/5233b7424afe04a1b171de2b.png)
目录系列(1) 总览 (2)系列(2) 配置运行环境和日志处理 (4)系列(3) 映射文件基础 (11)系列(4) iBatisNet API基础 (14)系列(5) ParameterMap (19)系列(6) ResultMap (23)系列(1) 总览学习和使用Ibatisnet已经有一段时间了,前段时间也有写过一些与iBatis相关的Blog。
也答应过一些朋友要比较全面地介绍一下iBatis,分享自己的学习过程和使用经验,记录一些常见且容易出现的问题。
但由于前段时间一直在准备考试,而且当前的项目时间进度也比较紧,所以一直迟迟未能开始,在这里表示歉意,希望现在开始不会晚。
不过最近社区(博客园)好消息不断,我发现越来越多的人开始关注iBatis了,并且也有热心网友在极力推广,如果您已经对它已经有一些了解了,那么更推荐您去阅读ShanYou的文章,他写的文章可能更加适合您。
我本人也是一名初学者,这里记录的一些东西可能不会有很多的理论知识(理论知识还不够扎实),更多的可能是突出自己学习过程中需要很长时间来解决的一些问题,或者是个人认为特别重要,并且容易忘记的细节。
水平有限,出现错误在所难免,如在这过程中不当之处敬请愿谅,并请不啬赐教。
废话一翻后,进入今天的正题。
今天的主题是Introduction,非官方正式介绍的中文版,更多详细的介绍请参阅官方文档。
我们要使用它就必须要知道它是干什么用的,能为我们做哪些工作,开发效率如何,执行效率如何,技术难度怎么样。
提到iBatis,大家可能会与ORM技术联系起来。
是的,没错,它与ORM技术有一定程度上的联系,但是更确切地讲,它并不是一种很正统的ORM解决方案。
因为它不像NHi bernate那样,具备全自动的数据操作,包括查询,插入,更新,删除;也没有像它那样,与数据库的约束关系有紧密的联系(对NHibernate的了解不多,如果有不妥之处,希望能留下你们的臭鸡蛋,等着下回用)。
ibatis配置简介
![ibatis配置简介](https://img.taocdn.com/s3/m/58af0667ddccda38376baf96.png)
IBATIS配置简介iBatis其实不是个真正意义上的OR-Mapping, 只能称为是个OSQL-Mapping吧,我们开发人员还是要自己写SQL,不过这个我比较喜欢,我们可以控制的更多,更灵活。
不像Hibernate那么死板。
iBatis将Java对象(大多是我们的Java Bean)映射成JDBC的PreparedStatement的输入参数和ResultSet。
个人认为主要就是将我的的Java 对象映射到SQL的参数和将SQL的查询结果转换为Java对象。
下面说说我学习iBATIS SQL Maps开发指南的一些收获吧。
(1) SQL Map XML 配置文件 SqlMapConfig.xml的深刻认识。
<setting>元素,这个以前自己没有接触过,最学习到了,想和大家分享一下。
<setting>元素用于配置和优化SqlMapClient实例。
<setting>元素本身及其所有的属性都是可选的,子元素如下:maxRequests 同时执行SQL语句的最大线程数,通常至少是maxTransactions 的10倍,默认值是512。
maxSessions 同时活动的最大session数。
应该小于maxRequests,并大于或等于maxTransactions,默认128。
maxTransactions 同时进入sqlMapClient.startTransaction()的最大线程数,默认32。
cacheModelsEnabled 全局性地启用或禁止SqlMapClient的所有缓存model,默认true。
调试程序时使用。
lazyLoadingEnabled 全局性地启用或禁用SqlMapClient的所有延迟加载,默认true。
调试程序时使用。
enhancementEnabled 全局性地启用或禁用运行时字节码增强,以优化访问Java Bean属性的性能,同时优化延迟加载的性能,默认false。
ibatis 教程 详解
![ibatis 教程 详解](https://img.taocdn.com/s3/m/5c2bf83231126edb6f1a1026.png)
0.0 2004.8.1 夏昕第一版1.0 2004.9.1 夏昕补充ibatis in Spring 部分OpenDoc 版权说明本文档版权归原作者所有。
在免费、且无任何附加条件的前提下,可在网络媒体中自由传播。
如需部分或者全文引用,请事先征求作者意见。
如果本文对您有些许帮助,表达谢意的最好方式,是将您发现的问题和文档改进意见及时反馈给作者。
当然,倘若有时间和能力,能为技术群体无偿贡献自己的所学为最好的回馈。
另外,笔者近来试图就日本、印度的软件开发模式进行一些调研。
如果诸位可以赠阅日本、印度软件研发过程中的需求、设计文档以供研究,感激不尽!ibatis 开发指南ibatis Quick Start (5)准备工作 (5)构建ibatis 基础代码 (5)ibatis 配置 (11)ibatis 基础语义 (16)XmlSqlMapClientBuilder (16)SqlMapClient (16)SqlMapClient 基本操作示例 (16)OR 映射 (19)ibatis 高级特性 (26)数据关联 (26)一对多关联 (26)一对一关联 (28)延迟加载 (30)动态映射 (31)事务管理 (35)基于JDBC 的事务管理机制 (35)基于JTA的事务管理机制 (36)外部事务管理 (38)Cache (39)MEMORY类型Cache 与WeakReference (40)LRU 型Cache (42)FIFO 型Cache (43)OSCache (43)ibatis 开发指南相对Hibernate 和Apache OJB 等“一站式”ORM 解决方案而言,ibatis 是一种“半自动化”的ORM 实现。
所谓“半自动”,可能理解上有点生涩。
纵观目前主流的ORM ,无论Hibernate 还是Apache OJB,都对数据库结构提供了较为完整的封装,提供了从POJO 到数据库表的全套映射机制。
ibatis配置文件详解
![ibatis配置文件详解](https://img.taocdn.com/s3/m/687c1669ddccda38376baf6d.png)
iBatis 配置文件详解一:ibatis基础代码包括:1. ibatis实例配置一个典型的配置文件如下(具体配置项目的含义见后):<? xml version="1.0" encoding="UTF-8" ?><! DOCTYPE sqlMapConfigPUBLIC "-////DTD SQL Map Config 2.0/"/dtd/sql-map-config-2.dt<sqlMapConfig >< settingscacheModelsEnabled ="true"enhancementEnabled ="true"lazyLoadingEnabled ="true"errorTracingEnabled ="true"maxRequests ="32"maxSessions ="10"maxTransactions ="5"useStatementNamespaces ="false"/>< transactionManager type ="JDBC" >< dataSource type ="SIMPLE" >< property name ="JDBC.Driver" value ="com.p6spy.engine.spy.P6SpyDriver" /> < property name ="JDBC.ConnectionURL" value ="jdbc:mysql://localhost/sample"/>< property name ="ername" value ="user" />< property name ="JDBC.Password" value ="mypass" />< property name ="Pool.MaximumActiveConnections" value ="10" />< property name ="Pool.MaximumIdleConnections" value ="5" />< 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 ="com/ibatis/sample/User.xml" /></ sqlMapConfig >⑴ Settings 节点cacheModelsEnabled是否启用SqlMapClient上的缓存机制。
ibatis用法
![ibatis用法](https://img.taocdn.com/s3/m/c0903f1d814d2b160b4e767f5acfa1c7aa0082aa.png)
ibatis用法iBATIS(现已更名为 MyBatis)是一种用于将对象与 SQL 语句映射的持久化框架。
以下是 iBATIS/MyBatis 的基本用法:配置文件:创建一个MyBatis 配置文件(通常是mybatis-config.xml),其中包含数据库连接信息、映射文件的位置等配置。
<!-- mybatis-config.xml --><configuration><environments default="development"><environment id="development"><transactionManager type="JDBC"/><dataSource type="POOLED"><property name="driver" value="com.mysql.jdbc.Driver"/><property name="url" value="jdbc:mysql://localhost:3306/mydatabase"/><property name="username" value="root"/><property name="password" value="password"/></dataSource></environment></environments><mappers><mapperresource="com/example/mappers/UserMapper.xml"/></mappers></configuration>映射文件:创建一个XML 文件,用于映射Java 对象与SQL 语句。
ibatis的原理
![ibatis的原理](https://img.taocdn.com/s3/m/8459e117bc64783e0912a21614791711cd79796b.png)
ibatis的原理iBATIS(即Internet-Based Automated Testing Information System)是一种基于Java的持久化框架,用于简化数据库访问的过程。
它采用了一种简单直观的方式来映射Java对象和SQL语句,使得开发人员可以更加专注于业务逻辑的实现,而不用关心底层的数据库操作细节。
iBATIS的原理可以简单概括为以下几个方面:1. SQL映射文件:iBATIS通过XML格式的SQL映射文件来定义数据库操作的语句。
这些映射文件包含了SQL语句的定义,以及与Java对象之间的映射关系。
开发人员可以在映射文件中定义各种操作,如插入、更新、删除和查询等。
2. 数据源配置:在应用程序启动时,需要配置数据源,即数据库的连接信息。
iBATIS支持多种数据源类型,如JDBC、JNDI和DataSource等。
通过配置数据源,iBATIS可以根据需要获取数据库连接,并执行相应的SQL语句。
3. SQL执行:在执行SQL语句之前,需要创建一个SqlMapClient 对象,该对象是iBATIS的核心组件之一。
通过SqlMapClient对象,可以获取一个SqlSession对象,通过该对象可以执行SQL语句。
在执行SQL语句时,iBATIS会根据映射文件中定义的SQL语句,将Java对象与SQL语句进行参数映射,并执行相应的数据库操作。
4. 结果映射:执行SQL语句后,iBATIS会将查询结果映射到Java 对象中。
开发人员可以在映射文件中定义映射规则,将查询结果的列与Java对象的属性进行映射。
iBATIS支持多种映射方式,如自动映射、手动映射和混合映射等。
通过结果映射,可以将数据库查询结果转化为Java对象,便于在应用程序中进行处理和展示。
5. 缓存管理:为了提高数据库访问的性能,iBATIS提供了一种缓存机制。
在执行SQL语句时,iBATIS会将查询结果缓存起来,下次执行相同的查询时,可以直接从缓存中获取结果,而不必再次访问数据库。
ibatis配置详解
![ibatis配置详解](https://img.taocdn.com/s3/m/c153da270066f5335a812196.png)
ibatis批量操作ibatis批量操作存在两种方式:一种是直接在代码中进行循环操作,另一种是在配置文件中进行循环操作。
(1)在配置文件中循环:1.情况一:多个输入参数循环次数不对称:处理方式:新建一个JAVABEAN,将各个参数作为其属性进行赋值。
在配置文件中,获取其值,进行各自循环。
如下例:要更新的字段Opr的值只有一个,而ID的值却有多个。
代码:public void batchClientAppOperation(String[] appDevIds,String operation) throws Exception {try{AppOperation appOpr=new AppOperation();appOpr.setOperation(operation);appOpr.setAppDevIds(appDevIds);this.getSqlMapClientTemplate().update("Device.ClientAppOperation", appOpr);}catch (DataAccessException ex){throw new Exception(Constants.ERROR_CODE_DELETE_USER_BY_ID.getLongValue(),ex);}}ibatis配置文件:<update id="Device.ClientAppOperation" parameterClass="AppOperation">update T_Device_App_R_Infoset Opr=#operation#where ID in<iterate conjunction="," open="(" close=")" property="appDevIds">#appDevIds[]#</iterate></update>2.情况二:多个输入参数循环次数是对称的:处理方式:新建一个hashmap,将各个参数名作为key,参数值作为value。
iBatis简单入门手册整理
![iBatis简单入门手册整理](https://img.taocdn.com/s3/m/a93bc2836bec0975f465e295.png)
iBatis简单入门整理手册iBatis简介:iBatis 是apache 的一个开源项目,一个O/R Mapping 解决方案,iBatis 最大的特点就是小巧,上手很快。
如果不需要太多复杂的功能,iBatis 是能够满足你的要求又足够灵活的最简单的解决方案,现在的iBatis 已经改名为Mybatis 了。
官网为:/搭建iBatis开发环境:1 、导入相关的jar 包,ibatis-2.3.0.677.jar 、mysql-connector-java-5.1.6-bin.jar2 、编写配置文件:Jdbc 连接的属性文件总配置文件, SqlMapConfig.xml关于每个实体的映射文件(Map 文件)Demo:Student.java:1.package com.iflytek.entity;2.3.import java.sql.Date;4.5./**6.* @author xudongwang 2011-12-317.*8.* Email:xdwangiflytek@9.*10.*/11.publicclass Student {12.// 注意这里需要保证有一个无参构造方法,因为包括Hibernate在内的映射都是使用反射的,如果没有无参构造可能会出现问题13.privateint id;14.private String name;15.private Date birth;16.privatefloat score;17.18.publicint getId() {19.return id;20.}21.22.publicvoid setId(int id) {23.this.id = id;24.}25.26.public String getName() {27.return name;28.}29.30.publicvoid setName(String name) { = name;32.}33.34.public Date getBirth() {35.return birth;36.}37.38.publicvoid setBirth(Date birth) {39.this.birth = birth;40.}41.42.publicfloat getScore() {43.return score;44.}45.46.publicvoid setScore(float score) {47.this.score = score;48.}49.50.@Override51.public String toString() {52.return"id=" + id + "\tname=" + name + "\tmajor=" + birth + "\tscore="53.+ score + "\n";54.}55.56.}SqlMap.properties :1.driver=com.mysql.jdbc.Driver2.url=jdbc:mysql://localhost:3306/ibatisername=root4.password=123Student.xml :1.<?xml version="1.0"encoding="UTF-8"?>2.<!DOCTYPE sqlMap PUBLIC "-////DTD SQL Map 2.0//EN"3."/dtd/sql-map-2.dtd">4.5.<sqlMap>6.<!-- 通过typeAlias使得我们在下面使用Student实体类的时候不需要写包名 -->7.<typeAlias alias="Student"type="com.iflytek.entity.Student"/>8.9.<!-- 这样以后改了sql,就不需要去改java代码了 -->10.<!-- id表示select里的sql语句,resultClass表示返回结果的类型 -->11.<select id="selectAllStudent"resultClass="Student">12.select * from13.tbl_student14.</select>15.16.<!-- parameterClass表示参数的内容 -->17.<!-- #表示这是一个外部调用的需要传进的参数,可以理解为占位符 -->18.<select id="selectStudentById"parameterClass="int"resultClass="Student">19.select * from tbl_student where id=#id#20.</select>21.22.<!-- 注意这里的resultClass类型,使用Student类型取决于queryForList还是queryForObject -->23.<select id="selectStudentByName"parameterClass="String"24.resultClass="Student">25.select name,birth,score from tbl_student where name like26.'%$name$%'27.</select>28.29.<insert id="addStudent"parameterClass="Student">30.insert into31.tbl_student(name,birth,score) values32.(#name#,#birth#,#score#)33.<selectKey resultClass="int"keyProperty="id">34.select @@identity as inserted35.<!-- 这里需要说明一下不同的数据库主键的生成,对各自的数据库有不同的方式: -->36.<!-- mysql:SELECT LAST_INSERT_ID() AS VALUE -->37.<!-- mssql:select @@IDENTITY as value -->38.<!-- oracle:SELECT STOCKIDSEQUENCE.NEXTVAL AS VALUE FROM DUAL -->39.<!-- 还有一点需要注意的是不同的数据库生产商生成主键的方式不一样,有些是预先生成(pre-generate)主键的,如Oracle和PostgreSQL。
iBATIS介绍
![iBATIS介绍](https://img.taocdn.com/s3/m/ea56e08102d276a200292e60.png)
介绍iBATIS是以SQL为中心的持久化层框架。
能支持懒加载、关联查询、继承等特性。
iBATIS不同于一般的OR映射框架。
OR映射框架,将数据库表、字段等映射到类、属性,那是一种元数据(meta-data)映射。
iBATIS则是将SQL查询的参数和结果集映射到类。
所以,iBATIS做的是SQL Mapping的工作。
它把SQL语句看成输入以及输出,结果集就是输出,而where后面的条件参数则是输入。
iBATIS能将输入的普通POJO对象、Map、XML等映射到SQL的条件参数上,同时也可以将查询结果映射到普通POJO对象(集合)、Map、XML等上面。
iBATIS使用xml文件来映射这些输入以及输出。
简单示例基于ibatis-2.3.0.677版本。
1、创建新的项目,并引入jar包a)ibatis-2.3.0.677.jarb)mysql驱动5、创建测试程序测试:SqlMapClient对象这个对象是iBatis操作数据库的接口(执行CRUD等操作),它也可以执行事务管理等操作。
这个类是我们使用iBA TIS的最主要的类。
它是线程安全的。
通常,将它定义为单例。
(与How To如何获得刚插入记录的自增长ID值?parameterClass的使用parameterMap的使用利用parameterMap,可以定义参数对象的属性如何映射到SQL查询语句的动态参数上,注意parameterMap中<parameter/>标签的先后顺序不能颠倒!如何将查询结果映射到不同的对象?(resultClass的使用)如何将查询结果集映射到不同的对象?(resultMap的基本使用)如何将查询结果集映射为xml格式的数据?如何用Map类型的对象作为传入参数?如何将查询结果集的元素转换为Map类型的对象?事务处理可以使用sqlMapClient的startTransaction/commitTransaction/endTransaction等方法来控制事务的边界。
myibatis详细步骤
![myibatis详细步骤](https://img.taocdn.com/s3/m/1bd0b58fa0116c175f0e4809.png)
<generatorConfiguration>
<classPathEntrylocation="mysql-connector-java-5.1.6-bin.jar"/>
<contextid="DB2Tables"targetRuntime="MyBatis3">
2、创建工程,引入jar包
3、运行generator自动生成的jar包
先创建config.xml
<?xmlversion="1.0"encoding="UTF-8"?>
<!DOCTYPEgeneratorConfiguration
PUBLIC"-////DTD MyBatis Generator Configuration 1.0//EN"
publicvoidupdatevalue(intid, String username) {
SqlSession session = GetSqlSessionFactory.getInstance().getSqlSessionFactory().openSession();
User user =newUser();
}
publicSqlSessionFactory getSqlSessionFactory() {
returnsqlSessionFactory;
}
}
6、编写DAO(接口省)
publicclassDealUserDAOImplimplementsIDealUserDAO{
ibatis常见的对象关系映射
![ibatis常见的对象关系映射](https://img.taocdn.com/s3/m/a32730092379168884868762caaedd3382c4b55e.png)
ibatis常见的对象关系映射ibatis常见的对象关系映射与实现由于在使⽤ ibatis 进⾏项⽬开发中,需要根据数据库的表结构与 Java 类之间的关系写出实现的 SQL 代码,不同的关系会对应不同 SQL 实现。
这些 SQL 代码将会和其他 mapping 信息⼀起放在 ibatis 的 SQL mapping ⽂件中。
下⾯就对这些每⼀种映射进⾏详细分析并给出实现⽰例。
单表对象绑定与多表对象绑定在 ibatis 中最简单的关系就是⼀个对象对单个表的绑定,这也是最简单的类与数据库的映射关系。
在没有任何外键关系的时候,在 ibatis 中直接将类的字段对应到表的列即可:清单 1. 单个对象表绑定的实现1. <typeAlias alias="Bank" type="com.example.domain.Bank"/>2. <resultMap id="getBankResult" class="Bank">3. <result property="id" column="B_ID"/>4. <result property="name" column="B_NAME"/>5. </resultMap>6.7. <select id="getBankById" resultMap="getBankResult" parameterClass="string"/>8. SELECT `BANKL`.`BANKID` AS `B_ID`, `BANKL`.`NAME` AS `B_NAME`9. FROM `BANKL`10. WHERE `BANKID` = #id#11. </select/>复制代码在某些特殊的对象中,有的时候需要将⼀个对象映射到多个表中,在这个时候就需要在映射时加⼊对两张表的选择。
ibatis学习笔记
![ibatis学习笔记](https://img.taocdn.com/s3/m/101fdaa26294dd88d1d26b10.png)
ibatis学习笔记1、搭建环境:(1)、创建ibatis_test项目。
(2)、添加SQL2000驱动包msbase.jar、mssqlserver.jar、msutil.jar和ibatis-2.3.3.720.jar包。
2、配置文件:(1)、JDBC连接属性文件:在src目录下添加SqlMap.properties属性文件,主要包括JDBC连接的主要信息,driver=,url=,username=,password=,也可以见JDBC连接的信息直接写到总配置文件中。
(2)、配置每个实体的映射文件(map文件):如Student.xml文件,其主要是包括对实体进行CURD操作的SQL语句的映射。
(3)、添加总配置文件:(参见SqlMapConfig.xml文件)其主要功能是导入SqlMap.properties和Student.xml文件,进行统一管理3、创建相应的类:(1)、建立实体类Student.java类。
(2)、建立管理类接口StudentDao,和实现类StudentDaoImpl4、测试CRUD操作:(1)、在StudentDaoImpl类中添加读取配置(2)、测试查询所有信息的方法queryAllStudent(),在Student.xml文件中配置SQL 语句映射信息。
例如:<“-- 查找所有用户 --><select id="selectAllStudents" resultClass="Student" >select * from t_student;</select>在queryAllStudent()方法中使用sqlMapClient的queryForList()方法进行调用:public List<Student> queryAllStudent() {List<Student> studntList = null;try {studntList=sqlMapClient.queryForList("selectAllStudents");} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}return studntList;}4、ibatis使用HashMap传递SQL多个参数:虽然ibatai sql map可以配置多个参数,但sqlMap只能传入一个参数,我们有两种方式,一是把我们的参数封装成一个类,通过set/get取值的方式给sql map注入参数,二是通过hashMap(可以组合一些不是同一个pojo的参数有优势):范例:<“-- 使用Map解决多参数问题,多条件的查询 --><statement id="selectStudentByMap" parameterClass="java.util.Map" resultClass="Student">select sid,sname ,major,birth,scorefrom t_studentwhere sname like '%$sname$%'and score=#score#</statement>注意:Map中的值key和类型要和SQL语句的的参数名称和类型一样。
ibatis中的orderby参数配置问题
![ibatis中的orderby参数配置问题](https://img.taocdn.com/s3/m/4fffe3c4f71fb7360b4c2e3f5727a5e9856a273b.png)
ibatis中的orderby参数配置问题
ibatis中的order by 参数配置问题
减小字体增大字体
今天在写项目的时候,碰到了这个问题,调试了半天都没搞定。
最后把问题锁定到xml配置文件上:
一般配置文件都这么写
<select ...>
select * from table where XXX = #valule# order by #value# </select>
但是由于ibatis在将参数值映射到statement里面时,所以对于#value# 会解释成字符串 'value' ,于是我的代码就被解释成select * from table where XXX = 'valule' order by 'value'
这样显然不对,所以得换个方法
<select ...>select * from table where XXX = #valule# order by $value$</select>
用$$来包含order by的参数,就OK了~因为$$内的value不会被解释成'value',而是直接原样翻译。
总结:如果要考虑数据类型,用#;若是只考虑字符,则用$.。
mybatis映射配置文件 (1)
![mybatis映射配置文件 (1)](https://img.taocdn.com/s3/m/02910a1cd15abe23482f4dd3.png)
XML 映射配置文件MyBatis 的XML 配置文件包含了影响MyBatis 行为甚深的设置和属性信息。
XML 文档的高层级结构如下:•configuration 配置•properties 属性•settings 设置•typeAliases 类型命名•typeHandlers 类型处理器•objectFactory 对象工厂•plugins 插件•environments 环境•environment 环境变量•transactionManager 事务管理器•dataSource 数据源•databaseIdProvider chinese?•mappers 映射器properties这些是外部化的, 可替代的属性, 这些属性也可以配置在典型的Java 属性配置文件中, 或者通过properties 元素的子元素来传递。
例如:<properties resource="org/mybatis/example/config.properties"><property name="username"value="dev_user"/><property name="password"value="F2Fa3!33TYyg"/></properties>其中的属性就可以在整个配置文件中使用,使用可替换的属性来实现动态配置。
比如:<dataSource type="POOLED"><property name="driver"value="${driver}"/><property name="url"value="${url}"/><property name="username"value="${username}"/><property name="password"value="${password}"/></dataSource>这个例子中的username 和password 将会由properties 元素中设置的值来替换。
iBatis和MyBatis SQL映射文件编码规范
![iBatis和MyBatis SQL映射文件编码规范](https://img.taocdn.com/s3/m/133168749b6648d7c1c746f4.png)
iBatis和MyBatis SQL映射文件编码规范目录1 XML注释注意事项 (2)1.1 使用<!-- -->注释,前后至少留出一个半角空格 (2)1.2 避免注释出现在SQL语句中 (2)2 防止SQL注入 (2)2.1 变量引用的两种写法 (2)2.1.1 $写法,存在SQL注入风险 (2)2.1.2 #写法,数据库预编译,防止SQL注入 (3)2.2 LIKE 操作符 (3)2.2.1 $写法 (3)2.2.2 #写法 (3)2.3 IN 操作符 (4)2.3.1 $写法 (4)2.3.2 #写法 (4)2.4 TOP 子句 (5)2.4.1 $写法 (5)2.4.2 #写法 (5)2.5 ORDER BY 子句 (5)2.5.1 $写法 (5)2.5.2 #写法 (6)2.6 GROUP BY 语句 (6)2.6.1 $写法 (6)2.6.2 #写法 (6)3 避免使用SELECT *查询物理表 (7)3.1 避免使用SELECT * 查询物理表 (7)4 避免WHERE/ON语句中列类型隐式转换 (7)4.1 变量类型优先级应不高于数据库中的列类型 (7)4.2 指定字符串变量的JDBC类型 (8)5 避免WHERE/ON语句中对字段使用函数运算 (9)5.1 日期类型字段 (9)5.1.1 查询条件和日期字段的精确度一致 (9)5.1.2 如果查询条件和日期字段的精确度不一致 (10)5.2 字符串类型字段 (12)6 指定别名(Alias) (12)6.1 建议使用AS关键字指定别名,而不是空格 (12)6.2 建议子查询中应指定表的别名 (13)6.3 建议避免使用a、b、c、d等无意义的别名 (13)7 建议使用WITH (NOLOCK)(涉及金融、财务、支付和会计成本等等的SQL语句不要使用该关键词) (14)7.1 建议SELECT语句使用WITH (NOLOCK) (关键业务除外) (14)8 建议指定表的架构名称 (14)8.1 建议指定表的架构名称dbo (14)1XML注释注意事项1.1使用<!-- -->注释,前后至少留出一个半角空格SQL XML映射文件中使用<!-- -->注释,其中注释内容不要紧挨着注释的起始标签和结束标签。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
ibatis学习笔记(一)>>>>>>>sqlMapConfig.xml文件详解1.sqlMapConfig.xml配置文件详解:Xml代码1.<?xml version="1.0"encoding="UTF-8"?>2.<! DOCTYPE sqlMapConfig3.P UBLIC "-////DTD SQL Map Config 2.0//EN"4."/dtd/sql-map-config-2.dtd" >5.<sqlMapConfig>6.<settings7.cacheModelsEnabled ="true" <!--是否启用缓存机制-- >zyLoadingEnabled="true"<!-- 是否启用延迟加载机制 -->9.enhancementEnabled="true"<!-- 是否启用字节码增强机制 -->10.errorTracingEnabled="true"<!-- 是否启用错误处理机制 -->11.maxRequests="32"<!-- 最大并发请求数 -->12.maxSessions="10"<!-- 最大Session数 -->13.maxTransactions="5"<!-- 最大并发事务数 -->eStatementNamespaces="true"/><!-- 是否启用名称空间 -->15.<transactionManager type ="JDBC"><!-- 定义了ibatis的事务管理器有3中(JDBC,JTA,EXTERNAL) -->16.<dataSource type ="SIMPLE"><!-- type属性指定了数据源的链接类型,也有3种类型(SIMPLE,DBCP,JNDI) -->17.<property name ="JDBC.Driver"value ="com.mysql.jdbc.Driver"/>18.<property name ="JDBC.ConnectionURL"value ="jdbc:mysql://localhost/test"/>19.<property name ="ername"value ="root"/>20.<property name ="JDBC.Password"value ="wyq"/>21.<property name ="Pool.MaximumActiveConnections"value ="10"/><!-- 连接池维持的最大容量 -->22.<property name ="Pool.MaximumIdleConnections"value ="5"/><!-- 连接池允许挂起的最大连接 -->23.<property name ="Pool.MaximumCheckoutTime"value ="120000"/><!-- 连接被某个任务所允许占用的最大时间 -->24.<property name ="TimeToWait"value ="500"/><!-- 线程允许等待的最大时间 -->25.26.</dataSource>27.</transactionManager>28.<sqlMap resource ="com/wyq/map/userMap.xml"/>29.</sqlMapConfig>一transactionManager节点transactionManagerab 定义了ibatis的事务管理器,目前提供了以下几种选择:1) JDBC通过传统JDBC mit/rollback实现事务支持.2) JTA使用容器提供的JTA服务实现全局事务管理.3) EXTERNAL外部事务管理,如在EJB中使用ibatis,通过EJB的部署配置即可实现自动的事务管理机制.此时ibatis将把所有事务委托给外部容器进行管理.此外,通过Spring等轻量级容量实现事务的配置化管理也是一个不错的选择.二dataSource 节点dataSource 从属于transactionManager, 用于设定ibatis运行期使用DataSource属性.type 属性: dataSource 元素的type 属性指定了dataSource 的实现类型.可选项目:1) SIMPLE:SIMPLE 是ibatis 内置的dataSource 实现,其中实现了一个简单的数据库连接池机制,对应ibatis 实现类为com.ibatis.sqlmap.engine.datasource.SimpleDataSourceFactory.JDBC 使用数据库自己的事务(局部事务),connect.beginTranstion(), mit()等.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托管事务中使用.JNDI的配置大部分都在应用服务器中进行,所以在ibatis中的配置相对简单(1)jdbc事务控制的JNDI配置Xml代码1.<transctionManager type ="JDBC">2.<dataSource type ="JNDI">3.<property name ="DataSource"value ="java:comp/env/jdbc/myDataSource"/>4.</dataSource>5.</transctionManager>(2)JTA事务控制的JNDI配置Xml代码1.<transctionManager type ="JTA">2.<property name ="UserTransaction"value ="java:/ctx/con/UserTransaction"/>3.<dataSource type ="JNDI">4.<property name ="DataSource"value ="java:comp/env/jdbc/myDataSource"/>5.</dataSource>6.</transctionManager>sqmMap节点指定了映射文件的位置,配置文件中可以定义多个sqlMap元素,以指定项目内所包含的所有映射文件.ibatis学习笔记(二)>>>>>>>sqlMapConfig.xml文件详解ibatis基础代码包括:1.ibatis实例配置一个典型的配置文件如下(具体配置项目的含义见后):<? xml version="1.0" encoding="UTF-8" ?><! DOCTYPE sqlMapConfigPUBLIC "-////DTD SQL Map Config 2.0/"[url]/dtd/[/url]sql-map-config-2.dt<sqlMapConfig >< settingscacheModelsEnabled ="true"enhancementEnabled ="true"lazyLoadingEnabled ="true"errorTracingEnabled ="true"maxRequests ="32"maxSessions ="10"maxTransactions ="5"useStatementNamespaces ="false"/>< transactionManager type ="JDBC" >< dataSource type ="SIMPLE" >< property name ="JDBC.Driver" value ="com.p6spy.engine.spy.P6SpyDriver" />< property name ="JDBC.ConnectionURL" value="jdbc:mysql://localhost/sample" />< property name ="ername" value ="user" />< property name ="JDBC.Password" value ="mypass" />< property name ="Pool.MaximumActiveConnections" value ="10" />< property name ="Pool.MaximumIdleConnections" value ="5" />< 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 ="com/ibatis/sample/User.xml" /></ sqlMapConfig >⑴Settings 节点cacheModelsEnabled是否启用SqlMapClient上的缓存机制。