编写文档

This commit is contained in:
lhc
2021-02-07 15:41:10 +08:00
parent 6f2985e47a
commit 4dd60a9218
16 changed files with 1003 additions and 24 deletions

View File

@@ -5,10 +5,9 @@ const themeConfig = require('./config/themeConfig.js');
module.exports = {
// theme: 'vdoing', // 使用依赖包主题
theme: require.resolve('../../theme-vdoing'), // 使用本地主题
title: "HCFrame",
description: '通用框架组件',
// base: '/', // 格式:'/<仓库名>/' 默认'/'
base: '/doc/', // 格式:'/<仓库名>/' 默认'/'
markdown: {
lineNumbers: true, // 代码行号
},

View File

@@ -55,30 +55,30 @@ module.exports = {
// name: 'Evan Xu',
// slogan: '前端界的小学生',
// },
social: {
// 社交图标,显示于博主信息栏和页脚栏
// iconfontCssFile: '//at.alicdn.com/t/font_1678482_u4nrnp8xp6g.css', // 可选阿里图标库在线css文件地址对于主题没有的图标可自由添加
icons: [
{
iconClass: 'icon-youjian',
title: '发邮件',
link: 'mailto:894072666@qq.com',
},
{
iconClass: 'icon-github',
title: 'GitHub',
link: 'https://github.com/xugaoyi',
},
{
iconClass: 'icon-erji',
title: '听音乐',
link: 'https://music.163.com/#/playlist?id=755597173',
},
],
},
// social: {
// // 社交图标,显示于博主信息栏和页脚栏
// // iconfontCssFile: '//at.alicdn.com/t/font_1678482_u4nrnp8xp6g.css', // 可选阿里图标库在线css文件地址对于主题没有的图标可自由添加
// icons: [
// {
// iconClass: 'icon-youjian',
// title: '发邮件',
// link: 'mailto:894072666@qq.com',
// },
// {
// iconClass: 'icon-github',
// title: 'GitHub',
// link: 'https://github.com/xugaoyi',
// },
// {
// iconClass: 'icon-erji',
// title: '听音乐',
// link: 'https://music.163.com/#/playlist?id=755597173',
// },
// ],
// },
footer: {
// 页脚信息
createYear: 2019, // 博客创建年份
createYear: 2021, // 博客创建年份
copyrightInfo:
'Haocheng Liu | MIT License</a>', // 博客版权信息支持a标签
},

View File

@@ -39,4 +39,22 @@ module.exports = [
},
],
},
{
text: '后台',
link: '/java/', //目录页链接此处link是vdoing主题新增的配置项有二级导航时可以点击一级导航跳到目录页
items: [
// 说明以下所有link的值只是在相应md文件定义的永久链接不是什么特殊生成的编码。另外注意结尾是有斜杠的
{
text: '概要',
link: '/pages/b017cf/',
},{
text: '通用数据平台',
link: '/pages/ca1baf/',
}
],
},
{
text: '旧版本文档',
link: 'http://taixingyiji.tk:5677'
}
]

View File

@@ -0,0 +1,16 @@
---
pageComponent:
name: Catalogue
data:
key: 03.后台
imgUrl: /img/other.png
description: 前端框架使用说明
title: 后台
date: 2020-03-11 21:50:53
permalink: /java
sidebar: false
article: false
comment: false
editLink: false
---

View File

