Spring + iBATIS完整示例

2023-10-27

最近研究了一下Spring + iBATIS。发现看别人的例子是一回事,自己写一个完整的应用又是另外一回事。自己受够了网上贴的一知半解的代码。

iBATIS是一个持久化框架,封面了sql过程,虽然sql语句需要自己写。另外,我觉得对于初学者来说,完整的示例真的很重要,不然不知道文件是如果放置的。

所有的第三包都需要加上,spring、ibatis.-2.3.3.720.jar、sqlijdbc.jar、oscache-2.4.jar、commons-pool-1.3.jar、commons-dbcp-1.4.jar,mysql-connector-5.0.5.jar。不然运行的时候都要报错。

xml文件的位置也很关键,因为访问配置文件需要确定他的路径。

有三个包:

1.bean。

   bean包封装了POJO对象Ibatis,如下:

package com.tmall.bean;

public class Ibatis {
	private String id;
	   private String name;
	   public String getId() {
	        return id;
	   }
	   public void setId(String id) {
	        this.id = id;
	   }
	   public String getName() {
	        return name;
	   }
	   public void setName(String name) {
	        this.name = name;
	   }
	   public Ibatis(){
	       
	   }
	public Ibatis(String id, String name) {
	    super();
	    this.id = id;
	    this.name = name;
	}
}

2. Dao包

   Dao里面有一个Dao和DaoImp。Dao是一个接口,DaoImp实现了Dao的接口。

Dao.java如下:

package com.tmall.dao;

import java.util.List;
import com.tmall.bean.Ibatis;;
public interface Dao {
	  public List<Ibatis> getList();
	  public Ibatis getByName(String name);
	  public Ibatis getById(String id);
	  public void insert(Ibatis ibatis);
	  public void delete(String id);
	  public void update(Ibatis ibatis);
}

DaoImp.java如下

package com.tmall.dao;

import java.util.List;

import org.springframework.orm.ibatis.support.SqlMapClientDaoSupport;

import com.tmall.bean.Ibatis;


public class DaoImp extends SqlMapClientDaoSupport implements Dao {

    public void delete(String id) {
        getSqlMapClientTemplate().delete("deleteUsers", id);
    }

    public Ibatis getById(String id) {
        return (Ibatis)getSqlMapClientTemplate().queryForObject("getUsersById",id);
    }

    public Ibatis getByName(String name) {
        
        return (Ibatis)getSqlMapClientTemplate().queryForObject("getUsersByName",name);
    }

    @SuppressWarnings("unchecked")
	public List<Ibatis> getList() {
        return getSqlMapClientTemplate().queryForList("getAllUsers",null);
    }

    public void insert(Ibatis ibatis) {
        getSqlMapClientTemplate().insert("insertUsers",ibatis);
    }

    public void update(Ibatis ibatis) {
        getSqlMapClientTemplate().update("updateUsers", ibatis);
    }

}

除此之外,关键的问题还有三个配置文件。applicationcontext.xml、ibatis.xml、sqlMapConfig.xml。

applicationContext.xml文件是spring的配置文件,如下:

<?xml version="1.0" encoding="UTF-8"?>
<beans
    xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">


<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
  <property name="driverClassName">
    <value>com.mysql.jdbc.Driver</value>
  </property>
  <property name="username">
    <value>root</value>
  </property>
  <property name="password">
    <value>123456</value>
  </property>
  <property name="url">
    <value>jdbc:mysql://localhost:3306/test</value>
  </property>
</bean>

<bean id="sqlMapClient" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">
  <!-- 此处应注入ibatis配置文件,而非sqlMap文件,否则会出现“there is no statement.....异常” -->
  <property name="configLocation">
     <value>sqlMapConfig.xml</value>
  </property>

</bean>

<bean id="DaoImp" class="com.tmall.dao.DaoImp">
   <property name="dataSource">
   <ref bean="dataSource"/>
 </property>
  <property name="sqlMapClient">
    <ref bean="sqlMapClient"/>
  </property>
</bean>

</beans>

