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

本文详细介绍了MyBatis的集成、jar包安装、mybatis-generator的配置与安装,包括处理常见问题如JDBC驱动异常、注解操作、XML语法使用和mapper插件的配置。最后提到了如何解决DAO层的自动装配和空指针异常。
摘要由CSDN通过智能技术生成

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


集成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的语法错误会报出来,不会是空指针

  • 31
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值