ibatis入门尝试3-namespace命名空间 parameterMap Like模糊查询 批量及事物处理

1 namespace 命名空间

为了测试命名空间 在创建表 u1(id name email) u2(id name email)
分别创建 实体Bean和映射文件
User.java

package com.bean;

public class User {
private Integer id;
private String name;
private String email;
public Integer getId() {
return id;
}
public void setId(Integer 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;
}
}


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="userVO" type="com.bean.User"/>
<insert id="createUser" parameterClass="userVO">
insert into u1(name,email)
values(#name#,#email#)
</insert>
</sqlMap>



User2.java

package com.bean;

public class User2 {
private Integer id;
private String name;
private String email;
public Integer getId() {
return id;
}
public void setId(Integer 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;
}
}


User2.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="user2">
<typeAlias alias="user2VO" type="com.bean.User2"/>
<insert id="createUser" parameterClass="user2VO">
insert into u2(name,email)
values(#name#,#email#)
</insert>
</sqlMap>


ibatis 配置文件
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>
<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_db?characterEncoding=UTF-8" />
<property name="JDBC.Username" value="root" />
<property name="JDBC.Password" value="" />
</dataSource>
</transactionManager>
<sqlMap resource="com/bean/User.xml" />

<sqlMap resource="com/bean/User2.xml"/>

</sqlMapConfig>

测试方法

Reader reader = Resources.getResourceAsReader("SqlMapConfig.xml");
SqlMapClient sqlMap = SqlMapClientBuilder.buildSqlMapClient(reader);
User u =new User();
u.setName("aa");
u.setEmail("ass@test.com");
sqlMap.insert("createUser", u);

如果此时执行 会报异常 原因很明显
There is already a statement named createUser in this SqlMap.
就是因为在加载的实体映射文件中 都含有 id = "createUser"
这里去掉已经 <sqlMap resource="com/bean/User2.xml"/>就可以
这也就是为什么我们要引入namespace的原因
我们的映射文件中已经设置了namespace
<sqlMap namespace="user">
实际ibatis的默认是不开启的namespace的
此时我们将 配置文件中的useStatementNamespaces="false" 改为true
我们在测试一下,不过此时的调用方式 需要 namespace.id_name
sqlMap.insert("user.createUser", u);

Reader reader = Resources.getResourceAsReader("SqlMapConfig.xml");
SqlMapClient sqlMap = SqlMapClientBuilder.buildSqlMapClient(reader);
User u =new User();
u.setName("aa");
u.setEmail("ass@test.com");
sqlMap.insert("user.createUser", u);


这里需要注意 typeAlias 标签不受命名空间影响 只对应当前的实体映射页

2 parameterMap传入参数映射
之前我们已经用到过rseultMap映射,现在我们来看一下 parameterMap
我们修改User.xml

<parameterMap class="userVO" id="userVOpmp">
<!--
这里可以对java的类进行映射 也可以映射jdbcType
如果jdbcType 要注意是Date(只保存日期) 区别 TimeSTAMP(日期+时间)
-->
<parameter property="name" jdbcType="varchar"/>
<parameter property="email" jdbcType="varchar"/>
</parameterMap>
<insert id="createUser" parameterMap="userVOpmp">
insert into u1(name,email)
values(?,?)
</insert>


Reader reader = Resources.getResourceAsReader("SqlMapConfig.xml");
SqlMapClient sqlMap = SqlMapClientBuilder.buildSqlMapClient(reader);
User u =new User();
u.setName("www.0431.la");
u.setEmail("bb@0431.la");
sqlMap.insert("user.createUser",u);

需要注意
类型必须一致 保证语句的参数顺序正确

3 Like 模糊查询
这个比价简单 和正常查询几乎没有什么变化 主不过标识符由#换成$

<select id="selectLikeName" parameterClass="java.lang.String" resultClass="userVO">
select * from u1 where name like '%$value$%'
</select>


Reader reader = Resources.getResourceAsReader("SqlMapConfig.xml");
SqlMapClient sqlMap = SqlMapClientBuilder.buildSqlMapClient(reader);
List list = sqlMap.queryForList("user.selectLikeName", "a");
System.out.println(list.size());


4 批量及事物处理
这里的设置不需要更改xml

Reader reader = Resources.getResourceAsReader("SqlMapConfig.xml");
SqlMapClient sqlMap = SqlMapClientBuilder.buildSqlMapClient(reader);
//开启事物
sqlMap.startTransaction();
//开启批次操作
sqlMap.startBatch();
User user = new User();
user.setName("aaaaa");
User2 user2 = new User2();
user2.setName("bbbbb");
sqlMap.insert("user.createUser",user);
sqlMap.insert("user2.createUser",user2);
//执行批次操作
sqlMap.executeBatch();
//提交事物
sqlMap.commitTransaction();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值