1.搭建环境:idea+MySQL数据库+Mybatis
2.mybatis的自动生成
2.1在pom.xml文件中导入插件
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<excludes>
<exclude>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</exclude>
</excludes>
</configuration>
</plugin>
<plugin>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-maven-plugin</artifactId>
<version>1.3.5</version>
<configuration>
<configurationFile>${basedir}/src/main/resources/generator/generatorConfig.xml</configurationFile>
<overwrite>true</overwrite>
<verbose>true</verbose>
</configuration>
</plugin>
</plugins>
<configurationFile>标签中存放自动生成的配置文件的.xml文件,${basedir}只起到引导作用,表示绝对地址,配置文件名称:generatorConfig.xml
其次要注意版本问题
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.4.3</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<plugin>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-maven-plugin</artifactId>
<version>1.3.5</version>
<configuration>
<configurationFile>${basedir}/src/main/resources/generator/generatorConfig.xml</configurationFile>
<overwrite>true</overwrite>
<verbose>true</verbose>
</configuration>
</plugin>
2.2 配置generatorConfig.xml文件
<?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>
<!-- 数据库驱动:选择你的本地硬盘上面的数据库驱动包-->
<classPathEntry location="D:\JDK\MySQL\mysql-connector-java-8.0.12.jar"/>
<context id="DB2Tables" targetRuntime="MyBatis3">
<commentGenerator>
<property name="suppressDate" value="true"/>
<!-- 是否去除自动生成的注释 true:是 : false:否 -->
<property name="suppressAllComments" value="true"/>
</commentGenerator>
<!--数据库链接URL,用户名、密码 -->
<jdbcConnection driverClass="com.mysql.cj.jdbc.Driver" connectionURL="jdbc:mysql://localhost:3306/test?useSSL=false&serverTimezone=UTC" userId="root" password="123456">
</jdbcConnection>
<javaTypeResolver>
<property name="forceBigDecimals" value="false"/>
</javaTypeResolver>
<!-- 生成模型的包名和位置-->
<javaModelGenerator targetPackage="com.example.springboot1.model" targetProject="src/main/java">
</javaModelGenerator>
<!-- 生成映射文件的包名和位置-->
<sqlMapGenerator targetPackage="mapping/generated" targetProject="src/main/resources">
</sqlMapGenerator>
<!-- 生成DAO的包名和位置-->
<javaClientGenerator type="XMLMAPPER" targetPackage="com.example.springboot1.dao" targetProject="src/main/java">
</javaClientGenerator>
<!-- 要生成的表 tableName是数据库中的表名或视图名 domainObjectName是实体类名-->
<!-- <table tableName="account" domainObjectName="Account" mapperName="AccountDAO" >
</table>
<table tableName="person" domainObjectName="Person" mapperName="PersonDAO" >
</table>-->
<table tableName="user" domainObjectName="User" mapperName="UserDAO" catalog="test">
</table>
</context>
</generatorConfiguration>
注:
1.classPathEntry标签导入一个数据库驱动,选择你的本地硬盘上面的数据库驱动包
2.javaModelGenerator生成模型的包名和位置,即model
3.sqlMapGenerator生成映射文件的包名和位置
4.javaClientGenerator生成DAO的包名和位置
<table tableName="user" domainObjectName="User" mapperName="UserDAO" catalog="test">
</table>
tablename指定数据库表,domainObjectName指定数据对象类型,mapperName映射DAO类的名称,当多个数据库有同一个表时,需要用catalog指定数据库。
<table tableName="user" domainObjectName="User" mapperName="UserDAO"
catalog="test">
<property name="ignoreQualifiersAtRuntime" value="true"/>
</table>
可以解决自动生成文件的两个点的问题
3.实现分页查询和模糊查询
3.1.实现用来映射的DTO文件
package com.example.springboot1.dto;
import lombok.Data;
import org.springframework.stereotype.Component;
@Data
@Component
public class UserDTO {
private Integer id;
private String username;
private String password;
private String nickname;
private String phone;
private Integer age;
private Integer pageNum; //页码
private Integer startNum; //查询开始位置
private Integer pageSize; //每页条数
}
其中页码,查询开始位置,每页条数是用来分页的,前面的属性用来做数据库映射。
3.2.编写UserSpecDAO.xml文件
<select id="getUserByParam" resultType="User">
select *
from user
where 1=1
<if test="username != null">
and username like "%"#{username}"%"
</if>
<if test="nickname != null">
and username like "%"#{nickname}"%"
</if>
<if test="phone != null">
and phone = #{phone}
</if>
<if test="age != null">
and age = #{age}
</if>
limit #{startNum},#{pageSize}
</select>
3.3编写UserService接口
package com.example.springboot1.service;
import com.example.springboot1.dto.UserDTO;
import com.example.springboot1.model.User;
import java.util.List;
public interface UserService {
User login(User user);
int reg(User user);
// int update(User user);
List<User> getAllUser();
public List<UserDTO> getUserByParam(UserDTO userDTO);
}
3.4编写实现类方法
package com.example.springboot1.service.impl;
import com.example.springboot1.dao.UserDAO;
import com.example.springboot1.dao.UserSpecDAO;
import com.example.springboot1.dto.UserDTO;
import com.example.springboot1.model.User;
import com.example.springboot1.model.UserExample;
import com.example.springboot1.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class UserServiceImpl implements UserService {
@Autowired
UserSpecDAO userSpecDAO;
@Autowired
UserDAO userDAO;
@Autowired
UserDTO userDTO;
@Override
public User login(User user) {
List <User> users = userSpecDAO.login ( user );
return users.get ( 0 );
}
@Override
public int reg(User user) {
return userDAO.insertSelective ( user );
}
@Override
public List <User> getAllUser() {
UserExample userExample = new UserExample();
return userDAO.selectByExample(userExample);
}
@Override
public List <UserDTO> getUserByParam(UserDTO userDTO) {
userDTO.setStartNum((userDTO.getPageNum()-1)*userDTO.getPageSize());
return userSpecDAO.getUserByParam(userDTO);
}
/* @Override
public int update(User user) {
// System.out.println ( userDAO.updateByExample ( ) );
return userDAO.updateByPrimaryKey ( user );
}*/
}
3.5 编写UserSpecDAO接口
package com.example.springboot1.dao;
import com.example.springboot1.dto.UserDTO;
import com.example.springboot1.model.User;
import org.springframework.stereotype.Repository;
import java.util.List;
@Repository
public interface UserSpecDAO {
List<User> login(User user);
List<User> getAllUser();
List<UserDTO> getUserByParam(UserDTO userDTO);
}
3.6.crotroller层方法
@PostMapping("/getUserByParam")
@ResponseBody
public ResultModel getUserByParam(@RequestBody UserDTO userDTO){
//@RequestBody在形参中表示用来接收参数
if(null == userDTO.getPageNum()){
return ResultModel.error("页码必传");
}
if(null == userDTO.getPageSize()){
return ResultModel.error("长度必传");
}
return ResultModel.success(userService.getUserByParam(userDTO));
}
3.7.postman查询
附:目录结构: