前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >MyBatis Generator的使用和坑

MyBatis Generator的使用和坑

作者头像
bisal
发布2022-01-19 13:49:10
6720
发布2022-01-19 13:49:10
举报

最近复现个问题,需要用到MyBatis,了解到可以MyBatis Generator插件自动生成MyBatis的相关代码,确实非常方便。

mybatis-generator就是mybatis代码生成器,在eclipse的配置方式有两种:离线和在线。

1. 在线安装

首先我们需要知道下载地址,最新地址可从Mybatis官网获取,复制链接,

https://marketplace.eclipse.org/content/mybatis-generator

9e7283ea248e52df276380a8bd093afd.png
9e7283ea248e52df276380a8bd093afd.png

eclipse的"Help-Install NewSoftware",选择"Add",配置该地址,

6ff61edf0a58b36f9116d24b8ef4bda5.png
6ff61edf0a58b36f9116d24b8ef4bda5.png

但是这种在线安装有个问题,就是好像只能下载最新的版本,目前是1.4.0,没太深入研究,用这个生成的MyBatis代码好像都改成接口形式,不再用xml配置了,用起来太生疏。如果要使用旧的,就得用离线安装。

2. 离线安装

GitHub的官网地址,https://github.com/mybatis/generator/releases,可以找到历史版本的链接,例如1.3.7,点击进来,下载第二个zip链接,

5be2e4ff3841f367b694a609e90f7924.png
5be2e4ff3841f367b694a609e90f7924.png

解压出来的features和plugins,将其中的包和文件夹,拷到eclipse的features和plugins,重启eclipse,即可完成安装。

然后就可以创建代码了,先创建测试表,

CREATE TABLE userinfo (
  id int(11) NOT NULL AUTO_INCREMENT,
  username varchar(45) DEFAULT NULL,
  password varchar(45) DEFAULT NULL,
  age int(11) DEFAULT NULL,
  PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

然后,创建一个新工程,src下写个generatorConfig.xml配置文件,

8f65b51b9fe5574f517a14638f542902.png
8f65b51b9fe5574f517a14638f542902.png

内容如下,可以看到,其实就主要包括了几个部分,

(1) jdbcConnection配置的连接串,读取数据库表,反向生成映射。

(2) javaModelGenerator配置的Java代码路径。

(3) sqlMapGenerator配置的xml文件路径。

(4) javaClientGenerator配置的Java Client代码路径。

(5) table配置的需要映射的数据库schema和表名。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE generatorConfiguration PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN" "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
<generatorConfiguration>
  <context id="context1">
    <jdbcConnection connectionURL="jdbc:mysql://localhost:3306/test?useSSL=false&amp;serverTimezone=GMT%2B8" driverClass="com.mysql.cj.jdbc.Driver" password="root" userId="root" />
    <javaModelGenerator targetPackage="bean" targetProject="MyBatis" />
    <sqlMapGenerator targetPackage="mapping" targetProject="MyBatis" />
    <javaClientGenerator targetPackage="mapping" targetProject="MyBatis" type="XMLMAPPER" />
    <table schema="test" tableName="userinfo">
      <columnOverride column="id" property="id" />
    </table>
  </context>
</generatorConfiguration>

右键单击generatorConfig.xml,"Run As"执行Run MyBatis Generator,

5f83aec0a43874d80fbcef40186559cc.png
5f83aec0a43874d80fbcef40186559cc.png

如果执行成功,显示这些信息,

MyBatis Generator Started...
  Buildfile: D:\Dev\Eclipse\workspaces\.metadata\.plugins\org.mybatis.generator.eclipse.ui\.generatedAntScripts\MyBatis-generatorConfig.xml.xml
  BUILD SUCCESSFUL
MyBatis Generator Finished

红框内的代码,都是自动生成的,

6cb249e4f61eecf185b242a6ef68081c.png
6cb249e4f61eecf185b242a6ef68081c.png

写个配置文件,mybatis-config.xml,如下所示,

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <environments default="development">
        <environment id="development">
            <!--事务管理配置-->
            <transactionManager type="JDBC"/>
            <!--数据源配置-->
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/test?useSSL=false&amp;serverTimezone=GMT%2B8"/>
                <property name="username" value="root"/>
                <property name="password" value="root"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <!--这里的resource对应上一步自动生成的mapping/UserinfoMapper.xml文件-->
        <mapper resource="mapping/UserinfoMapper.xml"/>
    </mappers>
</configuration>

写个测试类,执行插入操作,

import java.io.IOException;
import java.io.InputStream;


import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;


import bean.Userinfo;


public class Test {
  public static void main(String[] args) {
        try {
            Userinfo userinfo=new Userinfo();
            userinfo.setUsername("usernameValue");
            userinfo.setPassword("passwordValue");
            //读取mybatis-config.xml配置
            String resource="mybatis-config.xml";
            InputStream inputStream=Resources.getResourceAsStream(resource);
            //生成SqlSessionFactory
            SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(inputStream);
            //生成SqlSession
            SqlSession sqlSession=sqlSessionFactory.openSession();
            //执行插入操作
            sqlSession.insert("insert",userinfo);
            //提交事务
            sqlSession.commit();
            //关闭会话
            sqlSession.close();
        } catch (IOException e) {
            // TODO: handle exception
            e.printStackTrace();
        }
    }
}

数据写入表了,

92173f6101858640da1a43529da61f27.png
92173f6101858640da1a43529da61f27.png

从操作来讲,还是比较方便的,只需要设置反向映射的路径、数据库配置,就可以生成MyBatis所需的基础代码,再写个config连接数据库的配置文件以及测试类,就可以实现MyBatis操作数据库了。

但是,调试过程,还是比较坎坷的,碰到了很多坑,在这提下。

问题1,执行Run MyBatis Generator的时候,提示如下错误,

f3505e266d8cac26de06287d6327ab0c.png
f3505e266d8cac26de06287d6327ab0c.png

看着是JDBC驱动问题,但是包都引入了,要快速解决,可以右键generatorConfig.xml,选择"Run Configuration",

80785ea94e68c49be170a00182ad5a27.png
80785ea94e68c49be170a00182ad5a27.png

Classpath的"User Entries",将jdbc的jar引进来,就可以执行了,

b0667109d39e007150b0782fbc0993f4.png
b0667109d39e007150b0782fbc0993f4.png

问题2,执行Run MyBatis Generator的时候,还可能提示如下这个错误,

d67f4fca6ac68a667c08dd2d833e6b52.png
d67f4fca6ac68a667c08dd2d833e6b52.png

如果连的MySQL,就会碰到这问题,解决方案是需要在jdbc连接串中增加serverTimezone参数,如下所示,

jdbc:mysql://localhost:3306/test?useSSL=false&serverTimezone=GMT%2B8

这其中可能有包括两个知识点,

(1) 之所以使用到了GMT%2B8,因为北京时,是东八区,如果写成UTC,就相差了8个小时。

(2) jdbc中如果含多个参数应该用"&"隔开,但是写在xml中,"&"就是特殊字符了,需要改成"&",否则不识别。

问题3,创建生成的MyBatis代码可能出现这些引用包的错误,

eaafb5dcc779758563b1196001307b65.png
eaafb5dcc779758563b1196001307b65.png

此时可以到maven大本营仓库,https://mvnrepository.com/,检索包名,

3de9b67190fca79ca93535aa79b4d340.png
3de9b67190fca79ca93535aa79b4d340.png

找到和当前的MyBatis版本兼容的jar,下载引入,

f063ef5f90a68aaddd7eafd8924a6673.png
f063ef5f90a68aaddd7eafd8924a6673.png

可能很多朋友,有相同的感觉,调这种问题,就想升级打怪,解决一个,可能又出来另外一个,或者解决另外一个的时候,发现之前解决的不太对,过程可能很崩溃,但是换个角度,这些都是成长的积累,碰到的问题越多,积累就会越丰富,所以不用怕碰到问题,但是一定得有自己的思考,形成知识库,成为自己的财富,否则只是机械地解决问题,下次碰到了,还是不懂。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2022-01-17 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 MySQL
腾讯云数据库 MySQL(TencentDB for MySQL)为用户提供安全可靠,性能卓越、易于维护的企业级云数据库服务。其具备6大企业级特性,包括企业级定制内核、企业级高可用、企业级高可靠、企业级安全、企业级扩展以及企业级智能运维。通过使用腾讯云数据库 MySQL,可实现分钟级别的数据库部署、弹性扩展以及全自动化的运维管理,不仅经济实惠,而且稳定可靠,易于运维。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档