ibatis入门尝试

ibatis 也算是久仰大名 不过一直没有时间尝试,最近听说已经脱离apache开始另立门户了。
这里采用的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>

我也是初次了解 不正确的地方还请指出
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值