金仓数据库KingbaseES客户端编程开发框架-MyBatis(2. 概述 3. MyBatis配置说明)

news/2024/5/15 1:26:12/文章来源:https://blog.csdn.net/arthemis_14/article/details/126904980

2. 概述

MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息, 将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。

在本章中详细说明了 KingbaseES 对 MyBatis的支持情况,以及使用时应该注意的问题。

本章内容主要是基于 MyBatis 3 及后续版本支持情况的详细描述。

3. MyBatis配置说明

Mybatis的jar包可以从官方网站下载,Mybatis所使用的JDBC包kingbase8-8.6.0.jar位于$KINGBASE_HOME/Interface/jdbc目录下。使用时将Mybatis包和JDBC包导入到项目的Libraries中并定义相关配置项即可。

定义Mybatis配置文件,根据用户选择,更改一下配置文件。

  1. 在config.xml中配置JDBC的驱动信息参数,数据库服务器信息参数和登陆用户信息参数。当然,这些参数也可以根据用户应用需求, 单独生成property文件,针对不用的应用场景,导入不同的属性文件。这里以property为例说明下config.xml的配置使用。

在property 中增加如下声明:

jdbc.driverClassName=com.kingbase8.Driver
jdbc.url=jdbc:kingbase8://localhost:54321/TEST
jdbc.username=登录名
jdbc.password=登录密码

在config.xml 中增加如下声明:

<environments default="development"><environment id="development"><transactionManager type="JDBC"/><dataSource type="POOLED"><property name="driver" value="${jdbc.driverClassName}"/><property name="url" value="${jdbc.url}"/><property name="username" value="${jdbc.username}" /><property name="password" value="${jdbc.password}" /></dataSource></environment>
</environments>
  1. 在mapper.xml中,主要是配置SQL映射关系,根据用户的需求,自定义映射关系。这里以一个简单的配置为例。

在mapper.xml 中增加如下声明:

<mapper namespace="com.test.interfaces.MybatisDao"><update id="dropTable">DROP TABLE IF EXISTS ${sql} CASCADE</update><update id="createNewTableMap" parameterType="java.util.HashMap">${sql}</update><resultMap id="NumTableMap" type="NumEntity"><result column="id" property="userId" /><result column="age" property="userAge" /><result column="name" property="userName" /><result column="wage" property="userWage" /><result column="cost" property="userCost" /></resultMap><select id="selectNumTable" resultMap="NumTableMap">select * from t_num</select><select id="selectNumTableByID" parameterType="int"resultMap="NumTableMap">select * from t_num where id=#{value}</select><select id="selectNumTableByAge" parameterType="int"resultMap="NumTableMap">select * from t_num where age=#{value}</select><select id="selectNumTableByName" parameterType="string"resultMap="NumTableMap">select * from t_num where name=#{value}</select><insert id="insertNumTable" parameterType="NumEntity"keyProperty="userId">insert into t_num(id,age,name,wage,cost)values(#{userId},#{userAge},#{userName},#{userWage},#{userCost})</insert><update id="updateNumTableById" parameterType="NumEntity" >update t_num set age=#{userAge},name=#{userName},wage=#{userWage},cost=#{userCost}where id=#{userId}</update><delete id="deleteNumTableById" parameterType="int">delete from t_num where id=#{value}</delete><delete id="deleteNumTable">delete from t_num</delete>
</mapper>

至此,MyBatis的属性文件和映射文件的配置工作已经完成,接下来是来完成Java中对应的接口和实例的开发工作。示例如下:

  1. 在Java中读取property和config属性,配置到sqlSessionFactory:

@BeforeClass
public static void setUpClass() throws Exception {InputStream fis = null;InputStream inputStream = null;try {/* 创建一个 sqlSessionFactory */Properties prop = new Properties();fis = Resources.getResourceAsStream("propertty");prop.load(fis);inputStream = Resources.getResourceAsStream("MyConfig.xml");sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream,"development", prop);} catch(Exception e) {e.printStackTrace();}
}
  1. 在Java中配置mapper.xml对应的namespace,为Interface类型:

public interface MybatisDao {int createNewTableMap(Map<String, Object> param);int dropTable(Map<String, Object> param);/** new number table*/public List<NumEntity> selectNumTable();public NumEntity selectNumTableByID(int id);public List<NumEntity> selectNumTableByAge(int age);public List<NumEntity> selectNumTableByName(String name);public void insertNumTable(NumEntity user);public void updateNumTableById(NumEntity user);public void deleteNumTableById(int id);public void deleteNumTable();
}
  1. 在Java中进行表的查询操作:

public void testNumTable() {SqlSession session = sqlSessionFactory.openSession();int i = 1;try {MybatisDao userOperation = session.getMapper(MybatisDao.class);List<NumEntity> users = userOperation.selectNumTable();for (NumEntity user : users) {System.out.println(user);Assert.assertEquals(i, user.getId());Assert.assertEquals(AGE+i, user.getUserAge());Assert.assertEquals(name[i], user.getUserName());Assert.assertEquals("yes",WAGE+(double)(i*100)/(double)(3.0),user.getUserWage(),0.000001);Assert.assertEquals("yes",COST+(double)(i*100)/(double)(3.0),user.getUserCost(),0.01);i++;}} finally {session.close();}
}
  1. 在Java中进行表的插入操作:

public void testInsertNumTable() {int i = 1 ;SqlSession session = sqlSessionFactory.openSession();try {MybatisDao userOperation = session.getMapper(MybatisDao.class);NumEntity user = new NumEntity();name[1] = "张三";name[2] = "李四";name[3] = "王五";name[4] = "赵二";name[5] = "小北";name[6] = "小东";name[7] = "小西";name[8] = "小南";name[9] = "小明";for (i=1;i<10;i++) {user.setId(i);user.setUserAge(AGE+i);user.setUserName(name[i]);user.setUserWage(WAGE+(double)(i*100)/(double)(3.0));user.setUserCost(COST+(double)(i*100)/(double)(3.0));userOperation.insertNumTable(user);session.commit();System.out.println(user);}} finally {session.close();}
}
  1. 在Java中进行表的更新操作:

public void testUpdateNumTable() {int i = 1 ;SqlSession session = sqlSessionFactory.openSession();try {MybatisDao userOperation = session.getMapper(MybatisDao.class);NumEntity user = new NumEntity();/* 更新一行新的数据id=1 */user = userOperation.selectNumTableByID(1);user.setUserAge(AGE+i);user.setUserName(name[0]);user.setUserWage(WAGE+(double)(i*100)/(double)(3.0));user.setUserCost(COST+(double)(i*100)/(double)(3.0));userOperation.updateNumTableById(user);session.commit();} finally {session.close();}
}
  1. 在Java中进行表的删除操作:

public void testDeleteNumTable() {int i = 1 ;SqlSession session = sqlSessionFactory.openSession();try {MybatisDao userOperation = session.getMapper(MybatisDao.class);userOperation.deleteNumTable();session.commit();} finally {session.close();}
}

到这里为止,在Java中对数据库的表操作就完成了,这里只是简单的示例,可能实际的应用场景的业务逻辑比较复杂,SQL的语句也比较复杂,但是MyBatis的使用精髓就是这些,可以在这些基础上去实现丰富的应用。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_9289.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Sourcemap 配置详解

前言 之前在脚手架工具内整合将sourcemap上传sentry能力的时候&#xff0c;考虑bundle分割对.map文件关联的限制&#xff1a;比如TerserWebpackPlugin&#xff08;JS压缩&#xff09;只对 devtool 选项的 source-map&#xff0c;inline-source-map&#xff0c;hidden-source-m…

后端研发工程师面经——JAVA语言

