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

备份笔记。所有代码都是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_accwhere 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.hqwc.cn/news/496051.html

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

相关文章

H3C OSPF 外部路由引入实验

H3C OSPF 外部路由引入实验 实验拓扑 实验需求 按照图示配置 IP 地址R1&#xff0c;R2&#xff0c;R3 运行 OSPF 使内网互通&#xff0c;所有接口&#xff08;公网接口除外&#xff09;全部宣告进 Area 0&#xff1b;要求使用环回口作为 Router-id业务网段不允许出现协议报文…

Idea安装gideabrowser插件

Idea安装gideabrowser插件 一、安装二、设置教程 一、安装 gideabrowser链接地址 二、设置教程 在人生的舞台上&#xff0c;奋力拼搏&#xff0c;才能演绎出最精彩的人生之歌。面对挑战和困难&#xff0c;不妥协、不气馁&#xff0c;只争朝夕&#xff0c;方显坚韧与智慧。努…

基于ssm框架的博客系统

** &#x1f345;点赞收藏关注 → 私信领取本源代码、数据库&#x1f345; 本人在Java毕业设计领域有多年的经验&#xff0c;陆续会更新更多优质的Java实战项目希望你能有所收获&#xff0c;少走一些弯路。&#x1f345;关注我不迷路&#x1f345;** 一 、设计说明 1.1课题背…

2024智慧城市革命:人工智能、场景与运营的融合之力

在数字革命的浪潮中&#xff0c;2024年的智慧城市将成为人类社会进步的新地标。 三大关键元素——人工智能、场景应用和精准运营——正在重新塑造城市面貌&#xff0c;构建未来的智慧城市生活图景。 一、人工智能&#xff1a;赋能智慧城市 随着人工智能技术的快速发展&#x…

通过QScrollArea寻找最后一个弹簧并且设置弹簧大小

项目原因&#xff0c;最近需要通过QScrollArea寻找其中最后一个弹簧并且设置大小和策略&#xff0c;因为无法直接调用UI指针&#xff0c;所以只能用代码寻找。 直接上代码&#xff1a; if (m_scrollArea){int iScrollWidth m_labelSelectedTitle->width();m_scrollArea-&g…

【Web安全靶场】sqli-labs-master 1-20 BASIC-Injection

sqli-labs-master 1-20 BASIC-Injection 文章目录 sqli-labs-master 1-20 BASIC-Injection第一关-报错注入第二关-报错注入第三关-报错注入第四关-报错注入第五关-报错注入-双查询注入第六关-报错注入-双查询注入第七关-outfile写入webshell第八关-布尔盲注第九关-时间盲注第十…

【README 小技巧】 展示gitee中开源项目start

【README 小技巧】 展示gitee中开源项目start <a target"_blank" hrefhttps://gitee.com/wujiawei1207537021/wu-framework-parent><img srchttps://gitee.com/wujiawei1207537021/wu-framework-parent/badge/star.svg altGitee star/></a>

Eclipse是如何创建web project项目的?

前面几篇描述先后描述了tomcat的目录结构和访问机制&#xff0c;以及Eclipse的项目类型和怎么调用jar包&#xff0c;还有java的main函数等&#xff0c;这些是一些基础问题&#xff0c;基础高清出来才更容易搞清楚后面要说的东西&#xff0c;也就是需求带动学习&#xff0c;后面…

vue3第三节(v-model 执行原理)

特殊说明&#xff1a; 以下vue3语法是基于 3.4之前版本进行使用的&#xff0c;3.4之后的版本 引入了 defineModel 宏&#xff0c;后续会介绍defineModel 1、vue3 与vue2 中v-model区别 vue3 中v-model绑定的不再是value&#xff0c;而是modelValue&#xff0c;接收的方法也不再…

【C++精简版回顾】12.友元函数

1.友元函数 1.class class MM { public:MM(int age,string name):age(age),name(name){}friend void print(MM mm); private:int age;string name;void print() {cout << age << "岁的" << name << "喜欢你" << endl;} }; f…

express+mysql+vue,从零搭建一个商城管理系统4--mysql数据库链接

提示&#xff1a;学习express&#xff0c;搭建管理系统 文章目录 前言一、创建express_service数据库二、安装mysql三、新建config文件夹四、新建config/db.js五、index.js引入db.js文件六、启动项目预览总结 前言 需求&#xff1a;主要学习express&#xff0c;所以先写service…

【学习笔记】深度学习实战 | PyTorch 入门(MLP为例)

简要声明 学习相关网址 [双语字幕]吴恩达深度学习deeplearning.aiPapers With CodeDatasets 深度学习网络基于PyTorch学习架构&#xff0c;代码测试可跑。本学习笔记单纯是为了能对学到的内容有更深入的理解&#xff0c;如果有错误的地方&#xff0c;恳请包容和指正。 参考文献…