【java】01-ibatis sql操作

Ibatis

原创https://www.cnblogs.com/tyhJava/p/5842594.html

1.Ibatis实体映射文件user.xml的写法示例:
<typeAlias alias=”实体类类别名” type=”实体类全路径”/>  
  <!--restultMap主要是用于Ibatis对数据增删改查操作的返回值结果对于java对象的映射,一般用于所返回的对象可能包含的是一个以上java对象的字段,如果是一个java对象中的字段一般使用resultClass-->  
  <resultMap id=”结果集id” class=”实体类别名”>  
    <result property=”java实体类中的属性名” column=”数据库表中的列名”/>  
    ……  
  </resultMap>  
2.Ibatis的SQL Map:

(1).Ibatis的SQL Map的核心概念是Mapped Statement。Mapped Statement可以使用任意的SQL语句,并拥有

  • parameterMap/parameterClass(输入参数)
  • resultMap/resultClass(输出结果)。

(2). 元素是个通用的声明,可以用于任何类型的SQL语句,但是通常使用具体的类型, 如:

  • 查询使用
  • 添加使用
  • 更新使用
  • 删除使 用
3.Ibatis的增删改查操作简单例子:

(1).实体类必须遵循JavaBean的规范,提供一个无参数的构造方法,字段必须提供get和set方法。

(2).在Ibatis对应的实体映射文件的标签元素添加如下:

a.Ibatis添加:
<insert id=”Ibatis添加实体操作Id” parameterClass=”参数类型”>  
     insert into 实体对应数据库中的表名(实体字段对应的表的列名1, 实体字段对应的表的列名2,……) values(#实体类字段1#,#实体类字段2#......);  
</insert>

注意:Ibatis增删改查语句的参数是通过 parameterClass或者parameterMap 传递的。 Ibatis只能传递 一个参数 ,如果又多个参数需要封装在一个对象中。

b. Ibatis删除:
<delete id=”Ibatis删除实体操作Id” parameterClass=”参数类型”>  
       delete from 实体对应数据库中的表名 where 列名=#列名对应的实体字段名#;  
</delete>

注意:删除和查询时,经常需要根据一定条件操作,有时可能需要模糊查询,对于

c. Ibatis 模糊查询

如name like‘%c%’。在Ibatis中有两种写法:

写法1:在java方法中传递参数时写成:”%字段名%”。

写法2:在Ibatis的sql语句中可以写成如:where name=’% 字 段 名 字段名 %’。

d. Ibatis更新:
<update id=”Ibatis更新实体操作Id” parameterClass=”参数类型”>  
       update 实体对应数据库的表名 set 列名1=#字段1#,列名2=#字段2#,…….where ….;  
</update>   
e. Ibatis查询
<select id=”Ibatis查询实体操作Id” resultClass=”查询结果类型” >  
       select * from 实体对应的表名;  
</select>

注意:这里演示的是最简单的查询,其结果是一个实体的集合。

4.在java对象中使用Ibatis的statement操作:

使用SqlMapClient对象的 queryForObject(),queryForList(),insert(),delete(),update()方法 。这些方法都需要一个传递一个参数: 在实体映射文件中定义的操作statementId ,如果这些定义的操作还需要输入参数,则还需要传递输入参数对象。简单用法如下:

实体对象类型 对象= sqlMapClient.queryForObject(“实体映射文件命名空间.statementId”, “查询条件参数”); 
例如:
user = (User) sqlMapClient.queryForObject("querybyid",id);
list = sqlMapClient.queryForList("queryAll",user);
sqlMapClient.update("update", user);
sqlMapClient.delete("delete",id);
sqlMapClient.insert("insert", user);
user = (User)sqlMapClient.queryForObject("login", u);
5.Ibatis对象之间的关系:

Ibatis的输入参数和输出参数只能是一个,因此,当输入参数在一个实体对象时,使用 parameterClass ,当输入对象也只在一个实体对象中时,使用 resultClass 。

但是有很多时候输入参数和输出参数可能包含在几个实体对象中,我们不能为了只传递一个参数而专门为这些输入和输出参数组合专门创建类,因此就需要使用 parameterMap和resultMap 来组合多个实体对象中的字段。

以resultMap为例,使用方法如下:

<resultMap id=”resultMapId”>  
       <result property=”……” column=”…….” select=”实体映射文件中的StatementId”/>  
       ……  
</resultMap>   
<sqlMap>
  <typeAlias alias="User" type="com.pojo.User" />
     <resultMap id="UserResult" class="User">
       <result property="id" column="ID" />
     <result property="username" column="USERNAME" />
     <result property="password" column="PASSWORD" />
   </resultMap>
    
   <select id="login" resultMap="UserResult" parameterClass="User">
     select * from USER where USERNAME=#username# and PASSWORD=#password#
   </select>
  
   <insert id="insert" parameterClass="User">
    insert into USER(ID,USERNAME,PASSWORD)values(#id#,#username#,#password#)
   </insert>
  
  <delete id="delete" parameterClass="int">
        delete from USER where ID = #id#
    </delete>
  
  <update id="update" parameterClass="User">
        update USER set USERNAME=#username#,PASSWORD=#password# where ID = #id#
    </update>
  
  <select id="querybyid" parameterClass="int" resultClass="User">
        select * from USER where ID = #id#
    </select> 
    
     <select id="queryAll" parameterClass="User" resultClass="User">
        select * from USER
    </select>
</sqlMap>
6.Ibatis优缺点总结:

优势:使用标准的Sql语句,与JDBC相比简单方便,减少了代码量,架构和性能得到增强;与Hibernate等ORM工具相比因为更接近Sql语句,性能可控;sql语句与程序代码分隔,简化了项目分工,大大提高并行开发的可能性。

缺点:还需要写标准的sql语句,不像Hibernate完全屏蔽了底层数据库的差异,程序的 可移植性比Hibernate和JPA要差 ; 输入参数和输出参数都只能有一个 ,程序编写的灵活性不是太高。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值