sqlmap里的 select标签是用来查询,今天说<insert>,<update>,<delete>标签,这三个基本只有输入没有输出
这三个标签有这样几个共同的属性,parameterClass,ParameterMap,id,参数类型,参数映射,ID
通过sqlMap API里的这三个方法来调用
1. public int
2. Object parameterObject)
3. throws
4. public int
5. Object parameterObject)
6. throws
7. public int
8. Object parameterObject)
9. throws
public int insert(String statementName,
Object parameterObject)
throws SQLException
public int update(String statementName,
Object parameterObject)
throws SQLException
public int delete(String statementName,
Object parameterObject)
throws SQLException
之前讲了结果的映射,内敛参数映射和外联参数映射,参数映射和结果映射类似
这里以insert标签来学习一下参数映射,另两个类似
1. 自动参数映射
2.
3.
4.
5. "insertUser" parameterClass="User">
6.
7. insert into user(username,password,department)
8.
9. values(#username#,#password#,#department#)
10.
11. </insert>
12.
13. 内敛参数映射
14. "insertUser2" parameterClass="User">
15.
16. insert into user(username,password,department)
17.
18. values(#username:VARCHAR#,#password:VARCHAR#,#department:VARCHAR#)
19. </insert>
20. 外联参数映射
21. "userMap" class="User">
22. "username" jdbcType="VARCHAR"/>
23. "password" jdbcType="VARCHAR"/>
24. "department" jdbcType="VARCHAR"/>
25. </parameterMap>
26. "insertUser3" parameterMap="userMap">
27. INSERT INTO USER
28. (
29. USERNAME, PASSWORD, DEPARTMENT
30. )VALUES(
31. ?,?,?
32. )
33. </insert>
34. 注:它会自动按map定义好的顺序对应,代替占位符???
自动参数映射
<insert id="insertUser" parameterClass="User">
insert into user(username,password,department)
values(#username#,#password#,#department#)
</insert>
内敛参数映射
<insert id="insertUser2" parameterClass="User">
insert into user(username,password,department)
values(#username:VARCHAR#,#password:VARCHAR#,#department:VARCHAR#)
</insert>
外联参数映射
<parameterMap id="userMap" class="User">
<parameter property="username" jdbcType="VARCHAR"/>
<parameter property="password" jdbcType="VARCHAR"/>
<parameter property="department" jdbcType="VARCHAR"/>
</parameterMap>
<insert id="insertUser3" parameterMap="userMap">
INSERT INTO USER
(
USERNAME, PASSWORD, DEPARTMENT
)VALUES(
?,?,?
)
</insert>
注:它会自动按map定义好的顺序对应,代替占位符???
1. 测试类的使用:
2.
3. new
4. "zhangsan");
5. "123");
6. "Service");
7.
8. "insertUser",user);
测试类的使用:
User user=new User();
user.setUsername("zhangsan");
user.setPassword("123");
user.setDepaertment("Service");
Integer returnValue=(Integer)sqlMap.insert("insertUser",user);
建议用外联参数映射,以上三种映射同样适用于update,delete,select.
其他的标签,
1 <statement>,可以放置各类sql语句,举一个简单例子,它可以执行除那四类之外的其他语句
1. <statement>
2. <statement id=“droptable”>
3. DROP TABLE User CASCADE
4. </statement>
<statement>
<statement id=“droptable”>
DROP TABLE User CASCADE
</statement>
- sqlMap.update(“droptable”,null); api调用语句
sqlMap.update(“droptable”,null); api调用语句
statement一般用的比较少,前四种就可以基本满足我们的需求,解决我们的问题
2 procedure 存储过程,也可以使用parameterMap属性,用call调用,与数据库有关,简单说一下
1. <parameterMap id="swapParameters" class="map" >
2. <parameter property="email1" jdbcType="VARCHAR" javaType="java.lang.String" mode="INOUT"/>
3. <parameter property="email2" jdbcType="VARCHAR" javaType="java.lang.String" mode="INOUT"/>
4. </parameterMap>
5. <procedure id="swapEmailAddresses" parameterMap="swapParameters" >
6. {call swap_email_address (?, ?)}
7. </procedure>
<parameterMap id="swapParameters" class="map" > <parameter property="email1" jdbcType="VARCHAR" javaType="java.lang.String" mode="INOUT"/> <parameter property="email2" jdbcType="VARCHAR" javaType="java.lang.String" mode="INOUT"/> </parameterMap> <procedure id="swapEmailAddresses" parameterMap="swapParameters" > {call swap_email_address (?, ?)} </procedure>
mode有三种,in ,out,inout
swap_email_address 是数据库里已经定义好的存储过程,直接调用传入参数就可以了