mybatis学习笔记2-SQL的简单应用

简单EG:

<select id=”selectPerson” parameterType=”int” resultType=”hashmap”> 
SELECT * FROM PERSON WHERE ID = #{id} 
</select> 

这个语句被称作selectPerson,使用一个int (或Integer)类型的参数,并返回一个HashMap
类型的对象,其中的键是列名,值是列对应的值。
  注意参数注释:
  #{id}
  这就告诉 MyBatis 创建一个预处理语句参数。使用 JDBC,这样的一个参数在 SQL中会
由一个“?”来标识,并被传递到一个新的预处理语句中,就像这样:
// Similar JDBC code, NOT MyBatis… 
String selectPerson = “SELECT * FROM PERSON WHERE ID=?”; 
PreparedStatement ps = conn.prepareStatement(selectPerson); 
ps.setInt(1,id); 


select 元素有很多属性允许你配置,来决定每条语句的作用细节。
<select
id=”selectPerson” //唯一标示,用于引用该SQL
parameterType=”int” //语句参数类的名字或者别名
parameterMap=”deprecated” //已经废弃
resultType=”hashmap” //返回的类型名或者别名
resultMap=”personResultMap” // 引用外部的定义好的resultMap
flushCache=”false” //是否清空缓存
useCache=”true” //将其设置为 true,将会导致本条语句的结果被缓存
timeout=”10000” //这个设置驱动程序等待数据库返回请求结果,并抛出异常时间的
最大等待值。默认不设置(驱动自行处理)
fetchSize=”256” //这是暗示驱动程序每次批量返回的结果行数。默认不设置(驱动
自行处理)。
statementType=”PREPARED” //STATEMENT,PREPARED 或 CALLABLE 的一种。这会让 MyBat i
使用选择使用 Statement,PreparedStatement或 CallableStatement。
默认值:PREPARED。
resultSetType=”FORWARD_ONLY” //FORWARD_ONLY|SCROLL_SENSITIVE|SCROLL_INSENSITIVE
中的一种。默认是不设置(驱动自行处理)。

>


<insert
id="insertAuthor"
parameterType="domain.blog.Author"
flushCache="true"
statementType="PREPARED"
keyProperty="" //(仅对insert有用) 标记一个属性, MyBat is会通过getGeneratedKeys
或者通过 insert 语句的selectKey 子元素设置它的值。默认:不设置。
useGeneratedKeys="" //(仅对 insert 有 用 ) 这 会 告 诉 MyBat is 使用 JDBC 的
getGeneratedKeys 方法来取出由数据(比如:像 MySQL 和 SQL
Server 这样的数据库管理系统的自动递增字段)内部生成的主键。
默认值:false。

timeout="20000">


<update
id="insertAuthor"
parameterType="domain.blog.Author"
flushCache="true"
statementType="PREPARED"
timeout="20000">


<delete
id="insertAuthor"
parameterType="domain.blog.Author"
flushCache="true"
statementType="PREPARED"
timeout="20000">


insert update delete的示例


<insert id="insertAuthor" parameterType="domain.blog.Author"> 
insert into Author (id,username,password,email,bio) 
values (#{id},#{username},#{password},#{email},#{bio})
</insert> 

<update id="updateAuthor" parameterType="domain.blog.Author"> 
update Author set 
username = #{username}, 
password = #{password}, 
email = #{email}, 
bio = #{bio} 
where id = #{id} 
</update> 

<delete id="deleteAuthor” parameterType="int"> 
delete from Author where id = #{id} 
</delete> 

  如前所述,插入语句有一点多,它有一些属性和子元素用来处理主键的生成。
  首先,如果你的数据库支持自动生成主键的字段(比如 MySQL 和 SQL Server),那么
你可以设置 useGeneratedKeys=”true”,而且设置 keyProperty 到你已经做好的目标属性上。
例如,如果上面的 Author 表已经对 id 使用了自动生成的列类型,那么语句可以修改为:

<insert id="insertAuthor" parameterType="domain.blog.Author" 
useGeneratedKeys=”true” keyProperty=”id”> 
insert into Author (username,password,email,bio) 
values (#{username},#{password},#{email},#{bio}) 
</insert> 

  MyBat is 有另外一种方法来处理数据库不支持自动生成类型,或者可能 JDBC 驱动不支
持自动生成主键时的主键生成问题。
  这里有一个简单(甚至很傻)的示例,它可以生成一个随机 ID(可能你不会这么做,
但是这展示了 MyBatis 处理问题的灵活性,因为它并不真的关心 ID 的生成):
<insert id="insertAuthor" parameterType="domain.blog.Author"> 
<selectKey keyProperty="id" resultType="int" order="BEFORE"> 
select CAST(RANDOM()*1000000 as INTEGER) a from SYSIBM.SYSDUMMY1 
</selectKey> 
insert into Author 
(id, username, password, email,bio, favourite_section) 
values 
(#{id}, #{username}, #{password}, #{email}, #{bio}, 
#{favouriteSection,jdbcType=VARCHAR} 
) 
</insert> 

注:

<selectKey
keyProperty="id" //selectKey 语句结果应该被设置的目标属性。
resultType="int"   //结果的类型。MyBat is 通常可以算出来,但是写上也没有问题。
MyBat is 允许任何简单类型用作主键的类型,包括字符串。
order="BEFORE" //这可以被设置为 BEFORE 或 AFTER。如果设置为 BEFORE,那
么它会首先选择主键,设置 keyProperty 然后执行插入语句。如果
设置为 AFTER,那么先执行插入语句,然后是 selectKey 元素-
这和如 Oracle 数据库相似,可以在插入语句中嵌入序列调用。

statementType="PREPARED">

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值