首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

ibatis课程 实战篇 11例代码讲述CRUD操作

2012-11-14 
ibatis教程 实战篇 11例代码讲述CRUD操作!DOCTYPE sqlMapConfig PUBLIC -//ibatis.apache.org//DTD sql

ibatis教程 实战篇 11例代码讲述CRUD操作
<!DOCTYPE sqlMapConfig PUBLIC "-//ibatis.apache.org//DTD sql Map Config 2.0//EN" "http://ibatis.apache.org/dtd/sql-map-config-2.dtd">
<sqlMapConfig>
<properties resource="com/ibatis/jdbc.properties" />
<transactionManager type="JDBC">
?? <dataSource type="SIMPLE">
??? <property value="${driver}" name="JDBC.Driver" />
??? <property value="${url}" name="JDBC.ConnectionURL" />
??? <property value="${username}" name="JDBC.Username" />
??? <property value="${password}" name="JDBC.Password" />
?? </dataSource>
</transactionManager>
<sqlMap resource="com/ibatis/dao/sqlmap/User.xml" />
</sqlMapConfig>
7.配置bean.xml文件,我们这里起名叫: 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="User">
<typeAlias alias="user" type="com.ibatis.dao.bean.User" />
……………//先列出基本的配置
</sqlMap>
8.新建我们的测试类: UserDaoTest:
import java.io.Reader;
………//其他jar自动导入即可
@SuppressWarnings("unchecked")
public class UserDaoTest {
private static SqlMapClient sqlMapClient = null;
static {
?? try {
??? String resource = "com/ibatis/sqlmap-config.xml";
??? Reader reader = Resources.getResourceAsReader(resource);
??? sqlMapClient = SqlMapClientBuilder.buildSqlMapClient(reader);
?? } catch (Exception e) {
??? e.printStackTrace();
?? }
}

public static void main(String[] args) throws Exception {
?? …….//调用测试方法
}
}

做完上面的基本操作的一个大体框架,一个简单的ibatis应用下面就开始了:
在User.xml配置文件中加如下一段配置:
<!-- example 1: 无映射 -->
<select id="getUserByName1" resultparameter+ user.getName() + "-" + user.getPass());
?? }
} catch (Exception e) {
?? e.printStackTrace();
}
}
// 注:当parameterresultparameter+ user.getName() + "-" + user.getPass());
??? }
?? } catch (Exception e) {
??? e.printStackTrace();
?? }
}
// 注:当使用内联映射 ->实体类的时侯,sql语句中的映射名可以没有限制, 如:SELECT ID as id, NAME as name, PASS as pass FROM t_user WHERE NAME=#name#,通常情况下映射名就是bean的属性的名字,如果改成这样
SELECT ID as iid, NAME as name, PASS as pass FROM t_user WHERE NAME=#name#,其中iid不是bean的属性,那么我们就无法获取id的值,其实这样写也是没意义的,所以通常情况下映射的名字就是bean的属性的名字。

3. 在User.xml配置文件中加如下一段配置:
<!-- example 3: 内联映射 -> MAP类 -->
<select id="getUserByName3" resultparameter+ map.get("NAME") + ":" + map.get("PASS"));
??? }
?? } catch (Exception e) {
??? e.printStackTrace();
?? }
}
// 注:当使用内联映射 ->MAP类的时侯,即resultcolumn="Id" />
?? <result property="name" column="NAME" />
?? <result property="pass" column="PASS" />
</resultMap>
<select id="getUserByName4" resultMap="userResult" parameter+ user.getName() + "-" + user.getPass());
??? }
?? } catch (Exception e) {
??? e.printStackTrace();
?? }
??
}
// 注:当使用显示映射 ->实体类的时侯,即返回的结果在resultMap中,而非resultClass中,类如上面一个最简单的resultMap,column对应的是字段名,此时字段名不区分大小写, property对应的是bean中的属性名,与example2的内联映射 ->实体类不同的是,该属性必须在bean中存在,否则就会报错,它的检查更严格..

5.在User.xml配置文件中加如下一段配置:
<!-- example 5: 显示映射 -> MAP类 -->
<resultMap id="userMapResult" column="ID" />
?? <result property="name" column="NAME" />
?? <result property="pass" column="PASS" />
</resultMap>
<select id="getUserByName5" resultMap="userMapResult" parameter+ map.get("name") + ":" + map.get("pass"));
??? }
?? } catch (Exception e) {
??? e.printStackTrace();
?? }
}
?? // 注:当使用显示映射 ->MAP类的时侯,即resultMap的class不是我们定义的bean而是hashmap或者java.util.Map的时候,类如上面一个最简单的MAP类,column对应的是字段名,此时字段名不区分大小写, property对应的是bean中的属性名,与example3的内联映射 ->MAP类不同的是,它的键值是属性名而非字段名.

6.在User.xml配置文件中加如下一段配置:
<!-- example 6: XML -->
<select id="getUserByName6" parameterresultxmlResultName="info">
?? <![CDATA[
??? SELECT * FROM t_user WHERE name=#name#
?? ]]>
</select>
然后在UserDaoTest.java中增加如下一个方法:
public static void example6() throws Exception {
?? try {
??? List list = sqlMapClient.queryForList("getUserByName6", "zxx");
??? System.out.println(list.get(0));
??? // 输出: <?xml version="1.0" encoding="UTF-8"?><info><ID>7</ID><NAME>zxx</NAME><PASS>xfmn123456</PASS></info>
?? } catch (Exception e) {
??? e.printStackTrace();
?? }
}
// 注:xmlResultName="info",xmlResultName定义返回的结果信息保存在xml的那个元素中,如果返回有多个xml对象那么就会产生多个<?Xml ,而不是整合在一个<?xml中。

7.在User.xml配置文件中加如下一段配置:
<!-- example 7: 自动参数映射 -->
<insert id="insertUser7" parameterparameterjdbcType="INTEGER" />
?? <parameter property="name" jdbcType="VARCHAR" />
?? <parameter property="pass" jdbcType="VARCHAR" />
</parameterMap>
<insert id="insertUser9" parameterMap="parameterMap">
?? <![CDATA[
??? INSERT INTO t_user ( ID, NAME, PASS )VALUES( ?,?,? )
?? ]]>
</insert>
然后在UserDaoTest.java中增加如下一个方法:
public static void example9() throws Exception {
?? try {
??? User user = new User();
??? user.setName("example9");
??? user.setPass("123456");
??? sqlMapClient.insert("insertUser9", user);
?? } catch (Exception e) {
??? e.printStackTrace();
?? }
}
?? // 注:外联参数映射 插入操作,如上述所示:SQL语句中有多少个参数,那么在parameterMap中必须定义多少个,而且要一一对应,参数定义顺序也不要错。

10.在User.xml配置文件中加如下一段配置:
<!-- example 10: 自动生成的键 -->
<insert id="insertUser10" parameterkeyProperty="id">
??? <![CDATA[
??? SELECT LAST_INSERT_ID()
?? ]]>
?? </selectKey>
</insert>
然后在UserDaoTest.java中增加如下一个方法:
public static void example10() throws Exception {
?? try {
??? User user = new User();
??? user.setName("example10");
??? user.setPass("123456");
??? Integer returnValue = (Integer) sqlMapClient.insert("insertUser10", user);
??? System.out.println(returnValue);
?? } catch (Exception e) {
??? e.printStackTrace();
?? }
}
// 注:该方法插入数据,并返回id的值

11.在User.xml配置文件中加如下一段配置:
<!-- example 11: 存储过程 -->
<resultMap id="returnResultMap" column="ID" />
</resultMap>
<parameterMap id="paramUser" jdbcType="VARCHAR" javaType="string" mode="IN" />
?? <parameter property="pass" jdbcType="VARCHAR" javaType="string" mode="IN" />
?? <parameter property="id" jdbcType="INT" javaType="Integer" mode="INOUT" resultMap="returnResultMap" />
</parameterMap>

<procedure id="pro_insertUser11" parameterMap="paramUser" resultClass="int">
?? <![CDATA[
??? {call proc_userinsert(?,?,?)}
?? ]]>
</procedure>
然后在UserDaoTest.java中增加如下一个方法:
public static void example11() throws Exception {
?? try {
??? Map map = new HashMap();
??? map.put("name", "procedure");
??? map.put("pass", "123456");
??? Integer returnValue = (Integer)sqlMapClient.insert("pro_insertUser11", map);
??? System.out.println(returnValue);
?? } catch (Exception e) {
??? e.printStackTrace();
?? }
}
//注:调用存储过程的参数个数必须和写存储过程的时候参数(输入和输出)个数相同.

?

?

?

热点排行