@@ -0,0 +1,24 @@
---
title: 简介
date: 2021-02-03 09:26:32
permalink: /pages/b017cf/
---
# 简介
::: tip
后台项目基于[SpringBoot](https://spring.io/projects/spring-boot/)+[Mybatis](https://mybatis.org/mybatis-3/zh/index.html)+[Shiro](http://shiro.apache.org/)+[Druid](https://github.com/alibaba/druid/)开发
:::
## 前序准备
1. 你需要在本地安装 [maven](http://maven.apache.org/index.html) 、 [java1.8](https://adoptopenjdk.net/)及支持[Springboot](https://spring.io/projects/spring-boot/) 的编译器,如: [IDEA](https://www.jetbrains.com/zh-cn/idea/promo/?utm_source=baidu&utm_medium=cpc&utm_campaign=cn-bai-br-intellij-ex-pc&utm_content=intellij-core&utm_term=idea) ,[STS](https://spring.io/tools) ,[Eclipse](https://www.eclipse.org/downloads/) , [Vscode](https://code.visualstudio.com/) 等。
2. 需要在编译器上安装[Lombok](https://projectlombok.org/)插件,安装方法请根据你使用的编译器自行查找。
3. 本项目技术栈基于 [SpringBoot](https://spring.io/projects/spring-boot/)+[Mybatis](https://mybatis.org/mybatis-3/zh/index.html)+[Shiro](http://shiro.apache.org/)+[Druid](https://github.com/alibaba/druid/)+[tkMybatis](https://github.com/abel533/Mapper) ,提前了解和学习这些知识会对使用本项目有很大的帮助。
::: warning 注意
使用此项目前,请确认已经阅读过项目[***指南***](/guide)中的全部内容,如果还未阅读,请[***点击此处***](/guide)阅读指南内容。
:::

View File

@@ -0,0 +1,33 @@
---
title: 目录结构
date: 2021-02-03 09:26:32
permalink: /pages/9a02b5/
---
# 目录结构
本项目已经为你生成了一个完整的开发框架,提供了涵盖后台开发的各类功能和坑位,下面是整个项目的目录结构。
```bash
├── lib # 用于存放maven仓库不包含的第三方的jar包
├── src # 源代码
│   ├── java.com.common.common # java代码
│  │  ├── annotation # 注解
│  │  ├── common # 通用类
│  │  ├── config # 配置类
│  │  ├── controller # 控制器
│  │  ├── dao # dao层
│  │  ├── entity # 实体类
│  │  ├── service # 业务层
│  │  │  └── impl # 业务层实现
│  │  └── utils # 工具类
│   └── resources # 静态资源及配置XML
│    ├── mapping # dao层对应sql配置文件
│    ├── static # 静态资源
│    ├── templates # 静态页面
│    ├── application.yml # SpringBoot配置文件
│    ├── common.sql # 框架初始化sql
│    ├── banner.txt # 启动图标
│    └──generatorConfig.xml # mybatis generator配置文件
├── .gitignore # 使git忽略上传文件的配置文件
└── pom.xml # maven依赖配置
```

View File

@@ -0,0 +1,53 @@
---
title: 如何设置以及启动项目
date: 2021-02-03 09:26:32
permalink: /pages/de6b74/
---
# 如何设置以及启动项目
## 启动
```bash
# 通过启动类运行
```
## 打包
```bash
mvn clean package
```
## war包部署
```bash
# 放入服务器如tomcat等后启动服务器
```
## jar包部署
```bash
# 将jar包上传服务器后执行
nohup java -jar common.jar > common.txt &
```
## 停止服务(服务器版本)
```bash
# 此处用tomcat服务器举例
cd tomcat
./bin/shutdown.sh
```
## 停止服务jar包版本
```bash
# 查看java进程
jps -l
# 结束进程
kill -9 {pid}
```

View File

@@ -0,0 +1,31 @@
---
title: 通用数据平台简介
date: 2021-02-03 17:27:29
permalink: /pages/ca1baf/
---
## 前言
通用数据平台,是为了减少代码及业务修改,而实现的数据访问层的封装。
基于Mybatis并实现了多数据源同时也完全支持mybatis的原生写法。
实现了通用接口等方法,尽量减少开发者的工作量。
自动判断自增类型,自动识别是数据库自增还是通过序列自增
如果通过序列自增,保存方法会自动创建相关序列,使开发者更加专注于业务开发。
## 更新日志
### 2020-02-03
1. 通用数据平台基于Mybatis
2. 实现了多数据源配置,动态数据源切换,动态数据源关闭
3. 通用Mapper不在依赖于Mvc模式支持连表查询
4. 支持原生Mybatis写法
5. 支持乐观锁
6. 支持逻辑删除
7. 实现了通用接口,可完成增删改查,关联查询,逻辑删除,乐观锁
8. 增加了缓存管理器
9. 自动判断自增类型(通过数据库自增,或通过序列自增)
10.

View File

@@ -0,0 +1,64 @@
---
title: win10环境下安装Sqlite3
date: 2021-02-04 10:06:49
permalink: /sql/sqlitebuild
meta:
- name: description
content: win10环境下安装Sqlite3
- name: keywords
content: windows,搭建,sqlite,安装,64为,win10
categories:
- sqlite
tags:
- sqlite
---
# win10环境下安装Sqlite3
![SQLite370.svg](https://cdn.jsdelivr.net/gh/taixingyiji/image_store@main/blog/20210204100907.png)
<!-- more -->
::: tip
由于框架多数据源采用sqlite3进行数据持久化
所以需要安装sqlite3
MacOS系统和Linux系统已经自带sqlite3可以跳过此部分
win10用户请按照步骤进行安装
:::
## 一、下载sqlite
1. 打开官网[https://www.sqlite.org/download.html](https://www.sqlite.org/download.html)
2. 下载**sqlite3** winodows版本记得根据操作系统下载32位或64位且不管操作系统什么版本都必须下载 `sqlite-tools-win32-x86-3340100.zip`
![image-20210204095852278](https://cdn.jsdelivr.net/gh/taixingyiji/image_store@main/blog/20210204095852.png)
## 二、解压
解压下载好的文件此处我用的是64位的包。
`sqlite-dll-win64-x64-3340100.zip``sqlite-tools-win32-x86-3340100.zip` 中的内容
复制到 `C:\Program Files\sqlite`
![image-20210204100251983](https://cdn.jsdelivr.net/gh/taixingyiji/image_store@main/blog/20210204100252.png)
## 三、配置环境变量
打开系统环境变量,在 `PATH` 变量下新增一条数据,填写 `C:\Program Files\sqlite`
![image-20210204100417697](https://cdn.jsdelivr.net/gh/taixingyiji/image_store@main/blog/20210204100417.png)
## 四、校验是否安装成功
打开系统命令提示符
输入 `sqlite3`
![image-20210204100525522](https://cdn.jsdelivr.net/gh/taixingyiji/image_store@main/blog/20210204100525.png)
出现如上结果则说明安装成功

View File

@@ -0,0 +1,50 @@
---
title: 发布基础包
date: 2021-02-03 17:29:59
permalink: /pages/351f54/
---
# 发布基础包
## 一、下载基础包
通过git下载基础包
```bash
git clone http://taixingyiji.synology.me:1010/common-frame/common-base.git
```
## 二、发布数据库驱动
通过终端进入当前基础包的文件夹
1.`oracle`数据库驱动发布到 **本地** `maven`仓库
```bash
mvn install:install-file -Dfile=lib/ojdbc6.jar -DgroupId=com.oracle -DartifactId=ojdbc6 -Dversion=11.2.0.4 -Dpackaging=jar
```
2. 将达梦数据库驱动发布到 **本地** `maven`仓库
```bash
mvn install:install-file -Dfile=lib/Dm7JdbcDriver18.jar -DgroupId=com.dm -DartifactId=Dm7JdbcDriver -Dversion=1.8 -Dpackaging=jar
```
::: warning
若终端提示错误,请检查
maven仓库在系统的环境变量是否正确
:::
## 三、发布基础包
执行命令
```bash
mvn install
```
此时基础包已经发布到本地的maven仓库中

View File

@@ -0,0 +1,101 @@
---
title: 配置数据源
date: 2021-02-04 16:32:52
permalink: /pages/1c8b75/
---
# 配置数据源
## 一、检查pom.xml文件
检查在编译器中 `pom.xml` 已经可以正确读取基础包依赖,且不报错,`pom.xml` 中基础包内容如下
```xml
<dependencies>
<dependency>
<groupId>com.common.base</groupId>
<artifactId>base</artifactId>
<version>1.1.0-beta1</version>
</dependency>
</dependencies>
```
## 二、导入sql文件
在你需要配置的数据源中导入**Sql文件**
数据库名自定,编码集用 `utf8` ,集合用 `utf8_bin`
**Sql文件** 位于项目中 `resources` 目录下
## 三、配置Sqlite文件地址
打开 `resources > application.yml` 文件
找到数据源配置,将 `url` 参数改为你电脑上的参数,注意,此处需要填写绝对路径。
```yaml
datasource:
druid:
# 配置sqlite文件路径需要填写绝对路径推荐将sqlite文件放入到服务器上而非程序jar包或war包中
driver-class-name: org.sqlite.JDBC
url: jdbc:sqlite:/Volumes/DATA/ideaProject/common-frame/common/src/main/resources/datasource.db
```
## 四、启动项目
启动项目,查看日志得到如下日志则启动成功
```java
2021-02-04 16:42:09 - [main] - INFO - c.c.b.m.d.u.DataSourceUtil- initDataSource:92 : 数据源Token为kAV20ASkVEnD32lyNe4Q
2021-02-04 16:42:09 - [main] - INFO - c.c.c.c.c.CommandLineRunnerImpl- run:50 : start success
```
记录日志中出现的 **Token** ,此处日志展示为 **kAV20ASkVEnD32lyNe4Q**
## 五、Token登录系统
访问你的项目地址根目录,此处我的访问地址为 [http://localhost:8080/common/](http://localhost:8080/common/)
其中后面的 `common``resources > application.yml` 文件中配置的参数具体如下
```yaml
server:
port: 8080
servlet:
# 此处配置端口后的地址
context-path: /common
```
访问后我们可以看到如下页面
![image-20210204164953567](https://cdn.jsdelivr.net/gh/taixingyiji/image_store@main/blog/20210204165100.png)
填写刚刚在控制台看到的 **Token** ,此处填写的是 **kAV20ASkVEnD32lyNe4Q**
## 六、配置数据源
输入**Token** 校验成功后会跳转到如下页面,输入对应参数即可
每个参数后面都有说明,鼠标停留即可查看相关说明
![image-20210204165326338](https://cdn.jsdelivr.net/gh/taixingyiji/image_store@main/blog/20210204165326.png)
输入完成后点击测试连接,测试连接通过后即可保存连接,然后跳转到登录页
![image-20210204165502873](https://cdn.jsdelivr.net/gh/taixingyiji/image_store@main/blog/20210204165502.png)
点击登录即可成功跳转到主页
![image-20210204165529331](https://cdn.jsdelivr.net/gh/taixingyiji/image_store@main/blog/20210204165529.png)
至此,数据源配置完成,可以开始开发了
::: warning
上述所有配置均为第一次没有添加数据源的情况
若已经添加数据源,但数据源无法访问的时候
可以在启动项目访问此链接[http://localhost:8080/common/#/dataInit](http://localhost:8080/common/#/dataInit),进行默认数据源重置
:::

View File

@@ -0,0 +1,54 @@
---
title: 开始使用
date: 2021-02-03 17:08:38
permalink: /pages/e59b37/
---
# 开始使用
## 在代码中引入BaseMapper
### 一、常用方式
```java
package com.common.common.module.app.service.impl;
import com.common.base.module.data.module.BaseMapper;
import com.common.base.module.data.module.BaseMapperImpl;
import com.common.common.module.app.service.TestService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Service;
@Service
public class TestServiceImpl implements TestService {
@Autowired
@Qualifier(BaseMapperImpl.BASE)
BaseMapper baseMapper;
}
```
### 二、建议方式
新版本 ***Spring*** 不建议使用字段注入
所以如下方式也可以注入`bean` 代码效果与上面一致,建议使用下述方式注入 `bean`
```java
package com.common.common.module.app.service.impl;
import com.common.base.module.data.module.BaseMapper;
import com.common.base.module.data.module.BaseMapperImpl;
import com.common.common.module.app.service.TestService;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Service;
@Service
public class TestServiceImpl implements TestService {
final
BaseMapper baseMapper;
public TestServiceImpl(@Qualifier(BaseMapperImpl.BASE) BaseMapper baseMapper) {
this.baseMapper = baseMapper;
}
}
```
引入后,就可以调用数据库进行增删改查了。

View File

@@ -0,0 +1,52 @@
---
title: 实体类
date: 2021-02-05 10:04:43
permalink: /pages/ca6799/
---
# 实体类
`BaseMapper` 也支持实体类的传入方式,需要加上注解
在主键上添加 `@Id` 注解,需要在类上方添加 `@Table` 注解,并填写表名在参数 `name`
实体类字段必须为驼峰命名法且与数据库对应,例如 实体类中`userId` 对应数据库中为 `USER_ID`
如果非数据库字段需要添加注解 `@DataIgnore`
数据库中所有的字段必须大写
示例如下
```java
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;
import java.io.Serializable;
import java.util.List;
import com.common.base.module.data.annotation.DataIgnore;
@NoArgsConstructor
@AllArgsConstructor
@Builder(toBuilder = true)
@Data
@Table(name = "FT_USER")
public class FtUser implements Serializable {
private static final long serialVersionUID = -1043846202777180979L;
@Id
private Integer userId;
private String password;
private String userName;
@DataIgnore
private String noDataBaseField;
}
```

View File

@@ -0,0 +1,256 @@
---
title: DataMap
date: 2021-02-05 10:50:28
permalink: /pages/70e14e/
---
# DataMap
## 一、前言
`DataMap` 是BaseMapper规定的一种数据结构类型
`DataMap` 可以用于BaseMapper中的所有数据库操作场景
希望使用者可以掌握 `DataMap` 的操作方式
当然不使用 `DataMap` 方式同样也可以快速上手 `BaseMapper`
## 二、使用要求
在使用 `DataMap` 的时候需要使用者考虑好当前操作需要的参数及字段
当然,如果使用者缺少部分参数或字段,框架会通过异常的方式提示使用者
但是最好在系统异常提示前,就将参数写好,这样就可以通过 `DataMap` 进行快速开发
::: warning
所有的数据库操作,都必须在 `DataMap` 中设置好表名和主键名
部分操作还需要设置主键值ids和 idList等操作。
:::
## 三、参数说明
```java
// 需要更新或保存的数据
private Map<String, Object> data = new HashMap();
// 主键以逗号隔开的值123
private String ids;
// 主键以list方式传入的值
private List<String> idList;
// 表名
private String tableName;
// 主键名
private String pkName;
// 主键值
private Object pkValue;
// 字段默认值
private String fields = "*";
// 字段列表
private List<String> fieldList;
// 子数据
private String subData;
// selectSql 此字段可通过SelectCondition生成
private String selectSql;
// SELECT sql生成器
private SelectCondition selectCondition;
// 实体类
private T obj;
```
## 四、开始使用
### 1. tableName && pkName (设置表名及主键)
设置表名及主键的方式有三种
* 通过DataMap设置主键及表名
```java
DataMap<Object> dataMap = DataMap.builder()
.tableName("FT_USER")
.pkName("USER_ID")
.build();
```
* 通过 `OsSysTable` 设置主键及表名
```java
OsSysTable osSysTable = OsSysTable
.builder()
.tableName("FT_USER")
.tablePk("USER_ID")
.build();
DataMap<Object> dataMap = DataMap.builder()
.sysOsTable(osSysTable)
.build();
```
* 通过实体类设置主键和表名
实体类需要按照上一章来设置,需要将 `@Id` 放到主键字段上,将 `@Table(name = "表名")` 放到实体类上
实体类的字段会自动填充到 `DataMap` 字段中,非数据库字段,需要在实体类字段上需要加注解 `@DataIgnore`
```java
FtUser ftUser = FtUser.builder().build();
DataMap<Object> dataMap = DataMap.builder()
.obj(ftUser)
.build();
```
### 2. data (设置需要保存或者更新的数据)
* 通过 `map` 形式设置
```java
Map<String, Object> map = new HashMap<>();
map.put("USER_NAME", "张三");
map.put("PASSWORD", "654321");
DataMap<Object> dataMap = DataMap.builder()
.data(map)
.build();
```
* 通过 `add` 方法设置数据
```java
DataMap<Object> dataMap = DataMap.builder()
.add("USER_NAME","张三")
.add("PASSWORD","张三")
.build();
```
* 通过实体类方式设置数据
实体方式会自动将实体类数据,主键和表名赋给 `DataMap`
```java
FtUser ftUser = FtUser
.builder()
.username("张三")
.password("123456")
.build();
DataMap<Object> dataMap = DataMap.builder()
.obj(ftUser)
.build();
```
### 3. ids (主键以逗号隔开的形式)
```java
DataMap<Object> dataMap = DataMap.builder()
.ids("1,2,3")
.build();
```
当将多个主键通过上述方式赋给 `DataMap` 时,我们可以通过 `getIdList()` 方法获取 `List<String>` 类型得主键list
```java
// 获取list
List<String> idList = dataMap.getIdList();
// idList 结果
["1","2","3"]
```
### 4. fields (字段列表)
`ids`类似,同样为逗号隔开,设置好后可以通过 `getFieldList()` 获取得到字段的list
### 5. 其他参数
其他参数可以通过正常的 `set` 方法和 `get` 方法进行获取和设置
也可以通过 `builder()``toBuilder()` 方法进行设置和修改
## 五、使用示例
此处只展示调用的保存示例,其余规则会写在每个文档中。
### 1. 实体类保存
```java
FtUser ftUser = FtUser.builder().userName("张三").password("123456").build()
DataMap<FtUser> dataMap = DataMap.<FtUser>builder().obj(ftUser).build();
baseMapper.save(dataMap);
```
### 2. 非实体类保存
* 方法一
```java
DataMap<Object> dataMap=DataMap
.builder()
// 设置表名
.tableName("FT_USER")
// 设置主键
.pkName("USER_ID")
// 设置需要新增的字段及内容
.add("USER_NAME","张三")
.add("PASSWORD","123456")
.build();
baseMapper.save(dataMap);
```
* 方法二
```java
// 设置新增字段及内容
Map<String, Object> map=new HashMap<>();
map.put("USER_NAME","张三");
map.put("PASSWORD","123456");
DataMap<Object> dataMap=DataMap
.builder()
// 设置表名
.tableName("FT_USER")
// 设置主键
.pkName("USER_ID")
// 设置保存内容
.data(map)
.build();
baseMapper.save(dataMap);
```
* 方法三
```java
OsSysTable osSysTable = OsSysTable
.builder()
.tableName("FT_USER")
.tablePk("USER_ID")
.build();
// 设置新增字段及内容
DataMap<Object> dataMap = DataMap
.builder()
// 设置表名及字段
.sysOsTable(osSysTable)
.add("USER_NAME","张三")
.add("PASSWORD","123456")
.build();
baseMapper.save(dataMap);
```
* 方法四
```java
Map<String, Object> map = new HashMap<>();
map.put("USER_NAME", "张三");
map.put("PASSWORD", "123456");
OsSysTable osSysTable = OsSysTable
.builder()
.tableName("FT_USER")
.tablePk("USER_ID")
.build();
// 设置新增字段及内容
DataMap<Object> dataMap = DataMap
.builder()
// 设置表名及字段
.sysOsTable(osSysTable)
.data(map)
.build();
baseMapper.save(dataMap);
```

View File

@@ -0,0 +1,54 @@
---
title: save操作
date: 2021-02-04 17:25:01
permalink: /pages/9d6c92/
---
# Save操作
::: tip
Save操作会自动判断自增类型自动识别是数据库自增还是通过序列自增
如果通过序列自增,保存方法会自动创建相关序列,使开发者更加专注于业务开发。
如果保存失败会自动抛出异常,无需开发者做异常处理
:::
## 一、通用保存
```java
// 设置新增字段及内容
Map<String, Object> map = new HashMap<>();
map.put("USER_NAME","张三");
map.put("PASSWORD", "123456");
// 表名
String tableName = "FT_USER";
// 主键
String pkName = "USER_ID";
baseMapper.save(tableName,pkName,map);
```
## 二、实体类保存
```java
FtUser ftUser = FtUser.builder().userName("张三").password("123456").build()
baseMapper.save(ftUser);
```
## 三、DataMap保存
::: warning 参数约束
1. **tableName** 不能为空
2. **tablePk** 不能为空
3. **data** 不能为空
:::
```java
baseMapper.save(dataMap);
```

View File

@@ -0,0 +1,174 @@
---
title: update操作
date: 2021-02-05 08:58:56
permalink: /pages/216aa8/
---
# update操作
## 一、updateByPk (根据主键更新)
### 1. 通用操作
```java
// 更新的数据
Map<String, Object> map = new HashMap<>();
map.put("USER_NAME","张三");
map.put("PASSWORD", "654321");
map.put("USER_ID", 1);
// 表名
String tableName = "FT_USER";
// 主键
String pkName = "USER_ID";
baseMapper.updateByPk(tableName, pkName, map);
```
### 2. 实体类
```java
FtUser ftUser = FtUser.builder().userName("张三").password("123456").build()
baseMapper.updateByPk(ftUser);
```
### 3. DataMap操作
## 二、updateInPk根据主键批量更新
### 1. 通用操作
```java
// 需要更新的主键值
List<Integer> idList = new ArrayList<>();
idList.add(1);
idList.add(2);
idList.add(3);
// 需要更新的字段
Map<String, Object> map = new HashMap<>();
map.put("PASSWORD", "654321");
// 表名
String tableName = "FT_USER";
// 主键
String pkName = "USER_ID";
baseMapper.updateInPk(tableName,pkName,idList,map);
```
### 2. 实体类
```java
// 需要更新的主键值
List<Integer> idList = new ArrayList<>();
idList.add(1);
idList.add(2);
idList.add(3);
// 需要更新的字段
FtUser ftUser = FtUser.builder().password("123456").build();
baseMapper.updateInPk(ftUser,idList);
```
### 3. DataMap 操作
#### a.实体类
* 方法一
```java
FtUser ftUser = FtUser.builder().password("654321").build();
// 需要更新的主键值
List<String> idList = new ArrayList<>();
idList.add("1");
idList.add("2");
idList.add("3");
DataMap<Object> dataMap = DataMap
.builder()
.obj(ftUser)
// 主键值
.idList(idList)
.build();
// 需要更新的字段
baseMapper.updateInPk(dataMap);
```
* 方法二
```java
FtUser ftUser = FtUser.builder().password("654321").build();
DataMap<Object> dataMap = DataMap
.builder()
.obj(ftUser)
// 主键值
.ids("1,2,3")
.build();
// 需要更新的字段
baseMapper.updateInPk(dataMap);
```
#### b.非实体类
* 方法一
```java
// 更新数据
Map<String, Object> map = new HashMap<>();
map.put("PASSWORD", "654321");
DataMap<Object> dataMap = DataMap
.builder()
// 更新数据
.data(map)
// 表名
.tableName("FT_USER")
// 主键名
.pkName("USER_ID")
// 主键值
.ids("1,2,3")
.build();
// 需要更新的字段
baseMapper.updateInPk(dataMap);
```
* 方法二
```java
// 需要更新的主键值
List<String> idList = new ArrayList<>();
idList.add("1");
idList.add("2");
idList.add("3");
// 更新数据
Map<String, Object> map = new HashMap<>();
map.put("PASSWORD", "654321");
DataMap<Object> dataMap = DataMap
.builder()
// 更新数据
.data(map)
// 表名
.tableName("FT_USER")
// 主键名
.pkName("USER_ID")
// 主键值
.idList(idList)
.build();
// 需要更新的字段
baseMapper.updateInPk(dataMap);
```
* 方法三
```java
// 需要更新的主键值
List<String> idList = new ArrayList<>();
idList.add("1");
idList.add("2");
idList.add("3");
DataMap<Object> dataMap = DataMap
.builder()
// 更新数据
.add("PASSWORD","654321")
// 表名
.tableName("FT_USER")
// 主键名
.pkName("USER_ID")
// 主键值
.idList(idList)
.build();
// 需要更新的字段
baseMapper.updateInPk(dataMap);
```