文章目录2. JAVA语言2.1 面向对象的三大特性2.2 JAVA异常2.2.1 异常产生的原因2.2.2 异常的分类2.2.3 异常的处理方式2.3 序列化和反序列化2.3.1 概念2.3.2 JAVA中的序列化和反序列化2.3.3 序列化和反序列化的接口2.3.4 Serialization接口详解2.3.5 Externalizable接口详解2.3.…

3D建模师做多了女人会不会找不到老婆?次世代美少女战士建模流程讲解

什么是次世代&#xff1f; 次世代是个舶来语&#xff0c;“次世代游戏”指代和同类游戏相比下更加先进的游戏&#xff0c;即“下一代游戏”。 次世代是利用高模烘焙的法线贴图回帖到低模上&#xff0c;让低模在游戏引擎里可以及时显示高模的视觉效果。模型面数比较高&#xf…

算法 - 计数排序(Counting_Sort)

目录 引言&#xff1a; 学习&#xff1a; 什么是计数排序&#xff08;Counting_sort&#xff09;&#xff1f; 定义&#xff1a; 算法思想&#xff1a; 排序过程&#xff1a; Step 1 &#xff1a; Step 2 &#xff1a; Step 3 &#xff1a; Step 4 : Step 5 &…

单片机项目式实训总篇

采取新方法&#xff0c;让自己尽快变强&#xff0c;为了更好的再次见面。停止大脑内斗。 总学习目标&#xff1a;&#xff08;完成后此文字支持跳转&#xff09; 基础知识 端口操作 显示 高级输入 时间控制 综合 Flag: 一周破解C51程序 学习内容&#xff1a; 了解单片…

DeepExploit——当Metasploit遇上机器学习

Metasploit Meets Machine Learning 文章目录Metasploit Meets Machine Learning1. Metasploit准备1.1 与外部项目的合作1.1.1 启用RPC API1.1.2 使用RPC API操作Metasploit2. 创建机器学习模型2.1 DQN2.2 A3C2.2.1 CartPole2.2.2 分布式学习机制3. 深度利用3.1 代理任务3.2 当…

JVM——GC垃圾回收机制

文章目录JVM——GC垃圾回收机制一、如何判断哪些对象应该被回收——对象判活算法引用计数算法可达性分析算法引用最终判定二、对象应该怎么被回收——垃圾回收算法分代收集理论标记-清除算法标记-复制算法标记-整理算法三、内存对象什么时候被回收——触发条件年轻代GC(Minor G…

如期而至的SVN服务器迁移引来一个大瓜XAMPP

文章目录前言方案评估前奏XAMMP搭建svn服务准备软件包安装必要环境和工具安装xampp运行xampp编辑xampp访问xampp安装subversion安装svnmanager创建svn仓库目录修改配置文件为svnmanager创建MySQL用户重启xammp服务访问svnmanager登录svnmanager可能遇到的错误查看服务器目录信息…

10 nginx 中的 slab

前言 这里主要是描述 nginx 中的 slab 内存分配相关 slab 在很多的地方都有使用, 比如 linux, nginx, netty 等等 主要的作用是 内存管理, 复用 简略 nginx 中的 slab 的流程 # slab relatedvoid* poolPtr malloc(2048);ngx_slab_pool_t *pool (ngx_slab_pool_t *)poo…

Pytorch深度学习——线性回归实现 04(未完)

文章目录1 问题假设2 步骤3 学习使用Pytorch的API来搭建模型3.1 nn.Model3.2 优化器类3.3 评估模式和训练模式3.4 使用GPUdata和item的区别1 问题假设 假设我们的基础模型就是y wxb&#xff0c;其中w和b均为参数&#xff0c;我们使用y 3x0.8来构造数据x、y,所以最后通过模型…

0.django部署(基础知识)

我们前面的代码都是在我们自己的电脑&#xff08;通常是Windows操作系统&#xff09;上面运行的&#xff0c;因为我们还处于开发过程中。 当我们完成一个阶段的开发任务后&#xff0c;就需要把我们开发的网站服务&#xff0c;给真正的用户使用了。 那就需要我们的 网站 部署在…

【二次分配问题】基于遗传算法 (GA)、粒子群优化 (PSO) 和萤火虫算法 (FA) 求解二次分配( QAP)问题(MATLAB 实现)

目录 1 概述 3 Matlab代码及文章阅读 4 运行结果 4.1 萤火虫算法 4.2 粒子群优化算法 4.3 遗传算法 5 参考文献 1 概述 目前&#xff0c;该问题已经得到深入的研究&#xff0c;进化策略(evolutionstrategies)、遗传算法(genetic algorithms)、遗传规划(geneticprogramm…

警惕利用「以太坊合并」的 3 种骗局

原文作者&#xff1a;茉莉 距离以太坊合并还有不到 6 小时&#xff0c;这条被视作下一代互联网 Web3.0 底层基础设施的区块链网络将彻底改变共识机制&#xff0c;从工作量证明的 PoW 机制转向权益证明的 PoS。 在合并即将到来前&#xff0c;去中心化安全网络市场 PolySwarm 创…

各语言转wasm-js调用

起源是 我司应该是抄袭某家player , 也用wasm做的 , 所以我也研究一下 关于标题 我估计需要大家一起完善了 , 我只会讲一下 go c 别的都不会 webassembly( wasm ) 可以编译的如图 我想起我这边应用啊 也就无非播放器~~ 本地文件压缩啊加密啊或直接就上传了, 或者在操作数据…

RestHighLevelClient创建索引时报错[299 Elasticsearch-7.12.1

RestHighLevelClient创建索引时报错[299 Elasticsearch-7.12.1出现原因 : 这是因为在使用create方法时 , 会有两个选择 , 其中一个已经过时了 client.indices().create(request, RequestOptions.DEFAULT); 其中的create方法 , 有两个版本 , 有一个显示已经过时了 , 两个方法虽然…

蜂蜜什么时候喝,才可以获得蜂蜜更大的好处?真可以治疗咳嗽?

中秋节刚过去不久&#xff0c;家里面的礼品多的是不是可以开超市了?中国人讲究一个“礼”字&#xff0c;逢年过节、探望故友病友手里不带点东西就会难受。中秋节这样带有美好祝愿的节日自然也是中国人送礼的最佳时间之一。 ​ 编辑切换为居中 添加图片注释&#xff0c;不超过…

Google Chrome Privacy Sandbox All In One

Google Chrome Privacy Sandbox All In OneGoogle Chrome Privacy Sandbox All In OneGoogle Chrome 隐私沙盒chrome://settings/privacySandbox With Privacy Sandbox trials, sites can deliver the same browsing experience using less of your info. That means more priv…

需要在html中加CSS,怎么加

在html中加CSS有三种方式 一种是直接写到标签上的style属性里面 <divid"mydiV"style"width:200px;border:1pxsolid#f00;margin:0;"></div> 一种是写到head标签里面的style标签里面 <styletype"text/css"> #mydiV{ width:2…

C++ 01 内存模型

内存分区的示意图。一般内存主要分为&#xff1a;代码区、常量区、静态区&#xff08;全局区&#xff09;、堆区、栈区这几个区域。 什么是代码区、常量区、静态区&#xff08;全局区&#xff09;、堆区、栈区&#xff1f; 代码区&#xff1a;存放程序的代码&#xff0c;即CPU执…

springboot 整合dubbo3开发rest应用

一、前言 作为微服务治理生态体系内的重要框架 dubbo&#xff0c;从出身到现在历经了十多年的市场检验而依旧火热&#xff0c;除了其自身优秀的设计&#xff0c;高性能的RPC性能&#xff0c;以及依托于springcloud-alibaba的这个背后强劲的开源团队支撑&#xff0c;在众多的微…