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("[email protected]");
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>

我也是初次了解 不正确的地方还请指出




你可能感兴趣的:(java,sql,xml,mysql,ibatis)