sqlmap里的 select标签是用来查询,今天说<insert>,<update>,<delete>标签,这三个基本只有输入没有输出
这三个标签有这样几个共同的属性,parameterClass,ParameterMap,id,参数类型,参数映射,ID
通过sqlMap API里的这三个方法来调用
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标签来学习一下参数映射,另两个类似
自动参数映射
<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定义好的顺序对应,代替占位符???
测试类的使用:
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语句,举一个简单例子,它可以执行除那四类之外的其他语句
<statement> <statement id=“droptable”> DROP TABLE User CASCADE </statement>
sqlMap.update(“droptable”,null); api调用语句
statement一般用的比较少,前四种就可以基本满足我们的需求,解决我们的问题
2 procedure 存储过程,也可以使用parameterMap属性,用call调用,与数据库有关,简单说一下
<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 是数据库里已经定义好的存储过程,直接调用传入参数就可以了