专注于互联网--专注于架构

最新标签
网站地图
文章索引
Rss订阅

首页 »Java教程 » ibatis:ibatis小结 »正文

ibatis:ibatis小结

来源: 发布时间:星期三, 2008年9月10日 浏览:342次 评论:0
sqlMap配置文件

<?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元素指定全局配置选项 -->
<!-- useStatementNamespaces属性指定是否开启命名空间,默认值为false(关闭) -->
<!-- cacheModelsEnabled属性指定是否开启数据高速缓存,默认值为true(开启) -->
<!-- enhancementEnabled属性指定是否开启cglib中已优化的类来提高延迟加载的性能,默认值为true(开启) -->
<!-- lazyLoadingEnabled属性指定是否开启延迟加载,默认值为true(开启) -->
<settings

useStatementNamespaces="true"
cacheModelsEnabled="true"
enhancementEnabled="true"
lazyLoadingEnabled="true"
/>

<!-- 由transactionManager元素的type属性值指定使用哪个事务管理器. -->
<transactionManager type="JDBC" commitRequired="false">
<!-- dataSource元素定义DataSourceFactory的实现类,用这个实现类来创建实际的DataSourse. -->
<dataSource type="SIMPLE">
<!-- 指定数据源的各种属性值 -->
<property name="JDBC.Driver" value="oracle.jdbc.driver.OracleDriver" />
<property name="JDBC.ConnectionURL"
value="jdbc:oracle:thin:@127.0.0.1:1521:TEST" />
<property name="JDBC.Username" value="me" />
<property name="JDBC.Password" value="123" />
</dataSource>
</transactionManager>

<sqlMap resource="com/lovo/ibatis/student.xml" />

</sqlMapConfig>
——————————————————————————————————————————————————————
<!-- ibatis映射文件 -->

<?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="Person">

<!-- 给经常使用到的类取一个别名 -->
<typeAlias alias="person" type="com.po.Person"/>
<!-- 查询全部数据 -->
<select id="getAllPerson" resultClass="person">
<![CDATA[
select * from person
]]>
</select>

<!-- 查询单条数据 -->
<select id="getOnePerson" resultClass="person" parameterClass="int">
<![CDATA[
select * from person where id=#id#
]]>
</select>

<!-- 插入1条数据 -->
<insert id="insertUser" parameterClass="person">
<![CDATA[
INSERT INTO person(name,pwd) VALUES (#name#,#pwd#)
]]>
</insert>

<!-- 删除全部数据 -->
<delete id="deleteAllPerson">
<![CDATA[
delete from person
]]>
</delete>

<!-- 删除1条数据 -->
<delete id="deleteOnePerson" parameterClass="person">
<![CDATA[
delete from person where id=#id#
]]>
</delete>

<!-- 更新1条数据 -->
<update id="updatePerson" parameterClass="person">
<![CDATA[
UPDATE person SET name=#name#,pwd=#pwd# WHERE id = #id#
]]>
</update>


</sqlMap>
——————————————————————————————————————————————————————
可以将一条sql语句进行分解,如:
<sql id="select-all">
<![CDATA[
select * from t_stu
]]>
</sql>

<sql id="where-name">
<![CDATA[
where s_name = #name#
]]>
</sql>

<!-- 查询一个学生 -->
<select id="showOneStudent" parameterClass="String" resultClass="student">
<include refid="select-all"/>
<include refid="where-name"/>
</select>

这样在其他sql语句中也可以引用<sql>标签中定义的语句,只要传入的参数正确即可,提高了复用率
(注意:<include>标签组合sql语句的顺序)

——————————————————————————————————————————————————————
ibatis中like关键字的用法
<select id="showOneStudentByName" parameterClass="String" resultMap="studentORM">
<![CDATA[
select * from t_stu where s_name like '%'||#name#||'%'
]]>
</select>
——————————————————————————————————————————————————————

读取配置文件
Reader reader = Resources.getResourceAsReader("SqlMapConfig.xml");
SqlMapClient sqlMapper = SqlMapClientBuilder.buildSqlMapClient(reader);
reader.close();

查询单条记录
Person p = (Person)sqlMapper.queryForObject("getOnePerson", 55);
System.out.println("名字:" + p.getName() + " 密码:" + p.getPwd());

查询全部记录(返回1个List)
List personList = sqlMapper.queryForList("getAllPerson");
for(int i=0; i<personList.size(); i++){
Person p = (Person)personList.get(i);
String name = p.getName();
String pwd = p.getPwd();
System.out.println("名字:" + name + " 密码:" + pwd);
}

查询全部记录(返回1个Map),其中id和name都是Person类的属性,
得到的Map是以id属性的值作为键,name属性的值作为值
Map map = sqlMapper.queryForMap("getAllPerson", null, "id","name");
Set keySet = map.keySet();
Iterator it = keySet.iterator();
while(it.hasNext()){
int id = (Integer) it.next();
String name = (String) map.get(id);
System.out.println(id + " " +name);
}

分页支持
arg0表示映射文件中要执行的sql语句,arg1表示从第多少行记录开始(包含这一行记录)
arg2表示要取多少行记录。
例如:List personList = sqlMapper.queryForList("getAllPerson",8,5);
表示执行"getAllPerson"匹配的sql语句,从第8行记录开始,取5条记录。

更改数据
Person p = new Person();
p.setId(55);
p.setName("张三");
p.setPwd("321");
sqlMapper.update("updatePerson",p);

删除全部数据
sqlMapper.delete("deleteAllPerson");

删除单条数据
for(int i=0; i<10; i++){
Person p = new Person();
p.setId(i);
sqlMapper.delete("deleteOnePerson",p);
}

插入单条数据
for(int i=0; i<10; i++){
Person p = new Person();
p.setName("名字" + i);
p.setPwd("密码" + i);
sqlMapper.insert("insertUser",p);
}
____________________________________________
事务处理
sqlMapper.startTransaction();
try{
for(int i=1; i<11; i++){
Person p = new Person();
p.setId(i);
p.setName("名字" + i);
p.setPwd("密码" + i);
sqlMapper.insert("insertUser",p);
}

Person p = new Person();
p.setId(1);
sqlMapper.insert("insertUser", p);
sqlMapper.commitTransaction();
}
catch (Exception e) {
sqlMapper.endTransaction();
e.printStackTrace();
}

SqlMapClient类中有以下方法控制事务
startTransaction()方法开始一个事务
commitTransaction()方法提交事务
endTransaction()方法回滚事务

相关文章

读者评论

  • 共0条 分0页

发表评论

  • 昵称:
  • 内容: