Idea+Maven+springboot+Mybatis 创建web项目教程(3):使用Mybatis自动生成器接通数据库

  • Post author:
  • Post category:其他


前两篇:


Idea+Maven+springboot+Mybatis 创建web项目教程(1):环境搭建与配置


Idea+Maven+springboot+Mybatis 创建web项目教程(2)集成Mybatis

上一节已经装好了mysql,现在我们来创建项目需要的数据库文件,然后再回到 mybatis-generator.xml 里面配置。



一、创建项目需要的数据库

打开navicat进行操作。

新建一个数据库:

在这里插入图片描述

字符集的编码,是utf8mb4的兼容性更好,官网文档关于这两个字符集是这么说的:

在这里插入图片描述

意思是,utf8mb3字符集已弃用,将在以后的MySQL版本中删除。建议改用utf8mb4,尽管utf8目前是utf8mb3的别名,但在某些情况下,utf8将成为utf8mb4的引用。为了避免对utf8的含义产生歧义,可以考虑为字符集引用显式指定utf8mb4,而不是utf8。

(忽略我的内容。自己按需进行

在这里插入图片描述



二、配置mybatis-generator.xml

模板可以从官网查看,一般有些可选元素不需要,可以删除掉,每一个元素的作用基本能做到见名知义,详细的介绍官网也有,可以自行翻译。

在这里插入图片描述

针对这个练习,进行的修改如下,也就是一些常用的元素。



1.修改 jdbcConnection 元素里的内容:
<jdbcConnection driverClass="com.mysql.cj.jdbc.Driver"
                connectionURL="jdbc:mysql://localhost:3306/miaosha?serverTimezone=GMT%2B8&amp;useSSL=false"
                userId="root"
                password="19970910">
</jdbcConnection>

对于这个元素不用多说,是数据库链接和驱动的相关信息,需要注意的是,到 mysql6.0 之后,写法有区别,mysql8 的驱动名称有修改,

不是com.mysql.jdbc.Driver 而是 com.mysql.cj.jdbc.Driver,Driver记得大写。

其中 localhost:3306 是因为链接本地的数据库,miaosha 是数据的名字,问号及后面是指定的额外信息,这个似乎是新版本的 mysql 必须的,不然会有别的问题。(另外,不能用&链接,需要分号结尾,搜索了一下,要把 & 替换成 &amp; )



2.修改javaModelGenerator元素里的内容:
<javaModelGenerator targetPackage="com.miaoshaproject.dataobject" targetProject="src/main">
    <property name="enableSubPackages" value="true" />
    <property name="trimStrings" value="true" />
</javaModelGenerator>

这个元素是用于定义 JavaModelGenerator 的属性。javaModelGenerator 会创建与内省表匹配的主键类、记录类和按示例查询类( primary key classes, record classes, and Query by Example classes)。或者说就是,我们数据库对应到 java 的对象的类。所以他就是DataObject。

那我们先把对应的路径创建出来:

在这里插入图片描述

然后,在 javaModelGenerator 里指定 targetPackage,就是目标路径:

也就是说,把数据库里面的表,会分别创建出Object,并且生成在我们指定的这个dataobject 路径下面。



3.sqlMapGenerator修改
<!--生成映射文件的存放位置-->
<sqlMapGenerator targetPackage="mapping"  targetProject="src/main/resources">
    <property name="enableSubPackages" value="true" />
</sqlMapGenerator>

因为上一节里面,application.properties 里面我们已经设定了所有相关的 mybatis 的mapper 存放的路径,是一个mapping文件夹,而且已经创建出来了,这个元素的作用和上一个类似,会和数据库的表对应生成映射,里面会有模板 sql 之类的。

所以这里,就修改 targetPackage 和对应的 targeProject 为对应的路径。



4.元素

ava客户机生成器构建Java接口和类,以便轻松使用生成的 Java 模型和 XML 映射文件。对于MyBatis,生成的对象采用映射器接口的形式。

先创建一个dao文件夹:

在这里插入图片描述

<javaClientGenerator type="XMLMAPPER" targetPackage="com.miaoshaproject.dao"  targetProject="src/main">
    <property name="enableSubPackages" value="true" />
</javaClientGenerator>

然后设置生成 dao 类后的存放位置,type 可选类型有多种,默认的是 XMLMAPPER,会生成 SQLMAP 的 xml 文件和独立的 Mapper 接口。



5.元素

根据对应表名生成类名

<table tableName="user_info" domainObjectName="UserDO" ></table>
<table tableName="user_password" domainObjectName="UserPasswordDO"></table>

tableName 属性指定了数据库对应的表名,domainObjectName 指定生成的映射的类叫UserDO 和 UserPasswordDO。



三、使用命令让mybatis自动生成映射

点击运行 – 左上角加号新建一个maven

在这里插入图片描述

在命令行的框里输入:


mybatis-generator:generate

这行命令就会解析我们的POM文件指定的一个mybatis的插件,并且执行。

然后点击确定。

然后run一下这个命令。

在这里插入图片描述

因为我们使用的mybatis自动生成器这个插件本地没有,所以执行命令后,maven首先会自动下载,稍等一会。

开始执行之后可能会报错:


Failed to execute goal org.mybatis.generator:mybatis-generator-maven-plugin:1.3.5:generate (default-cli) on project miaosha: Execution default-cli of goal org.mybatis.generator:mybatis-generator-maven-plugin:1.3.5:generate failed: Exception getting JDBC Driver


意思就是获取jdbc驱动异常了。网上搜了一下,因为目前为止,我的mysql装的是8.0,按理来说,对应的mysql-connector-java是指定的5.1没问题,但是找不到别的方法,在想是不是版本,于是去pom.xml

在这里插入图片描述

将两处的mysql-connector-java都换成了8.0.15版本并刷新让maven重新下载。

再重新运行命令:

在这里插入图片描述

发现成功了,也就是mybatis的生成器帮我们生成了指定的,对应我们的数据库的所有表里面内容,生成了DO文件,DOmapper映射文件都是java,以及xml文件。

在目录里面查看:

在这里插入图片描述

(问题很大,可以看到这些东西都是新出现的。然而,目录怎么不对呢?

我们指定的com.miaoshaproject下面根本没有对应的文件,而是直接重新建了层级目录。。。

回到mybatis-generator.xml里面,发现上面的 几个生成器元素里面 的 targetPackage没写对。



提醒大家,targetProject和targetPackage目录一定要写完整和正确。

正确之后,比如打开UserDOMapper.xml

可以看到:

在这里插入图片描述

指定的 column 名以及对应的类型都是和数据库里创建表格时候是一样的,而且还帮我们生成了 property 属性;

另外,在下面还有一个 id 为 “ Example_Where_Clause ”的查询示例模板,下面有select、update、insert等等的模板,也就是说冗余的很多CRUD语句,这个 mybatis 的自动生成器已经帮我们做了。

又比如我们打开一个UserDO这个Object类:

在这里插入图片描述

对应数据库的表格的字段,生成了对应的Bean类和方法。

注意:

我们指定的时候,应该是两张表去自动生成,对应应该是有xml文件两份,数据类两份,以及映射的类两份。但是在dataoobject里却多出来了两个,分别是两个数据object对应的Example类。

在这里插入图片描述

随便打开一个Example类,可以看到有七百多行代码,里面是各种情况的复杂查询的组合,都是sql语句,

但是大部分情况下我们都用不到,而且很复杂的查询也愿意自己写,而不是使用他自动生成的示例

,因此我们在generator.xml文件中,table的元素中加上一些属性,这样能在生成的时候指定把这些我们不需要的东西去掉。

可以修改 table 元素里的属性

<!--生成对应表和类名-->
<table tableName="user_info" domainObjectName="UserDO" enableCountByExample="false"
enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false"
selectByExampleQueryId="false"></table>
<table tableName="user_password" domainObjectName="UserPasswordDO" enableCountByExample="false"
       enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false"
       selectByExampleQueryId="false"></table>

然后我们重新运行一下mybatis的generator命令。

虽然对应的类还在,但是点进xml文件里面,可以看到,对应的示例查询语句已经是一些很简单的查询语句。那么我们就可以手

动把那两个Example.java文件删除

掉,不会产生影响。



四、接入数据源

使用springboot的数据源配置方式。

在我们的application.properties文件里面加上:


#配置数据源spring.datasource.name=miaoshaspring.datasource.url=jdbc:mysql://localhost:3306/miaoshaspring.datasource.username=rootspring.datasource.password=19970910#使用阿里的druid数据源做具体操作spring.datasource.type=com.alibaba.druid.pool.DruidDataSourcespring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

现在去APP哪个java文件来做一些修改:



1.为了让springboot先去扫描mybatis的一些配置文件(daomapper),我们更改 @EnableAutoConfiguration 注解为:
@SpringBootApplication

和之前的Enable注解的功能差不多。



2.在下面写入一个简单的逻辑,调查询之后,从DO这个类里面就可以用select方法获取对应的值(整个把数据库和后端串起来了已经,如果没有springboot这是一个很漫长的过程)

注解什么的我现在还不会,也没学,下面代码可以直接copy,然后运行。

@SpringBootApplication(scanBasePackages = {"com.miaoshaproject"})
@RestController
@MapperScan("com.miaoshaproject.dao")
public class App
{
    @Autowired
    private UserDOMapper userDOMapper;
    //次注解和springmvc一致,表示用户访问根目录的时候,输出一个helloworld
    @RequestMapping("/")
    public String home(){
        UserDO userDO=userDOMapper.selectByPrimaryKey(1);
        if(userDO==null){
            return ("用户对象不存在");
        }else{
            return userDO.getName();
        }
    }

    public static void main( String[] args )
    {
        System.out.println( "Hello World!" );
        SpringApplication.run(App.class,args);
    }
}

运行之后打开浏览器,输入localhost的网址:

在这里插入图片描述

没问题,数据库建好之后还没有数据,所以他显示了正确的内容。

虽然成功了,但是我的项目中存在两个遗留问题。

1.创建一个User对象的时候,IDEA提示:

在这里插入图片描述

但是可以正常运行,网上搜了一堆答案,有些就是复制粘贴,问题没解决,也没人说为什么,我暂且空着这个问题

2.启动过程中控制台输出了一些奇怪的东西:

在这里插入图片描述

网上说是因为jdk和mybatis的匹配问题,我用的是jdk11,如果是jdk8及以下则没有这个问题。



版权声明:本文为weixin_42092787原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。