ibatis.xml内容如下:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE sqlMap PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN" "http://ibatis.apache.org/dtd/sql-map-2.dtd" >
<sqlMap >
  <typeAlias type="com.tmall.bean.Ibatis" alias="user"/>
  <resultMap id="ibatisTest" class="user" >
    <result column="id" property="id" jdbcType="VARCHAR" />
    <result column="name" property="name" jdbcType="VARCHAR" />
  </resultMap>
  
  <!-- 获得全查询列表 -->
  <select id="getAllUsers" resultMap="ibatisTest">
    select * from Ibatis
  </select>
  
   <!-- 根据用户名获得用户对象 -->
   <select id="getUsersByName" resultMap="ibatisTest">
     select * from Ibatis where name=#value#
  </select> 
  
  <!-- 根据id获得用户对象 -->
    <select id="getUsersById" resultMap="ibatisTest">
     select * from Ibatis where id=#value#
  </select> 
  
   <!-- 新增用户对象 -->
   <insert id="insertUsers" parameterClass="user">
      insert into ibatis (id,name) values (#id#,#name#)
   </insert>
   
   <!-- 删除用户对象 -->
   <delete id="deleteUsers">
     delete from ibatis where id=#value#
   </delete>
   
   <!-- 更新用户对象 -->
   <delete id="updateUsers" parameterClass="user">
      update ibatis set name=#name# where id=#id#
   </delete>
</sqlMap>

sqlMapConfig.xml文件如下:

<?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> 

<sqlMap resource="Ibatis.xml" /> 

</sqlMapConfig>


测试语句

package com.tmall.test;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.tmall.bean.Ibatis;
import com.tmall.dao.Dao;

public class Test {
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		 ApplicationContext context=new ClassPathXmlApplicationContext("applicationContext.xml");
		 Dao dao = (Dao)context.getBean("DaoImp");
	     dao.insert(new Ibatis("3","new3")); 
	     Ibatis ibatis3 = dao.getById("2");
	     ibatis3.setName("new7");
	     dao.update(ibatis3);
//	     testDAOImpl.delete("3");
	     System.out.println("获得全查询列表");
	        List<Ibatis> result=new ArrayList<Ibatis>();
	        result = dao.getList();
	        for (Iterator<Ibatis> iter = result.iterator(); iter.hasNext();) {
	            Ibatis element = (Ibatis) iter.next();
	            System.out.println(element.getName());
	        }
	}

}

别忘了在mysql语句中建立一个表,然后通过mysql query这个工具来看结果。



