做过.net后台开发的同志一定用过Entity FrameWork,该框架实现了实体Entity到数据库行的映射,通过操作实体DataSet,就能够直接同步修改到数据库。但是Java暂时没有类似的技术,今天要给大家讲述的是一个通过SQL语句来实现实体Entity到数据库映射的技术:IBATIS.

  

iBatis提供了以下设计理念 -

  • 简单- iBATIS的被广泛认为是当今是最简单的持久化框架之一。

  • 快速发展- iBATIS的做一切努力,促进超快速的发展。

  • 可移植性- iBATIS的可用于几乎任何语言或平台如Java,Ruby和C#中的Microsoft .NET来实现。

  • 独立接口- iBATIS的提供与数据库无关的接口和API,帮助应用程序的其余部分保持独立的持久性相关的资源。

  • 开源- iBATIS的是自由和开放源码软件。

iBATIS的具有以下优点 -

  • 支持存储过程- iBATIS的封装在SQL存储过程的形式,使业务逻辑保持了数据库,应用程序更易于部署和测试,更便于携带。

  • 支持嵌入式SQL -无需预编译器,你可以完全访问所有的SQL的功能。

  • 支持动态SQL - iBATIS的功能提供动态构建基于参数的SQL查询。

  • 支持O / RM - iBATIS的支持许多相同的功能,作为一个O / RM工具,如延迟加载,连接抓取,高速缓存,运行时代码生成和继承

  iBATIS的利用了JAVA编程语言,而开发数据库应用导向。在进一步讨论之前,请确保您了解程序和面向对象编程的基础知识 - 控制结构,数据结构和变量,类,对象,等等。

  

  废话不多说,用示例来进行讲解。首先我们得有一个实体类,这里以HmUserDTO为例。

 public class HmUserDTO implement Serializable{
private String v;
private String username;
private String sex;
private String mobilephone; public HmUserDTO(String name,String sex,String phone)
{
this.username = name;
this.sex = sex;
this.mobilephone= phone;
} public String getV(){return v;}
public void setV(String v){this.v = v;} public String getUsername(){return username;}
public void setUsername(String username){this.username = username;} public String getSex(){return sex;}
public void setSex(String sex){this. sex = sex;} public String getMobilephone (){return mobilephone;}
public void setMobilephone (String mobilephone){this. mobilephone = mobilephone;} }

然后需要安装相应的jar包,大家可以从网上找相关教程进行安装。

下面我们给代码添加IBATIS脚本sqlmqp_mapping_user.xml,如下所示:

 <?xml version=”1.0” encoding=”UTF-8”?>
