标签:ibatis
iBatis是一个"半自动"的轻量级O/R Mapping框架。
O/R Mapping是指对象与数据库之间的映射,而iBatis就是这样一个映射器,映射器的主要作用是在对象和数据库之间搬运数据,同时保证对象、数据库和映射器之间相互独立。
通过O/R Mapping你将不用再面对那一堆令人厌恶的JDBC代码,为一堆打开连接、关闭连接的代码而眼花头昏。
何为"半自动"? 这里的半自动是与Hibernate这样的O/R Mapping方案对比得出的,在Hibernate中只要建立起完全的O/R关系,甚至在对数据库进行CRUD(create read update delete)操作时都不用写SQL语句,Hibernate会自动帮你生成sql语句,然后使用JDBC来操纵数据库。在iBatis中可不行,你需要自己定义要使用的sql语句。
相比于Hibernate这样的重量级O/R Mapping框架,iBatis入门简单,延续了很好用的sql使用经验,在某些对性能要求较高的场合下,使用iBatis可以量身定制你的sql语句,优化操作效率。而对于Hibernate,设计一个好的O/R映射则显得比较困难,你需要在对象模型和性能之间权衡取舍。而在O/R映射设计完成之后,如果使用的是iBatis,数据库查询的sql语句仍然需要自己编写,工作量很大,而若是Hibernate,则你的整个持久层代码将显得非常简洁,开发效率高。
iBatis映射将对象操作映射成SQL语句,可以使用statement、select、insert、update、delete、procedure等元素来配置。
其中statement元素可以配置成任意的sql语句,procedure用于配置储存过程,其他元素则各有侧重点。
| Statement Element | Attribute |
| <statement> | id parameterClass resultClass parameterMap resultMap cacheModel resultSetType fetchSize xmlResultName reMapResults timeout |
| <select> | 与上同 |
| <insert> | id parameterClass parameterMap |
| <update> | id parameterClass parameterMap |
| <delete> | id parameterClass parameterMap |
| <procedure> | 与statement相比, 无resultSetType |
1. 搭建环境: 下载iBatis的jar包,并导入到你的project中,我目前使用的是 ibatis-2.3.3.720.jar\ibatis-2.3.3.720.jar。
2. 定义你的model:User类
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;
}
}3. 配置文件:
1) JDBC的连接属性文件 SqlMap.properties
driver=com.mysql.jdbc.Driver url=jdbc:mysql://localhost:3306/ibatis_test username=root password=root2) 总配置文件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>
<properties resource="SqlMap.properties" />
<transactionManager type="JDBC">
<dataSource type="SIMPLE">
<property name="JDBC.Driver" value="${driver}" />
<property name="JDBC.ConnectionURL" value="${url}" />
<property name="JDBC.Username" value="${username}" />
<property name="JDBC.Password" value="${password}" />
</dataSource>
</transactionManager>
<sqlMap resource="User.xml"/> //引入实体的映射文件
</sqlMapConfig>3)实体的映射文件 User.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="UserDAO"> <!-- 建立表与对象的映射关系 --> <resultMap id="UserDO" class="com.troy.model.User"> <result property="id" column="ID" /> <result property="username" column="USERNAME" /> <result property="password" column="PASSWORD" /> </resultMap> <insert id="insert" parameterClass="com.troy.model.User"> insert into USER (USERNAME,PASSWORD) values ( #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 USER where USERNAME = #username# ]]> </delete> <update id="updateUser" parameterClass="com.troy.model.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,PASSWORD from USER where USERNAME = #username# </select> </sqlMap>
说明:
例:<select id=“…” parameter=“…” resultClass=“…”>
select * from user where age <![CDATA[ > ]]>18
</select>
public static void main(String[] args) {
SqlMapClient sqlMapclient = null;
try {
Reader reader = com.ibatis.common.resources.Resources
.getResourceAsReader("SqlMapConfig.xml");
sqlMapclient = com.ibatis.sqlmap.client.SqlMapClientBuilder
.buildSqlMapClient(reader);
User user = new User();
user.setPassword("12345");
user.setUsername("troy");
sqlMapclient.insert("insert", user);
user.setPassword("123");
sqlMapclient.update("updateUser", user);
User user1 = new User();
user1.setUsername("Troy");
@SuppressWarnings("unchecked")
List<User> users = (List<User>) sqlMapclient.queryForList("selectUser", "troy");
for(User temp : users) {
System.out.println(temp.getId() + "-" + temp.getUsername() + "-" + temp.getPassword());
}
// sqlMapclient.delete("deleteUserByName", "troy");
reader.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}可以在mysql中和Eclipse中观察到程序的运行结果。
我把上面例子的代码放在了http://download.csdn.net/detail/troy__/7432523,欢迎各位前去下载测试...
标签:ibatis
原文地址:http://blog.csdn.net/troy__/article/details/27957405