Ibatis的增删改查操作

论坛 期权论坛 脚本     
匿名技术用户   2021-1-2 10:57   11   0

ibatis的移植性虽然没有hibernate那么强,但是很多方面hibernate是做不到的,ibatis的特点在于动态sql查询以及灵活性上面。升级版的mybatis同样在动态sql查询上下了不少功夫,如果对hibernate之类的东西厌倦了学习ibatis应该是个不错的选择。

1.ibatis程序需要的东西

数据库驱动必不可少,选择什么数据库无所谓,最重要的就是ibatis的jar包了

2.ibatis最主要的配置文件

<?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/humansource" />
   <property name="JDBC.Username" value="root" />
   <property name="JDBC.Password" value="123456" />
  </dataSource>
 </transactionManager>
 <!-- 映射文件的相关配置 -->
 <sqlMap resource="org/lxh/mapping/Role_sqlmap.xml" />
 
</sqlMapConfig>

这个配置文件数据源的配置居多,最下面的sqlmap配置的是映射文件,数据源配置出错或者映射文件不对,程序就运行不起来


3.映射文件

我的建议是属性名称和数据库的列名相对应,另外ibatis的映射文件大部分都是sql语句,如果害怕写sql,那建议就不要学ibatis了

<?xml version="1.0" encoding="UTF-8" ?> 
<!DOCTYPE sqlMap  PUBLIC "-//iBATIS.com//DTD SQL Map 2.0//EN"  "http://www.ibatis.com/dtd/sql-map-2.dtd">
<sqlMap namespace="Role">
    <resultMap id="resultMap" class="org.lxh.info.Role">
   <result property="id" column="id"/>
   <result property="name" column="name"/>
   <result property="remark" column="remark"/>
    </resultMap>
    <!-- 添加角色 -->
 <insert id="createRole" parameterClass="org.lxh.info.Role"> 
 insert into m_role(name, remark)values(#name#,#remark#)  
 </insert>
 <!-- 删除角色 -->
 <delete id="deleteRole" parameterClass="int">
   delete from m_role where id=#id#
 </delete>
 <!-- 修改角色信息 -->
 <delete id="updateRole" parameterClass="org.lxh.info.Role">
  update m_role set remark=#remark# where id=#id#
 </delete>
 <!-- 查询所有的角色信息 -->
 <select id="findAll" resultMap="resultMap">
  select * from m_role
 </select>
</sqlMap>

这个文件最前面的resultMap是返会的结果集的配置,这个地方主要在查询上面使用,ibatis会把结果集进行封装

4.领域模型文件

package org.lxh.info;

public class Role {
 private Integer id;
 private String name;
 private String remark;

 public String getName() {
  return name;
 }

 public void setName(String name) {
  this.name = name;
 }

 public String getRemark() {
  return remark;
 }

 public void setRemark(String remark) {
  this.remark = remark;
 }

 public Integer getId() {
  return id;
 }

 public void setId(Integer id) {
  this.id = id;
 }
}

ibatis的映射文件应该是比较好理解的,没有像hibernate那样另类有什么一对一对多配置一大把的,ibatis对增删改查都要很好额区别 如果是查询那标签就应该是select其他的以此类推


4.增删改查操作

package org.lxh.junit;

import static org.junit.Assert.*;

import java.io.Reader;
import java.util.*;

import org.junit.Test;
import org.lxh.info.Role;

import com.ibatis.sqlmap.client.SqlMapClient;
import com.ibatis.sqlmap.client.SqlMapClientBuilder;

public class TestIbatis {
    //添加角色
 @Test
 public void testInsert() {
  try {

   Reader reader = com.ibatis.common.resources.Resources.getResourceAsReader("DataSource.xml");
   SqlMapClient sqlMap = SqlMapClientBuilder.buildSqlMapClient(reader);
   Role r = new Role();
   r.setName("系统维护人员");
   r.setRemark("--");
   sqlMap.insert("createRole", r);
   
  } catch (Exception e) {
   e.printStackTrace();
  }

 }
 
    //删除角色
 @Test
 public void testDelete() {
  try {
   Reader reader = com.ibatis.common.resources.Resources.getResourceAsReader("DataSource.xml");
   SqlMapClient sqlMap = SqlMapClientBuilder.buildSqlMapClient(reader);
   sqlMap.delete("deleteRole", 3);
  } catch (Exception e) {
   e.printStackTrace();
  }

 }
 //修改角色
  @Test
  public void testUpdate() {
   try {
    Reader reader = com.ibatis.common.resources.Resources.getResourceAsReader("DataSource.xml");
    SqlMapClient sqlMap = SqlMapClientBuilder.buildSqlMapClient(reader);
    Role r=new Role();
    r.setId(2);
    r.setRemark("***");
    sqlMap.update("updateRole", r);
   } catch (Exception e) {
    e.printStackTrace();
   }

  }
  //查询角色信息
  @Test
  public void testSelect() {
   try {
    Reader reader = com.ibatis.common.resources.Resources.getResourceAsReader("DataSource.xml");
    SqlMapClient sqlMap = SqlMapClientBuilder.buildSqlMapClient(reader);
    List<Role>all=sqlMap.queryForList("findAll");
    Iterator<Role> it=all.iterator();
    while(it.hasNext()){
     Role info=it.next();
     System.out.println(info.getName()+","+info.getId());
    }
   } catch (Exception e) {
    e.printStackTrace();
   }

  }
}

有人会问ibatis可以写连接查询码,那是肯定的,可以参考下这个文章:

http://blog.csdn.net/walkcode/article/details/6929898

当然了如果要使用ibatis执行存储过程可以参考下面这篇文章

http://blog.csdn.net/walkcode/article/details/9318039

要了解ibatis动态sql可以看下面这个

http://blog.csdn.net/walkcode/article/details/8925435

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:7942463
帖子:1588486
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP