springboot-基础-eclipse集成mybatis+使用方法+排错

news2024/11/17 7:52:27

备份笔记。所有代码都是2019年测试通过的,如有问题请自行搜索解决!


目录

  • 集成mybatis
    • 安装mybatis的jar包
    • 安装插件:mybatis-generator
      • 安装方法
      • 生成方法
      • 报错:java.lang.RuntimeException: Exception getting JDBC Driver
    • mybatis注解
  • dao层XML语法
    • 使用map方式返回多条数据
    • 限定查询的条数
    • 返回List<String>型的函数
    • 报错
      • Could not resolve type alias 'BaseResultMap'
  • 排错
    • 入口类不能使用@MapperScan
    • dao无法自动装配
    • dao层测试NullPointerException

集成mybatis

mybatis是方便操作数据库的,不多说。

安装mybatis的jar包

去 https://github.com/mybatis/mybatis-3/releases 下载zip,解压
项目–run as/debug as–run configuration–Maven Build…–
在这里插入图片描述
Goals的内容是:

install:install-file -Dfile=F:\eclipse\mybatis-3.5.2\mybatis-3.5.2.jar -DgroupId=org.mybatis.spring.boot -DartifactId=mybatis-spring-boot-starter -Dversion=3.5.2 -Dpackaging=jar

-DgroupId -DartifactId -Dversion是跟pom.xml的配置对应的

然后点击run和apply

控制台显示success表示完成

右键项目名称–Maven–Update Project

在这里插入图片描述

之后pom文件dependency的报错会消失。

安装插件:mybatis-generator

这个可以自动读取数据库里的表格产生操作数据的mapper

安装方法

Help–Install New Software–Add–Location: https://dl.bintray.com/mybatis/mybatis-generator/

之后就等安装完成并重启。修改pom.xml(这个version不知道可以去线上查)

                <dependency>
		    <groupId>org.mybatis.generator</groupId>
		    <artifactId>mybatis-generator-core</artifactId>
		    <version>1.3.7</version>
		</dependency>

另外plugins下也要添:mybatis-generator.xml是实际配置文件

<plugin>
			    <groupId>org.mybatis.generator</groupId>
		        <artifactId>mybatis-generator-maven-plugin</artifactId>
		        <version>1.3.7</version>
		        <configuration>
		            <configurationFile>${basedir}/src/main/resources/mybatis-generator.xml</configurationFile>
		            <overwrite>true</overwrite>
		            <verbose>true</verbose>
		        </configuration>
		        <dependencies>
                    <dependency>
                        <groupId>mysql</groupId>
                        <artifactId>mysql-connector-java</artifactId>
                        <version>${mysql.version}</version>
                    </dependency>
                </dependencies>
			</plugin>

mybatis-generator示例:

<generatorConfiguration>
<!--  一个数据库一个context  -->
<context id="sqlserverTables">
<!--  生成的pojo,将implements Serializable  -->
<plugin type="org.mybatis.generator.plugins.SerializablePlugin"/>
<!--  数据库链接URL、用户名、密码  -->
<!--  连接字符串  -->
<jdbcConnection driverClass="com.mysql.jdbc.Driver" connectionURL="jdbc:mysql://localhost:3306/genes?serverTimezone=Asia/Shanghai&nullCatalogMeansCurrent=true" userId="root" password="123"> </jdbcConnection>
<!--  类型转换  -->
<javaTypeResolver>
<!--  默认false,把JDBC DECIMAL 和 NUMERIC 类型解析为 Integer true,把JDBC DECIMAL
                和 NUMERIC 类型解析为java.math.BigDecimal  -->
<property name="forceBigDecimals" value="false"/>
</javaTypeResolver>
<!--  生成model模型,对应的包路径,以及文件存放路径(targetProject),targetProject可以指定具体的路径,如./src/main/java,
            也可以使用“MAVEN”来自动生成,这样生成的代码会在target/generatord-source目录下  -->
<javaModelGenerator targetPackage="com.example.demo.model" targetProject="demo1">
<!--  是否在当前路径下新加一层schema,eg:fase路径com.oop.eksp.user.model, true:com.github.jackieonwaymodel.[schemaName]  -->
<property name="enableSubPackages" value="false"/>
<!--  从数据库返回的值被清理前后的空格  -->
<property name="trimStrings" value="true"/>
<!--  是否生成构造函数 默认是false  -->
<property name="constructorBased" value="false"/>
</javaModelGenerator>
<!-- 对应的mapper.xml文件  -->
<sqlMapGenerator targetPackage="com.example.demo.mapper" targetProject="demo1">
<property name="enableSubPackages" value="false"/>
<property name="constructorBased" value="false"/>
</sqlMapGenerator>
<!--  对应的Mapper接口类文件  -->
<javaClientGenerator type="XMLMAPPER" targetPackage="com.example.demo.mapper" targetProject="demo1">
<property name="enableSubPackages" value="false"/>
<property name="constructorBased" value="false"/>
</javaClientGenerator>
<table tableName="gene_human" domainObjectName="GeneBasicsHuman" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false" mapperName="GeneBasicsHumanDao">
<generatedKey column="id" sqlStatement="Mysql" identity="true"/>
</table>
<table tableName="sgrna_human" domainObjectName="SgrnaHuman" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false" mapperName="SgrnaHumanDao">
<generatedKey column="id" sqlStatement="Mysql" identity="true"/>
</table>
</context>
</generatorConfiguration>

文件说明:

targetProject要写你现在的项目名。什么src/main/java啊,正斜杠反斜杠啊,src啊,.\src啊,绝对路径啊,都不对。就乖乖写项目名。
在这里插入图片描述
在这里插入图片描述
另外connectionURL里要写数据库名称。
在这里插入图片描述
这里就是要用的数据库的名字

下面<table>就是你要生成代码的表,只要换换名字就好了。

生成方法

项目名称右键–run as–run configurations–MyBatis Generator–添加上configuration file,运行即可。
在这里插入图片描述

刷新一下目录,就可以看到model和mapper下都有文件产生了。如果successful但是没文件产生,请检查targetProject是不是写错了
在这里插入图片描述

报错:java.lang.RuntimeException: Exception getting JDBC Driver

检查pom文件中mysql-connector-java这个配了没有,如果写了下面这句,请删除
<scope>runtime</scope>

mybatis注解

注解方式操作数据:

@Select是查询类的注解,所有的查询均使用这个

@Result修饰返回的结果集,关联实体类属性和数据库字段一一对应,如果实体类属性和数据库属性名保持一致,就不需要这个属性来修饰。
如果不对应,如下面这个例子,updateTime时实体类属性,update_time是sql列名

@Select("select *from Demo where id=#{id}")  
    @Results({  
       @Result(property="updateTime",column="update_time")  
    })  
public Demo selectById2(int id); 

@Insert插入数据库使用,直接传入实体类会自动解析属性到对应的值

@Update负责修改,也可以直接传入对象

@delete负责删除

dao层XML语法

使用map方式返回多条数据

接口上指定哪个是key,这个key来自数据库那个表的某个字段,而map的value必须是对象,比如某个实体类。

接口:

@MapKey("chr")
Map<String, ChrAcc> selectByTaxon(String taxon);

xml:

  <select id="selectByTaxon" parameterType="java.lang.String" resultType="com.example.demo.model.ChrAcc">
    select 
    <include refid="Base_Column_List" />
    from chr_to_acc
    where taxon = #{taxon,jdbcType=VARCHAR}
  </select>

限定查询的条数

接口:

List<NegCtrl> selectByTaxon(String taxon, String num);

xml:直接使用接口的变量,由于num是String类型,sql中会继续加引号,所以这里应该用$
在这里插入图片描述

返回List型的函数

接口:

List<String> selectByTransId(String taxon, String transId);

xml中注意:是resultType而不是resultMap。如果说这里不是String而是别的对象类型,写对应的就好了。
在这里插入图片描述

报错

Could not resolve type alias ‘BaseResultMap’

查看select语句,有没有把resultMap写成了resultType?
在这里插入图片描述

排错

入口类不能使用@MapperScan

查找不到org.mybatis.spring.annotation,因此无法引用其下的MapperScan
此时Project Explore下的Maven Dependencies中,也找不到mybatis-spring-XXX.jar

先去查一下
https://mvnrepository.com/artifact/org.mybatis/mybatis-spring

由于我装了最新版的mybatis(3.5.2),所以直接看最新的mybatis spring,也就是2.0.2。如下图,版本合适。
在这里插入图片描述

所以原因是我没有配置org.mybatis的dependency。去pom.xml下粘贴网页上这一段
在这里插入图片描述

update项目一下,就发现可以使用MapperScan了。
(项目名称,右键,maven-update project)

dao无法自动装配

Property 'sqlSessionFactory' or 'sqlSessionTemplate' are required

其实Juint test已经显示这个问题了。建议先用那个测试每段代码每个功能,再做下一步的开发。

解决:类似上面的,添加依赖

<dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>2.1.0</version>
        </dependency>

在这里插入图片描述

正确输出:
在这里插入图片描述

dao层测试NullPointerException

mybatis自动生成的函数,调用的结果都是空指针。那说明没有装配上。检查:

  1. RunWith这句有没有注释掉,要取消注释

  2. dao接口上有没有写@Mapper引导spring来注入

xml的语法错误会报出来,不会是空指针

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

深入了解Kafka的文件存储原理

Kafka简介 Kafka最初由Linkedin公司开发的分布式、分区的、多副本的、多订阅者的消息系统。它提供了类似于JMS的特性&#xff0c;但是在设计实现上完全不同&#xff0c;此外它并不是JMS规范的实现。kafka对消息保存是根据Topic进行归类&#xff0c;发送消息者称为Producer&…

【鸿蒙开发】第十五章 ArkTS基础类库-并发

1 简述 并发是指在同一时间段内&#xff0c;能够处理多个任务的能力。为了提升应用的响应速度与帧率&#xff0c;以及防止耗时任务对主线程的干扰&#xff0c;OpenHarmony系统提供了异步并发和多线程并发两种处理策略&#xff0c;ArkTS支持异步并发和多线程并发。并发能力在多…

部署bpmn项目实现activiti流程图的在线绘制

本教程基于centos7.6环境中完成 github开源项目: https://github.com/Yiuman/bpmn-vue-activiti软件&#xff1a;git、docker 1. 下载源代码 git clone https://github.com/Yiuman/bpmn-vue-activiti.git2. 修改Dockerfile文件 声明基础镜像&#xff0c;将项目打包&#xff…

LeetCode---386周赛

题目列表 3046. 分割数组 3047. 求交集区域内的最大正方形面积 3048. 标记所有下标的最早秒数 I 3049. 标记所有下标的最早秒数 II 一、分割数组 这题简单的思维题&#xff0c;要想将数组分为两个数组&#xff0c;且分出的两个数组中数字不会重复&#xff0c;很显然一个数…

AI又进化了

B站&#xff1a;啥都会一点的研究生公众号&#xff1a;啥都会一点的研究生 一直想做但没做的板块&#xff0c;整理一段时间内AI领域的前沿动态&#xff08;符合大多粉丝研究领域/感兴趣方向&#xff09;&#xff0c;了解了解外面世界发展成啥样了&#xff0c;一起看看吧~ 谷歌…

网关kong记录接口处理请求和响应插件 tcp-log-with-body的安装

tcp-log-with-body 介绍 Kong的tcp-log-with-body插件是一个高效的工具&#xff0c;它能够转发Kong处理的请求和响应。这个插件非常适用于需要详细记录API请求和响应信息的情景&#xff0c;尤其是在调试和排查问题时。 软件环境说明 kong version 2.1.4 - 2.8.3 [可用亲测]C…

8、Redis-Jedis、Lettuce和一个Demo

目录 一、Jedis 二、Lettuce 三、一个Demo Java集成Redis主要有3个方案&#xff1a;Jedis、Lettuce和Redisson。 其中&#xff0c;Jedis、Lettuce侧重于单例Redis&#xff0c;而Redisson侧重于分布式服务。 项目资源在文末 一、Jedis 1、创建SpringBoot项目 2、引入依赖 …

【PDF技巧】网上下载的pdf文件怎么才能编辑

不知道大家有没有遇到过网上下载的PDF文件不能编辑的情况&#xff0c;今天我们来详细了解一下导致无法编辑的原因即解决方法有哪些。 第一种原因&#xff1a;PDF文件中的内容是否是图片&#xff0c;如果确认是图片文件&#xff0c;那么我们想要编辑&#xff0c;就可以先使用PD…

《Improving Calibration for Long-Tailed Recognition》阅读笔记

论文标题 《Improving Calibration for Long-Tailed Recognition》 改进长尾识别的校准工作 作者 Zhisheng Zhong、 Jiequan Cui、Shu Liu 和 Jiaya Jia 香港中文大学和 SmartMore 初读 摘要 深度神经网络在训练数据集类别极度不平衡时可能会表现不佳。最近&#xff0c…

高中数学:函数的单调性

一、概念 二、单调区间的表示方法 注意 1、两个不相连的部分&#xff0c;单调性相同&#xff0c;则两个单调区间用逗号隔开&#xff0c;不能用∪号连接。 2、单调区间端点都用开区间表示&#xff0c;最安全。 三、常见题型 1、普通简单函数单调性判断 解题思路&#xff1a;画…

VueCli的安装与卸载

文章目录 一.Node安装包的报读网盘提取码二、Vue脚手架Cli三、Vue-CLI使用步骤(自定义安装)1.转换路径并创建项目2.创建步骤的解释(保姆级)3.等待vue项目自己创建好(保姆级) 四、通过npm对vue的安装与卸载 一.Node安装包的报读网盘提取码 下面的链接为地址: Node的百度网盘提取…

【操作系统(Operator System)】

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言 一、概念 二、结构示意图 三、尝试理解操作系统 系统调用和库函数概念 承上启下 总结 前言 世上有两种耀眼的光芒&#xff0c;一种是正在升起的太阳&#xff…

每日下载超1000万次,这个前端工具太有用了!

今天来分享一个前端必备的工具&#xff0c;其每天在 npm 上的下载量高达 1000 万次&#xff0c;几乎每个前端项目都在用&#xff0c;它就是 PostCSS。这款工具已经成为前端开发领域中不可或缺的一部分&#xff0c;之所以如此受欢迎&#xff0c;不仅是因为它能够帮助开发者自动化…

双周回顾#007 - 前端与后端

前端的问题不是难&#xff0c;而是它面对最终用户。只要用户的喜好和口味发生变化&#xff0c;前端就必须跟上。 这导致前端不得不快速变化&#xff0c;因为用户的口味正在越来越快地改变。 后端不需要面对最终用户&#xff0c;需要解决的都是一些经典的计算机科学问题&#…

智能的花火,照亮一座5G钢铁工厂的时代之舞

“东风夜放花千树。更吹落&#xff0c;星如雨。凤箫声动&#xff0c;玉壶光转&#xff0c;一夜鱼龙舞”&#xff0c;辛弃疾在《青玉案》中描绘的“打铁花”&#xff0c;是刚刚过去的春节假期中&#xff0c;全国各地都在上演的中式浪漫。 当铁水被击打向高空&#xff0c;犹如千万…

苍穹外卖学习 Day10 Day11 Day12

前言 用于记录苍穹外卖Day10、Day11、Day12的学习 Day10 订单状态定时处理 来电提醒 客户催单 订单状态定时处理 Spring Task Spring Task是一个任务调度工具&#xff0c;可以按照约定的时间自动执行某个代码逻辑&#xff08;定时自动执行某段Java代码&#xff09; cron表…

[GXYCTF2019]BabyUpload1 -- 题目分析与详解

目录 一、题目分析 1、判断题目类型&#xff1a; 2、上传不同类型的文件进行测试&#xff1a; 二、题目详解 1、写出.htaccess文件&#xff1a; 2、.htaccess 文件配合 .jpg 上传&#xff1a; 3、利用 中国蚁剑/中国菜刀 获取flag&#xff1a; 一、题目分析 1、判断题目…

亚马逊云科技实时 AI 编程助手 Amazon CodeWhisperer,开发快人一步

​ 亚马逊云科技&#xff1a;https://mic.anruicloud.com/url/1024 ​ Amazon CodeWhisperer 是一款 AI 编码配套应用程序&#xff0c;可在 IDE 中生成 整行代码和完整的函数代码建议&#xff0c;以帮助您更快地完成更多工作。在本系列 文章中&#xff0c;我们将为您详细介绍 A…

Cloud+Consul

Cloud整合Zookeeper代替Eureka-CSDN博客 Consul简介 Consul是一套开源的分布式服务发现和配置管理系统 What is Consul? | Consul | HashiCorp DeveloperConsul is a service networking solution that delivers service discovery, service mesh, and network security ca…

#WEB前端(CCS选择器)

1.实验&#xff1a;CCS选择器 2.IDE&#xff1a;VSCODE 3.记录&#xff1a; 子代选择器、后代选择器、相邻兄弟选择器、类选择器、伪元素选择器&#xff08;鼠标悬停&#xff09;、ID选择器、调用选择器&#xff08;全选&#xff09; 4.代码&#xff1a; <!DOCTYPE html…