<!DOCTYPE sqlMap PUBLIC “-//iBATIS.com/dtd/sql-map-2.dtd”> <sqlMap namespace=”user”>
<!-- 如果实体属性名与数据库列名不一致,可添加以下方法进行映射-->
<resultMap id=”user-result” class=”dto.user.HmUserDTO”> <!—此处class即为对于实体类-->
<result property=”username” column=”username”/>
<result property=”sex” column=”sex”/>
<result property=”mobilephone” column=”mobilephone”/>
</reusltMap> <!—新增用户信息-->
<insert id=”user.insert” parameterClass=”dto.user.UserDTO”> <!—parameterClass可为该数据库对应的实体类,也可为另外一个实体类 -->
INSERT INTO hm_base_user
(username,sex,mobilephone)
VALUES
(#name#,#sex#,#phone#)
</insert> <!—获取全部用户信息-->
<!—resultMap需当数据库字段与实体属性名不一致时使用-->
<select id=”user.queryAllUser” resultMap=”user-result”
SELECT * FROM hm_base_user user
</select> <!—搜索用户信息-->
<!—resultMap需当数据库字段与实体属性名不一致时使用-->
<select id=”user.queryUser” resultMap=”user-result” parameterClass=”String”>
SELECT user.username,user.sex,user.mobilephone
FROM hm_base_user user
WHERE user.username = #username#
</select> <!—我们也可用将另一个实体类插入到另外一个数据库表中,当然为了管理方便,建议仅在一个IBATIS脚本中处理一个实体类的数据库操作-->
<insert id=”user.insertExt” parameterClass=”dto.user.UserDTO”>
INSERT INTO hm_base_use_extr
(username,sex,mobilephone)
VALUES
(#name#,#sex#,#phone#)
</insert> <!—批量查询-->
<select id=”user.queryUsers” parameterClass=”java.util.List”>
SELECT user.username,user.sex,user.mobilephone
FROM hm_base_user
WHERE user.username IN
<iterate conjunction=”,” open=”(” close=”)”>
#[]#
</iterate>
</select>
</sqlMap>

在使用时,可以用以下方式来调用脚本中的方法,注意需要用到Resources.getResourceAsReader和SqlMapClientBuilder.buildSqlMapClient方法。

 Reader rd = Resources.getResourceAsReader("sqlmqp_mapping_user.xml"); 
2 SqlMapClient smc = SqlMapClientBuilder.buildSqlMapClient(rd);
HmUserDTO em = new HmUserDTO ("Zara", "Man", “18218021421”); smc.insert("user.insert", em);
List <HmUserDTO> user = (List<HmUserDTO>)smc.queryForList("user.queryAllUser ", null);

  在IBATIS脚本中添加其他方法的方式与上面类似,这里不再赘述。

  不过我现在接触的Java代码对IBATIS又进行了一次封装,免去了Resources.getResourceAsReader和SqlMapClientBuilder.buildSqlMapClient环节,下一节我来讲述以下怎么做这个封装。

  

Java后台技术IBATIS入门的更多相关文章

  1. Java后台技术(Dubbo入门)

    我现在公司提供的产品是即时通讯软件,因为我从.net桌面应用开发转岗,从java后台转项目经理,让我有幸拥有了后台开发人员所有的权限,所有的后台源码和技术文档对我开放,可惜仅在后台待了3周不到,还没来 ...

  2. Java后台使用httpclient入门HttpPost请求(form表单提交,File文件上传和传输Json数据)

    一.HttpClient 简介 HttpClient 是 Apache Jakarta Common 下的子项目,用来提供高效的.最新的.功能丰富的支持 HTTP 协议的客户端编程工具包,并且它支持 ...

  3. Java后台技术(TDDL)

    从PC客户端开发转项目经理已经有一段时间了,感觉还不错,平安这边的项目经理还需要对外,所以部门其他项目经理经常需要出差去见客户,我专门对内,部门所有的开发和测试每天做什么.接下来做什么我都必须了解,部 ...

  4. java后台技术

    本文旨在梳理服务端开发技术栈,希望帮助后端开发同学更全面了解Java服务端主要涉及的知识点 1. 语言相关 1.1 Java 核心知识点 Java的类加载机制 JVM相关:JVM内存模型和结构,GC原 ...

  5. Java后台技术(线程安全)

    前端时间一个同事因为后台线程安全问题出了一次生产事故,今天我就对线程安全问题进行一次总结. 首先,我们来大致看以下我同事写的代码,代码我进行了精简,大致如下: for (final String re ...

  6. java基础-网络编程(Socket)技术选型入门之NIO技术

    java基础-网络编程(Socket)技术选型入门之NIO技术 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.传统的网络编程 1>.编写socket通信的MyServer ...

  7. 【分享】Java后台开发精选知识图谱

    地址 引言: 学习一个新的技术时,其实不在于跟着某个教程敲出了几行.几百行代码,这样你最多只能知其然而不知其所以然,进步缓慢且深度有限,最重要的是一开始就对整个学习路线有宏观.简洁的认识,确定大的学习 ...

  8. Java后台开发精选知识图谱

    1.引言: 学习一个新的技术时,其实不在于跟着某个教程敲出了几行.几百行代码,这样你最多只能知其然而不知其所以然,进步缓慢且深度有限,最重要的是一开始就对整个学习路线有宏观.简洁的认识,确定大的学习方 ...

  9. 深入分析Java Web技术内幕(修订版)

    阿里巴巴集团技术丛书 深入分析Java Web技术内幕(修订版)(阿里巴巴集团技术丛书.技术大牛范禹.玉伯.毕玄联合力荐!大型互联网公司开发应用实践!) 许令波 著   ISBN 978-7-121- ...

随机推荐

  1. Redis09——事务(悲观锁、乐观锁)

    事务 定义: Redis事务是一个单独的隔离操作 ①事务中所有的命令都会被序列化.按照顺序执行 ②事务在执行过程中不会被其他客户端发送来的命令请求打断 作用: 串联多个命令防止别的命令插队 multi ...

  2. MYSQL之路之表

  3. 10day 字符集优化 重点

    什么是字符编码: 可以实现对非英文字符的支持 计算机操作系统是谁发明的? --美国人--英语 支持中文比较好的编码: UTF-8 比较通用 GBK 比较国际通用 出现乱码的原因: 01. 系统字符集设 ...

  4. html5 游戏源码下载网站,你值得拥有!

    在游戏开发的学习或工作中,利用完好的游戏源码可以事半功倍,不仅可以逆向学习开拓思维,也可以大大减少设计周期. HTML5是构建Web内容的一种语言描述方式. HTML5是Web中核心语言HTML的规范 ...

  5. 最大/最小de K个数/第K个数

    题目 在未排序的数组中找到第 k 个最大的元素.请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素. 思路 堆排序 收获 用优先队列实现最大最小堆 注意下列代码中优先队列 ...

  6. 【做题笔记】UVA11988破损的键盘

    本题可以在洛谷评测,但需要绑定账号 首先解释一下:Home键的作用是把光标移动,End键的作用是返回上次按Home键的地方 考虑朴素做法:输入为[时下一次插入在数组最前端,然后元素整体向后:同时令 l ...

  7. 找不到方法:'System.Net.Http.HttpRequestMessage System.Web.Http.Controllers.HttpActionContext.get_Request()'

    出现这种情况一般是引用了.net standard 库解决方案1:在web.config 文件中增加如下节点 <dependentAssembly> <assemblyIdentit ...

  8. Spring - MVC - 修改 Java 类后, 触发重启

    1. 概述 学习 Spring MVC 下, 如何可控的触发重启 2. 背景 学习 Spring 场景 有些时候, 改完类, 需要重启 之前有听说, Spring MVC 可以自动重启 于是想, 尝试 ...

  9. JDBC--处理Blob

    1.LOB(Large Objects)大对象,是用来存储大量的二进制和文本数据的一种数据类型(一个LOB字段可存储多达4GB的数据) --LOB分类两种类型:1)内部LOB: 2)外部LOB: -- ...

  10. Java开发中使用模拟接口moco响应中文时乱码

    场景 在开发中需要依赖一些接口,比如需要请求一个返回Json数据的接口,但是返回Json数据的接口要么是没搭建,要么是交互比较复杂. 此时,就可以使用moco来模拟接口返回接口数据,以便开发和测试工作 ...