0️⃣简介

🗼简介

在我们编写MyBatis的项目时,常常需要为数据表编写大量的SQL语句以及dao类。better-mybatis-generator作为一款IDEA插件,可以自动为我们生成所需要的pojo类、dao类,并提供相当多的SQL单表查询操作。利用该插件,可以大大减小我们代码编写的工作量,从而更专注于业务逻辑的书写。




如何用idea生成java的class文件 idea生成dao_Powered by 金山文档


🗼开发工具

  • 编辑器:IDEA企业版
  • 构建系统:Maven
  • 数据库:MySQL 8.0.31

1️⃣添加插件

打开IDEA,找到插件,在搜索栏搜索better-mybatis-generator插件,点击添加。


如何用idea生成java的class文件 idea生成dao_maven_02


如何用idea生成java的class文件 idea生成dao_spring_03


2️⃣IDEA连接数据库

🗼选择MySQL

打开IDEA右侧的数据库连接,选择 + 号,选择MySQL.


如何用idea生成java的class文件 idea生成dao_mybatis_04


🗼填写相关配置

填写相关配置,包括MySQL连接的用户名和密码,要连接的数据库,在URL的后面添加如下字段:

?serverTimezone=GMT&useSSL=false


如何用idea生成java的class文件 idea生成dao_Powered by 金山文档_05


连接成功后,可以看见我们数据库中的表。如果没有出现表,可以点击上面的刷新按钮刷新一下


如何用idea生成java的class文件 idea生成dao_intellij-idea_06


3️⃣自动生成Dao类

🗼新建目录存放类

右键src/main/java目录,新建com.app.pojo、com.app.dao、com.app.service目录


如何用idea生成java的class文件 idea生成dao_mybatis_07


🗼创建表

创建一张用户表,并插入一些数据,用于后面的测试。

create table user(
    id int primary key auto_increment,
    name varchar(20),
    password varchar(20)
    );
insert into user values(null,"ketty","root");
insert into user values(null,"tom","root");
......
select * from user;


如何用idea生成java的class文件 idea生成dao_Powered by 金山文档_08


🗼选择表

右键user表,选择mabatis-generate选项。


如何用idea生成java的class文件 idea生成dao_spring_09


🗼填写相关配置

这里我们修改pojo类、dao类、dao.xml 三大类文件生成的位置(红框标注处),分别修改成我们刚刚新建的com.app.pojo包以及com.app.dao包


如何用idea生成java的class文件 idea生成dao_spring_10


🔴注意如果你的mysql版本是8.0及以上,需要勾选下面mysql_8(红框标注处)
🔴查看mysql版本:打开cmd,输入mysql -V

mysql -V


如何用idea生成java的class文件 idea生成dao_maven_11


修改完毕后,点击确定。第一次连接会要我们输入数据库连接的账号和密码。填写后在点击确定。

可以看见,我们的com.app.pojo和com.app.dao目录下多了四个文件。这四个文件是插件自动帮我们生成的,包括生成了一些常用的SQL单表操作,如根据条件查询,根据条件修改等。我们在service中就可以直接使用他们了。


如何用idea生成java的class文件 idea生成dao_Powered by 金山文档_12


如何用idea生成java的class文件 idea生成dao_intellij-idea_13


4️⃣使用Dao类

编写完MyBatis的配置文件后,我们就可以去使用Dao中的方法了。

<?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>
    <!--配置资源包-->
    <properties resource="jdbc.properties"/>

    <!--配置别名-->
    <typeAliases>
        <typeAlias type="com.app.pojo.User" alias="user"/>
        <typeAlias type="com.app.pojo.UserExample" alias="userExample"/>
    </typeAliases>

    <!--配置多个环境,default属性指定使用哪个环境-->
    <environments default="mysql">
        <environment id="mysql">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <!--配置参数-->
                <property name="driver" value="${driver}"/>
                <property name="url" value="${url}"/>
                <property name="username" value="${name}"/>
                <property name="password" value="${password}"/>
            </dataSource>
        </environment>
    </environments>

    <!--配置关联映射文件-->
    <mappers>
        <mapper resource="com.app.dao/EmployeeDao.xml"/>
    </mappers>
</configuration>
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/db_study
name=root
password=root

🗼测试类

package com.app.test;

import com.app.dao.UserDao;
import com.app.pojo.User;
import com.app.pojo.UserExample;
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 org.junit.After;
import org.junit.Before;
import org.junit.Test;

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

public class UserTest {
    private SqlSession sqlSession;
    private UserDao userDao;

    @Before
    public void begin() throws IOException {
        // 获取流对象,读取核心配置文件
        InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
        // 创建 sqlSessionFactoryBuilder 工厂构建者对象
        SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
        // 获取 sqlSessionFactory 工厂对象
        SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(is);
        // 获取 SqlSession 对象
        sqlSession = sqlSessionFactory.openSession();
        // 获取 UserDao 代理类对象
        userDao = sqlSession.getMapper(UserDao.class);
    }

    @After
    public void end() {
        // 提交事务
        sqlSession.commit();
        // 释放资源
        sqlSession.close();
    }
}

🗼简单方法

📌selectByPrimaryKey()

按主键查询数据,返回查询的结果。

@Test
    public void test() {
        User user = userDao.selectByPrimaryKey(1);
        System.out.println(user);
    }


如何用idea生成java的class文件 idea生成dao_maven_14


📌insert()

插入一条数据,返回成功的条数。

@Test
    public void test() {
        User user = new User();
        user.setName("hello");
        user.setPassword("3333");
        int i = userDao.insert(user);
        System.out.println(i);
    }


如何用idea生成java的class文件 idea生成dao_intellij-idea_15


如何用idea生成java的class文件 idea生成dao_mybatis_16


🗼Criteria内部类

如果使用插件生成的dao仅仅只有简简单单的无条件增删改查操作,其功能就未免过于鸡肋。实际上,better-mybatis-generator插件还提供了大量有条件的SQL操作。

如果我们打开com.app.pojo目录,我们可以发现,better-mybatis-generator插件不仅生成了User这个pojo类,还生成了一个UserExample类。


如何用idea生成java的class文件 idea生成dao_Powered by 金山文档_12


在这个类中,有一个内部类Criteria。我们可以通过userExample.createCriteria()方法创建它。

UserExample userExample = new UserExample();
        UserExample.Criteria criteria = userExample.createCriteria();

在这个内部类包含了一系andXXXX()方法,这些方法实际上就是一系列的SQL查询条件。我们通过这些方法,传入我们需要的条件的值。然后将这个criteria对象传入到dao指定的SQL操作方法中,就可以实现有条件的SQL操作。


如何用idea生成java的class文件 idea生成dao_maven_18


假如我们需要实现这样一个需求:模糊查询user表中name值包含"t"的记录数。我们可以通过下面的SQL语句:

select count(*) from user where name like "%t%";


如何用idea生成java的class文件 idea生成dao_Powered by 金山文档_19


显然,这是一个有条件的SQL查询,那么我们怎样通过java代码实现呢?

在UserDao中,为我们提供了countByExample()这个方法。如果不传入任何参数(即传null),这个方法的SQL语句是如下这样:

select count(*) from user;

我们可以创建一个criteria对象,在criteria对象中,我们使用andNameLike()方法,传入“t”字符串,然后将userExample传入countByExample()方法中,即如下代码:

@Test
    public void test() {
        UserExample userExample = new UserExample();
        UserExample.Criteria criteria = userExample.createCriteria();
        criteria.andNameLike("%t%");
        long i = userDao.countByExample(userExample);
        System.out.println(i);
    }

点击运行,操作台输出了结果3,与我们通过cmd查询的结果是一致的。


如何用idea生成java的class文件 idea生成dao_Powered by 金山文档_20