0️⃣简介
🗼简介
在我们编写MyBatis的项目时,常常需要为数据表编写大量的SQL语句以及dao类。better-mybatis-generator作为一款IDEA插件,可以自动为我们生成所需要的pojo类、dao类,并提供相当多的SQL单表查询操作。利用该插件,可以大大减小我们代码编写的工作量,从而更专注于业务逻辑的书写。
🗼开发工具
编辑器:IDEA企业版
构建系统:Maven
数据库:MySQL 8.0.31
1️⃣添加插件
打开IDEA,找到插件,在搜索栏搜索better-mybatis-generator插件,点击添加。
2️⃣IDEA连接数据库
🗼选择MySQL
打开IDEA右侧的数据库连接,选择 + 号,选择MySQL.
🗼填写相关配置
填写相关配置,包括MySQL连接的用户名和密码,要连接的数据库,在URL的后面添加如下字段:
?serverTimezone=GMT&useSSL=false
连接成功后,可以看见我们数据库中的表。如果没有出现表,可以点击上面的刷新按钮刷新一下
3️⃣自动生成Dao类
🗼新建目录存放类
右键src/main/java目录,新建com.app.pojo、com.app.dao、com.app.service目录
🗼创建表
创建一张用户表,并插入一些数据,用于后面的测试。
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;
🗼选择表
右键user表,选择mabatis-generate选项。
🗼填写相关配置
这里我们修改pojo类、dao类、dao.xml 三大类文件生成的位置(红框标注处),分别修改成我们刚刚新建的com.app.pojo包以及com.app.dao包
🔴注意如果你的mysql版本是8.0及以上,需要勾选下面mysql_8(红框标注处)
🔴查看mysql版本:打开cmd,输入mysql -V
mysql -V
修改完毕后,点击确定。第一次连接会要我们输入数据库连接的账号和密码。填写后在点击确定。
可以看见,我们的com.app.pojo和com.app.dao目录下多了四个文件。这四个文件是插件自动帮我们生成的,包括生成了一些常用的SQL单表操作,如根据条件查询,根据条件修改等。我们在service中就可以直接使用他们了。
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);
}
📌insert()
插入一条数据,返回成功的条数。
@Test
public void test() {
User user = new User();
user.setName("hello");
user.setPassword("3333");
int i = userDao.insert(user);
System.out.println(i);
}
🗼Criteria内部类
如果使用插件生成的dao仅仅只有简简单单的无条件增删改查操作,其功能就未免过于鸡肋。实际上,better-mybatis-generator插件还提供了大量有条件的SQL操作。
如果我们打开com.app.pojo目录,我们可以发现,better-mybatis-generator插件不仅生成了User这个pojo类,还生成了一个UserExample类。
在这个类中,有一个内部类Criteria。我们可以通过userExample.createCriteria()方法创建它。
UserExample userExample = new UserExample();
UserExample.Criteria criteria = userExample.createCriteria();
在这个内部类包含了一系andXXXX()方法,这些方法实际上就是一系列的SQL查询条件。我们通过这些方法,传入我们需要的条件的值。然后将这个criteria对象传入到dao指定的SQL操作方法中,就可以实现有条件的SQL操作。
假如我们需要实现这样一个需求:模糊查询user表中name值包含"t"的记录数。我们可以通过下面的SQL语句:
select count(*) from user where name like "%t%";
显然,这是一个有条件的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查询的结果是一致的。