ibatis简单实现与配置
            (编辑:jimmy 日期: 2025/11/4 浏览:2)
         
        那我们什么时候可以用到ibatis呢,我们用hibernate的时候会发现,有的时候hibernate不支持一些特别精确的查询,这个时候我们完全可以用到ibatis,因为他是半自动化的。一会我们可以看到,他的查询语句是我们在配置文件xml中写的。hibernate可以用到一些大型的项目当中,ibatis我们可以应用到一些小型的项目当中。 
下面我们看下ibatis的具体实现,hibernate中,我们都知道有一个hibernate.cfg.xml配置文件,和另一个*.hbm.xml配置文件,在ibatis中,我们同样也有两个配置文件,一个为SqlMapConfig.xml另一个为*.xml下面我们具体的看下两个配置文件中的具体配置方法。 
SqlMapConfig.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" 
enhancementEnabled="true" 
lazyLoadingEnabled="true" 
errorTracingEnabled="true" 
maxRequests="32" 
maxSessions="10" 
maxTransactions="5" 
useStatementNamespaces="false" /> 
<!-- maxrequest 同时执行sql语句的最大条数 最好至少是maxTransactions的10倍数 而且大于maxSession 
maxTransactions 同时进入SqlMapClient.startTransaction()的 最大线程数 
maxSession 同一时间段内 最大session数 大于maxTransactions 小于maxRequest 
cacheModelsEnabled 全局性的启用或者禁用SqlMapClient的所有缓存model true为启用 默认为启用 
lazyLoadingEnabled 全局性的启用或者禁用SqlMapClient的所有延迟加载,调试程序使用 true为启用 默认为启用 
enhancementEnabled 全局性的启用或者禁用运行时字节码增强 false为禁用 默认为禁用 
useStatementNamespaces 如果启用本属性,必须使用权限定名来引用mappedstatement。 
这是由sql-map的名称和mapped-statment的名称合成,默认为false 禁用。 
--> 
<transactionManager type="JDBC"> 
<dataSource type="SIMPLE"> 
<property name="JDBC.Driver" value="com.mysql.jdbc.Driver"/> 
<property name="JDBC.ConnectionURL" value="jdbc:mysql://localhost/sample"/> 
<property name="JDBC.Username" value="root"/> 
<property name="JDBC.Password" value="admin"/> 
<!-- transactionManager元素为SQL Map配置事务管理服务 
type指定所使用的管理器类型可以为JDBC JTA EXTERNAL 
datasource元素是transactionManager的一部分 
为SQL Map数据源设置了一些列参数。 
dataSource type为 是根据选择链接数据库的方式决定的 
peoperty中的JDBC.Driver为 驱动 
ConnectionURL为链接地址 
Username为访问数据库的用户名 
Password为访问数据库的密码 
--> 
<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 sample" /> 
<property name="Pool.PingEnabled" value="false" /> 
<property name="Pool.PingConnectionsOlderThan" value="1" /> 
<property name="Pool.PingConnectionsNotUsedFor" value="1" /> 
<!-- MaximumIdleConnections数据库连接池中允许的挂起(idle)连接数 
MaximumCheckoutTime数据库联接池中,连接被某个任务所允许占用的最大时间, 
如果超过这个时间限定,连接将被强制收回。(毫秒) 
TimeToWait当线程试图从连接池中获取连接时,连接池中无可用连接可供使用, 
此时线程将进入等待状态,直到池中出现空闲连接。 
此参数设定了线程所允许等待的最长时间。(毫秒) 
PingQuery数据库连接状态检测语句。某些数据库在连接在某段时间持续处于空闲 
状态时会将其断开。而连接池管理器将通过此语句检测池中连接是否可用。 
检测语句应该是一个最简化的无逻辑SQL。如“select 1 from t_user”, 
如果执行此语句成功,连接池管理器将认为此连接处于可用状态 
PingEnabled是否允许检测连接状态。 
PingConnectionsOlderThan对持续连接时间超过设定值(毫秒)的连接进行检测。 
Pool.PingConnectionsNotUsedFor对空闲超过设定值(毫秒)的连接进行检测。 
--> 
</dataSource> 
</transactionManager> 
<sqlMap resource="com/kobe/map/User.xml" /> 
<!-- sqlmap源的 位置"包名/ .xml注意包中间有.的时候用/代替" --> 
</sqlMapConfig> 
<!-- 注意 1.0允许配置多个数据源,这引起了一些不好的实现,因此 
2.0版本只允许一个数据源,要使用多个部署/配置参数,您最好使用多个属性文件, 
不同的属性文件,或在创建SQL Map时传入不同的属性文件。 --> 
里面的配置文件,对我们初级入门的人来说,主要的配置就是连接数据库的配置。 
下面,我们在看下*.xml中的配置 
<?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="User"> <!-- 映射文件名称 --> 
<typeAlias alias="user" type="com.kobe.map.User"/> <!-- 给对应的类取别名 --> 
<!-- sql语句 <![CDATA[可以避免SQL 中与XML 规范相冲突的字符对XML映射文件的合法性造成影响。 
--> 
<select id="getUser" parameterClass="java.lang.String" 
resultClass="user"> 
<!-- parameterClass是参数类型 
resultClass是结果的类型 
如果sql语句包括参数, 那么格式是#id# --> 
<![CDATA[ select name,sex from t_user where name = #name#]]> 
</select> 
<select id="getAllUser" resultClass="user"> 
<![CDATA[ select name, sex from t_user where name = #name# ]]> 
</select> 
<update id="updateUser" parameterClass="user"> 
<![CDATA[ UPDATE t_user SET name=#name#, sex=#sex# WHERE id = #id# ]]> 
</update> 
<delete id="deleteUser" parameterClass="user"> 
delete from t_user where id=#id# 
</delete> 
<insert id="insertUser" parameterClass="user"> 
<![CDATA[ insert into t_user (id,name,sex) values (#id#,#name#,#sex#) ]]> 
</insert> 
</sqlMap> 
这里面配置文件我们可以看出来了。这里体现了ibatis半自动化的体现,因为他的sql语句并不是自动生成,而是我们自己写的,所以这样我们可以执行更精确的查询。 
下面我们在看下Test实现 
import java.sql.SQLException; 
import com.ibatis.common.resources.Resources; 
import com.ibatis.sqlmap.client.SqlMapClientBuilder; 
public class Test { 
public static void main(String args[]){ 
//首先初始化iBatis获得一个SqlMapClient对象 
String resource = "com/kobe/map/SqlMapConfig.xml"; 
com.ibatis.sqlmap.client.SqlMapClient sqlMap = null; 
try { 
java.io.Reader reader = com.ibatis.common.resources.Resources 
.getResourceAsReader(resource); 
sqlMap = SqlMapClientBuilder.buildSqlMapClient(reader); 
} catch (Exception e) { 
e.printStackTrace(); 
} 
// sqlMap系统初始化完毕,开始执行update操作 
try { 
sqlMap.startTransaction(); 
User user = new User(); 
//user.setId(24); 
//user.setName("lzq"); 
//user.setSex(24); 
//sqlMap.insert("insertUser", user); 
//user.setId(24); 
//user.setName("kobelzq"); 
//user.setSex(24); 
//sqlMap.update("updateUser", user); //key为User xml中配置的id名字 键为bean的名字 
user.setId(2); 
sqlMap.delete("deleteUser", user); 
sqlMap.commitTransaction(); 
} catch (SQLException e) { 
System.out.println(e.getMessage()); 
} finally { 
try { 
sqlMap.endTransaction(); 
} catch (SQLException e) { 
e.printStackTrace(); 
} 
System.out.println("操作成功"); 
} 
} 
} 
上面我加注释的地方,大家可以根据不同的需要,测试下不同的效果,我测试了三个效果,分别为增,删,改,查询大家要是感兴趣的话,可以自己写下。我这里少写了一个持久类,持久类的写法大家都熟悉,我就不在这里给大家展示了,无非就是get与set方法,大家可以自己实现一下。
 
        
        
    
    荣耀猎人回归!七大亮点看懂不只是轻薄本,更是游戏本的MagicBook Pro 16.
人们对于笔记本电脑有一个固有印象:要么轻薄但性能一般,要么性能强劲但笨重臃肿。然而,今年荣耀新推出的MagicBook Pro 16刷新了人们的认知——发布会上,荣耀宣布猎人游戏本正式回归,称其继承了荣耀 HUNTER 基因,并自信地为其打出“轻薄本,更是游戏本”的口号。
众所周知,寻求轻薄本的用户普遍更看重便携性、外观造型、静谧性和打字办公等用机体验,而寻求游戏本的用户则普遍更看重硬件配置、性能释放等硬核指标。把两个看似难以相干的产品融合到一起,我们不禁对它产生了强烈的好奇:作为代表荣耀猎人游戏本的跨界新物种,它究竟做了哪些平衡以兼顾不同人群的各类需求呢?