本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Spring + iBATIS完整示例 的相关文章

  • 字符串被两个不同的分隔符分割

    我有这样的字符串 some dasd dasd dasdas dasdas dasd das dsad 我需要用两个不同的符号将字符串拆分为数组 and 所以我想得到数组 some dasd dasd dasdas dasdas dasd
  • Java ArrayList 的 (ArrayList).toString 的相反是什么?

    我正在使用toString的方法ArrayList储藏ArrayList数据到字符串中 我的问题是 我该如何走另一条路 是否有现有的方法可以解析中的数据String实例返回到ArrayList 最简洁的答案是不 没有简单的方法可以从字符串中
  • 具有相同引用的字符串连接? [复制]

    这个问题在这里已经有答案了 这是我的代码 我现在对字符串池和 通过此输出进行堆存储 public class String1 public static void main String args TODO Auto generated m
  • C语言中的“宽字符串”是什么?

    我在书中看到这样一句话 wscanf L lf variable 其中第一个参数的类型为wchar t 这不同于scanf lf variable 其中第一个参数的类型为char 那么比起来有什么区别呢 我以前从未听说过 宽字符串 我听说过
  • Spring boot 404错误自定义错误响应ReST

    我正在使用 Spring boot 来托管 REST API 即使浏览器正在访问 URL 以及自定义数据结构 我也希望始终发送 JSON 响应 而不是使用标准错误响应 我可以使用 ControllerAdvice 和 ExceptionHa
  • Knuth-Morris-Pratt 算法

    解决方案是Knuth Morris Pratt 算法 https en wikipedia org wiki Knuth E2 80 93Morris E2 80 93Pratt algorithm 干草堆 AAAAAAAAA 针 AAA
  • 在SPRING BOOT中配置多个数据库

    我正在尝试为我的 Spring Boot 应用程序连接 2 个不同的数据库 但出现此错误 应用程序无法启动 描述 com SyncFibertToolSpring SyncFibertTool MydbDB Config MydbDbCon
  • 使用 HashMap 映射 String 和 int

    我有一个显示国家 地区名称的列表视图 我已将名称作为字符串数组存储在 strings xml 中 称为国家 地区名称 在填充 ListView 时 我使用从 strings xml 读取的 ArrayAdapter String count
  • @PrePersist 在 Hibernate + Spring 环境中不能与 @MappedSuperclass 一起使用

    我正在使用专用存储库创建 注册新用户 Service public class RegistrationService Autowired private AppUserRepository appUserRepository Transa
  • 在 Spring MVC 中将请求写入文件

    我希望能够将整个请求写入 Spring MVC 控制器中的文件 我已尝试以下操作 但即使我使用大量参数发出 POST 请求 文件也始终为空 RequestMapping method RequestMethod POST value pay
  • 按 Enter 继续

    这不起作用 string temp cout lt lt Press Enter to Continue cin gt gt temp cout lt lt Press Enter to Continue cin ignore 或更好 in
  • JpaRepository 上的@Transactional

    我正在使用只读数据库将一些数据输入到我的项目中 我们使用带有 jpa 和 hibernate 的 Spring v3 以下注释是否会使对我的存储库的所有调用成为只读事务 或者我是否需要调用存储库的服务层上的注释 package com bl
  • 在 Java 中比较字符串的最快方法是什么?

    在Java中比较两个字符串最快的是什么 有比等于更快的东西吗 编辑 我无能为力澄清这个问题 我有两个字符串 它们按字母顺序排序并且大小完全相同 示例 abbcee 和 abcdee 字符串最长可达 30 个字符 我不认为Sun Oracle
  • SQL 查询结果为字符串(或变量)

    是否可以将SQL查询结果输出到一个字符串或变量中 我的php和mysql不好 假设我有数据库 agents 其中包含列 agent id agent fname agent lname agent dept 使用此查询 sql SELECT
  • Python从int到string的快速转换

    我正在用 python 求解大量阶乘 并发现当我完成计算阶乘时 需要相同的时间才能转换为字符串以保存到文件中 我试图找到一种将 int 转换为字符串的快速方法 我将举一个计算和 int 转换时间的例子 我正在使用通用的 a str a 但感
  • Spring HATEOAS 和 HAL:更改 _embedded 中的数组名称

    我正在尝试使用 Spring HATEOAS 构建符合 HAL 的 REST API 经过一番摆弄后我终于开始工作了mostly正如预期的那样 示例 输出现在看起来像这样 links self href http localhost 808
  • 如何在 spring-data 中强制使用 CrudRepository 进行预加载?

    我有一个实体 其中包含List就是这样lazy默认加载 interface MyEntityRepository extends CrudRepository
  • Spring - 如何在不匹配列名的情况下使用 BeanPropertyRowMapper

    我正在开发一个应用程序 该应用程序已使用行映射器从纯 JDBC 转换为 Spring 模板 我遇到的问题是数据库中的列与属性名称不匹配 这阻止我使用BeanPropertyRowMapper容易地 我看到一些关于在查询中使用别名的帖子 这会
  • 如何在 Spring Mvc 项目中设置上下文根

    我在 Tomcat 服务器中使用 Spring MVC 项目 每次运行应用程序时 服务器上下文根都会更改 如何设置固定上下文根 我的项目名称是 DemoApplication 首先部署此上下文根 路径是 http localhost 808
  • 为什么 JavaScript 中是 [1,2] + [3,4] = "1,23,4" ?

    我想将一个数组的元素添加到另一个数组中 所以我尝试了以下方法 1 2 3 4 它的回应是 1 23 4 到底是怎么回事 The 操作员没有为数组定义 发生的事情是 JavaScript将数组转换为字符串并将它们连接起来 Update 由于这

随机推荐

  • Python 日志管理模块logging

    参考 link https www cnblogs com nancyzhu p 8551506 html 日志 日志是跟踪软件运行时所发生的事件的一种方法 软件开发者在代码中调用日志函数 表明发生了特定的事件 事件由描述性消息描述 该描述
  • ORA-12505: TNS: 监听程序当前无法识别连接描述符中所给出的SID等错误解决方法

    程序连接orarle报ORA 12505错误 一 异常 ORA 12505 TNS listener does not currently know of SID given in connect descriptor The Connec
  • VTK_python入门

    tk基本介绍 VTK 库的框架结构 vtkObject gt vtkSource gt vtkFilter gt vtkMapper gt vtkActor gt vtkRenderer 对象 介绍 vtkObject vtk库的基类 vt
  • 人脸对齐:使用 PyTorch 检测人脸特征点(附Wget下载方法)

    开发环境 作者 嘟粥yyds 时间 2023年8月12日 集成开发工具 Google Colab 集成开发环境 Python 3 10 6 第三方库 torch torchvision cv2 xml os math matplotlib
  • CVPR 2023

    点击下方卡片 关注 自动驾驶之心 公众号 ADAS巨卷干货 即可获取 点击进入 自动驾驶之心 语义分割 技术交流群 后台回复 分割综述 获取语义分割 实例分割 全景分割 弱监督分割等超全学习资料 论文思路 多模态融合可以使语义分割更加鲁棒
  • Scala 之 高阶函数

    函数式编程 Scala函数式编程是scala的重中之重 老师多次强调它的重要性 spark当中的计算都是用scala函数式编程来做 高级函数也是其独特的一个特性 并且spark基于集合 这样可以使scala发挥其对于集合计算的强大功能 首先
  • Jenkins拉取Gitee代码问题笔记记录

    最近在自学自动化部署 用到了jenkins但是一直拉取gitee上的代码失败 尝试了网上各自配置项目的方法都不行 报错如下 由用户 c 启动 构建中 在工作空间 C Users Administrator jenkins workspace
  • uni-app开发微信小程序,IOS苹果手机上时间格式化错误显示Invalid Date问题解决方案

    1 问题描述 只在真机IOS上面才会出现 小程序模拟器上的ios是不会出现的 原因是因为时间格式只要带有 符号就会 但有个ios机型却不会出错 我用苹果11测试会出现Invalid Date 有几种情况 例如 1 new Date 2023
  • JVM中的新生代和老年代(Eden空间、两个Survior空间)

    现有的主流JVM分别是HotSpot和JRockit 主要研究对象也是这两个 这篇文章里 我们只研究HotSpot 也就是所谓的Sun JVM 目前阶段 Sun的GC方式主要有CMS和G1两种 考虑到效果和实际应用 这里只介绍CMS CMS
  • 【Linux】NUC977移植使用libmodbus

    nuc977移植使用libmodbus 前言 一 libmodbus库的编译 二 程序的编写运行 最后 前言 相关简介 libmodbus是一个快速 跨平台的Modbus库 目前支持Linux Mac OS X FreeBSD QNX和Wi
  • 神经网络模型的模板(def forward)

    基本的网络构建类模板 from torch import nn import torch nn functional as F class net name nn Module def init self super net name se
  • SpringCloud:初识ES(ElasticSearch)

    1 1 了解ES ElasticSearch 1 1 1 ElasticSearch的作用 ElasticSearch是一款非常强大的开源搜索引擎 具备非常多强大功能 可以帮助我们从海量数据中快速找到需要的内容 例如 在GitHub搜索代码
  • emui微信无法连接服务器,华为EMUI5.0手机收不到微信消息,这里有完美解决方案...

    你有木有被人吐槽过回微信慢 可逆根本没收到消息 到底是哪里出了问题呢 捣鼓了半天 小E终于发现了 原来微信收不到消息竟是因为设置有误 有同遭遇的亲们看这里吧 快快get新技能消除误会吧 请确认以下事项 1 确认已开启通知功能 a 开启微信应
  • Obsidian 入门指引

    Obsidian 入门指引 现在Typora开始收费了 作为一个白嫖党 我肯定是不能接受的 所以我找到了一款免费的Markdown编译管理器 Obsidian 并且他的语法和Typora差不多 之前使用Typora的伙伴们可以很快上手 现在
  • C++构造函数详解:从C++11之前到现代C++

    大家好 我是trueDream 在C 编程中 构造函数是一种用于初始化对象的特殊成员函数 它提供了创建对象和初始化对象成员变量的机制 在C 11之前的标准中 C 语言已经提供了多种构造函数来满足不同的需求 本文将从C 11之前的构造函数开始
  • 【Kubernetes资源篇】Deployment控制器入门实战详解

    文章目录 一 Deployment 高级控制器理论 1 Deployment控制器介绍 2 Deployment工作原理 二 Deployment YAML编写及参数解释 1 整体Deployment YAML资源清单内容 2 核心参数解释
  • Maven存储仓库位置的修改以及修改镜像地址

    一 修改Maven存储仓库 第一步 新建一个repository文件夹 当做仓库用 最好不要在系统盘 例如 E repository 第二步 找到已经安装的Maven路径 在apache maven 3 6 3 conf目录下找到setti
  • C 标准库 - 《stddef.h》

    原文链接 https www runoob com cprogramming c standard library stddef h html 简介 stddef h 头文件定义了各种变量类型和宏 这些定义中的大部分也出现在其它头文件中 库
  • 【C语言】qsort函数的使用和模拟实现

    本篇文章我们来了解一下回C语言中qsort函数的使用方法和模拟实现 这是一个通用性很强而且非常方便的库函数 通过这篇文章希望能让你了解sort函数 目录 一 qsort的介绍 二 qsort函数的使用 1 qsort排序整形 2 qsort
  • Spring + iBATIS完整示例

    最近研究了一下Spring iBATIS 发现看别人的例子是一回事 自己写一个完整的应用又是另外一回事 自己受够了网上贴的一知半解的代码 iBATIS是一个持久化框架 封面了sql过程 虽然sql语句需要自己写 另外 我觉得对于初学者来说