ibatis 也算是久仰大名 不过一直没有时间尝试,最近听说已经脱离apache开始另立门户了。
这里采用的myeclipse 6.5中带的ibatis2 不过目前最新版本是3。
首先采用mysql 建立一个数据库 ibatis 创建表 users 里面字段 id 自增 u_name u_email
ibatis 配置文件 和hibernate的很类似
sql-map-config.xml
实体Bean 就是一个javaBean User.java
实体bean的映射文件 user.xml
这里已经通过标签定义了 crud方法
使用上很简单 一看就懂
这里对实体映射配置的说明
查询字段处理
1 实体字段与数据库字段相同 不需要特别映射 实体属性名==字段名
2 实体字段与数据库字段不同(Map映射 ,字段别名映射)
这里采用的是Map映射 如果数据库表和实体VO的属性不是同名,需要手动建立映射关系
当然也可以采用字段别名映射 不过此种方式并不推荐
主键的处理 这里我们采用的是mysql的自增类型 所以不用处理,下面的例子是针对oracle序列的方式 以此类推
类别名的配置<typeAlias/> 简化书写
否则我们就要些类全名 如:parameterClass="xxx.xxx.xxx.Claz"
转义文本块
CDATA 比如在sql语句中存在 < >等 xml不能处理的字符的时候
select * from t_user <![CDATA[ where tid>#value# ]]>
sql标签
在配置文件中有多处相同部分的sql信息
<sql id="select_user">
select * from users
</sql>
查询语句的sql 中 加入include 标签
这里采用的myeclipse 6.5中带的ibatis2 不过目前最新版本是3。
首先采用mysql 建立一个数据库 ibatis 创建表 users 里面字段 id 自增 u_name u_email
ibatis 配置文件 和hibernate的很类似
sql-map-config.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"
maxRequests="32"
maxSessions="10"
maxTransactions="5"
useStatementNamespaces="false"
/>
<transactionManager type="JDBC">
<dataSource type="SIMPLE">
<property name="JDBC.Driver"
value="com.mysql.jdbc.Driver" />
<property name="JDBC.ConnectionURL" value="jdbc:mysql://localhost:3306/ibatis?characterEncoding=UTF-8" />
<property name="JDBC.Username" value="root" />
<property name="JDBC.Password" value="" />
</dataSource>
</transactionManager>
<sqlMap resource="com/test/ibatis/hello/User.xml" />
</sqlMapConfig>
实体Bean 就是一个javaBean User.java
public class User {
private int id;
private String name;
private String email;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
}
实体bean的映射文件 user.xml
<?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="t_user">
<typeAlias alias="userVO" type="com.test.ibatis.hello.User"/>
<insert id="createUser" parameterClass="userVO">
insert into users(u_name,u_email)
values(#name#,#email#)
</insert>
<resultMap class="userVO" id="GetUser">
<result property="id" column="id"/>
<result property="name" column="u_name"/>
<result property="email" column="u_email"/>
</resultMap>
<select id="getUser" parameterClass="java.lang.String" resultMap="GetUser">
select * from users where u_name = #value#
</select>
<update id="updateUser" parameterClass="userVO">
update users set u_name=#name# where id=#id#
</update>
<delete id="deleteUser" parameterClass="int">
delete from users where id=#value#
</delete>
</sqlMap>
这里已经通过标签定义了 crud方法
Reader reader = Resources.getResourceAsReader("sql-map-config.xml");
sqlMap = SqlMapClientBuilder.buildSqlMapClient(reader);
User user = new User();
user.setName("找老吴");
user.setEmail("test@9ui.com");
sqlMap.insert("createUser", user);
User user = (User)sqlMap.queryForObject("getUser", "找老吴");
User user = new User();
user.setId(9);
user.setName("aaa");
sqlMap.update("updateUser", user);
使用上很简单 一看就懂
这里对实体映射配置的说明
查询字段处理
1 实体字段与数据库字段相同 不需要特别映射 实体属性名==字段名
2 实体字段与数据库字段不同(Map映射 ,字段别名映射)
这里采用的是Map映射 如果数据库表和实体VO的属性不是同名,需要手动建立映射关系
当然也可以采用字段别名映射 不过此种方式并不推荐
<!-- 我们可以通过sql语句讲返回结果的字段于VO相对应,这样可以不用另外创建映射 不推荐 -->
<!--
<select id="getUser" parameterClass="java.lang.String" resultClass="userVO">
select id as id,u_name as name,u_email as email from users where u_name = #value#
</select>
主键的处理 这里我们采用的是mysql的自增类型 所以不用处理,下面的例子是针对oracle序列的方式 以此类推
<insert id="createUser" parameterClass="userVO">
<selectKey resultClass="int" type="pre" keyProperty="id">
select test_seq.nextval from dual
</selectKey>
insert into users(id,u_name,u_email) values
(#id#,#name#,#email#)
</insert>
类别名的配置<typeAlias/> 简化书写
否则我们就要些类全名 如:parameterClass="xxx.xxx.xxx.Claz"
转义文本块
CDATA 比如在sql语句中存在 < >等 xml不能处理的字符的时候
select * from t_user <![CDATA[ where tid>#value# ]]>
sql标签
在配置文件中有多处相同部分的sql信息
<sql id="select_user">
select * from users
</sql>
查询语句的sql 中 加入include 标签
<select id="getUser" parameterClass="java.lang.String" resultMap="GetUser">
<include refin="select_user"/> where u_name = #value#
</select>
我也是初次了解 不正确的地方还请指出