å ¬ä¼å·æç´¢ï¼TestingStudio éæ ¼æ²å ¹æµè¯å¼åç干货é½å¾ç¡¬æ ¸
æ¬ç« ä»ç» Web å端å¼åä¸æ°æ®æä¹ åææ¯ TKMyBatisã
TKMyBatisç®ä»
TKMybatis æ¯åºäº Mybatis æ¡æ¶å¼åçä¸ä¸ªå·¥å ·ï¼å é¨å®ç°äºå¯¹å表çåºæ¬æ°æ®æä½ï¼åªéè¦ç®åç»§æ¿ TKMybatis æä¾çæ¥å£ï¼å°±è½å¤å®ç°æ éç¼åä»»ä½ sql å³è½å®æå表æä½ã
ä¸é¢ç®åä»ç»ä¸ MyBatis ï¼ MyBatis æ¯ä¸æ¬¾ä¼ç§çæä¹ å±æ¡æ¶ï¼å®æ¯æèªå®ä¹ SQLãåå¨è¿ç¨ä»¥åé«çº§æ å°ãMyBatis å é¤äºå ä¹ææç JDBC 代ç 以å设置åæ°åè·åç»æéçå·¥ä½ãMyBatis å¯ä»¥éè¿ç®åç XML æ注解æ¥é ç½®åæ å°åå§ç±»åãæ¥å£å Java POJOï¼Plain Old Java Objectsï¼æ®éèå¼ Java 对象ï¼ä¸ºæ°æ®åºä¸çè®°å½ã
详ç»å 容请åè https://mybatis.org/mybatis-3/zh/index.html
TKMyBatiså¿«éå¼å§
Mavenä¾èµ
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.0</version>
</dependency>
<dependency>
<groupId>tk.mybatis</groupId>
<artifactId>mapper</artifactId>
<version>4.0.3</version>
</dependency>
<dependency>
<groupId>tk.mybatis</groupId>
<artifactId>mapper-spring-boot-starter</artifactId>
<version>2.0.3</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
å¨å¯å¨ç±»ä¸é ç½® MapperScan æ«æ
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import tk.mybatis.spring.annotation.MapperScan;
@SpringBootApplication
@MapperScan("com.hogwartsmini.demo.dao")
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
å®ä½ç±»ä¸ä½¿ç¨
å¨å®ä½ç±»ä¸ï¼å¸¸ç¨ç注解åæä¹ä¸ºï¼
Tableï¼æè¿°æ°æ®åºè¡¨ä¿¡æ¯ï¼ä¸»è¦å±æ§æ name(表å)ãschemaãcatalogãuniqueConstraints çã
Idï¼æå®è¡¨ä¸»é®å段ï¼æ²¡æå±æ§å¼ã
Columnï¼æè¿°æ°æ®åºå段信æ¯ï¼ä¸»è¦å±æ§æ name(å段å)ãcolumnDefinitionãinsertableãlengthãnullable(æ¯å¦å¯ä¸ºç©º)ãprecisionãscaleãtableãuniqueãupdatable çã
ColumnTypeï¼æè¿°æ°æ®åºå段类åï¼å¯å¯¹ä¸äºç¹æ®ç±»åä½é ç½®ï¼è¿è¡ç¹æ®å¤çï¼ä¸»è¦å±æ§æ jdbcTypeãcolumnãtypeHandler çã
dao ä¸ä½¿ç¨
- å建ä¸å¡ Mapper å ¬å ±æ¥å£
é¦å å建ä¸ä¸ªå ¬å ±æ¥å£ï¼ç»§æ¿ Mapper, MySqlMapper, IdsMapper ä¸ä¸ªç±»ï¼ç¨äºåç»ä¸å¡ Mapper æ¥å£ç´æ¥å®ç°ã
import tk.mybatis.mapper.common.IdsMapper;
import tk.mybatis.mapper.common.Mapper;
import tk.mybatis.mapper.common.MySqlMapper;
public interface MySqlExtensionMapper<T> extends Mapper<T>, MySqlMapper<T>, IdsMapper<T> {
}
- å建ä¸å¡ Mapper æ¥å£
å建 HogwartsTestUserMapper.java æ¥å£
import com.hogwartsmini.demo.common.MySqlExtensionMapper;
import com.hogwartsmini.demo.entity.HogwartsTestUser;
import org.springframework.stereotype.Repository;
@Repository
public interface HogwartsTestUserMapper extends MySqlExtensionMapper<HogwartsTestUser> {
}
Service å±ä¸ä½¿ç¨
- æ°å¢æä½
ç±»å | 说æ |
Mapper.insert(record) | ä¿åä¸ä¸ªå®ä½ï¼null çå±æ§ä¹ä¼ä¿åï¼ä¸ä¼ä½¿ç¨æ°æ®åºé»è®¤å¼ |
Mapper.insertSelective(record) | ä¿åä¸ä¸ªå®ä½ï¼å¿½ç¥ç©ºå¼ï¼å³æ²¡æ交çå¼ä¼ä½¿ç¨ä½¿ç¨æ°æ®åºé»è®¤å¼ |
Mapper.insertUseGeneratedKeys(record) | ä¿åä¸ä¸ªå®ä½ï¼ä¼èªå¨å¡«å ¥å¨æ°æ®åºä¸çæç id å¼ã注æ使ç¨æ¤æ¹æ³æå ¥æ°æ®æ¶ï¼å¦æ id å段ä¸æ¯ AUTO_INCREMENT ,åä¸ä¼çææ°ç id |
- å é¤
ç±»å | 说æ |
Mapper.delete(record) | æ ¹æ®å®ä½å±æ§ä½ä¸ºæ¡ä»¶è¿è¡å é¤ï¼æ¥è¯¢æ¡ä»¶ä½¿ç¨çå· |
Mapper.deleteByExample(example) | æ ¹æ® Example æ¡ä»¶å é¤æ°æ® |
Mapper.deleteByPrimaryKey(key) | æ ¹æ®ä¸»é®å段è¿è¡å é¤ï¼æ¹æ³åæ°å¿ é¡»å å«å®æ´ç主é®å±æ§ |
- ä¿®æ¹
ç±»å | 说æ |
Mapper.updateByExample(record,example) | æ ¹æ® Example æ¡ä»¶æ´æ°å®ä½recordå å«çå ¨é¨å±æ§ï¼null å¼ä¼è¢«æ´æ° |
Mapper.updateByExampleSelective(record, example) | æ ¹æ® Example æ¡ä»¶æ´æ°å®ä½recordå å«çä¸æ¯ null çå±æ§å¼ |
Mapper.updateByPrimaryKey(record) | æ ¹æ®ä¸»é®æ´æ°å®ä½å ¨é¨å段ï¼null å¼ä¼è¢«æ´æ° |
Mapper.updateByPrimaryKeySelective(record) | æ ¹æ®ä¸»é®æ´æ°å±æ§ä¸ä¸º null çå¼ |
- æ¥è¯¢
ç±»å | 说æ |
Mapper.select(record) | æ ¹æ®å®ä½ä¸çå±æ§å¼è¿è¡æ¥è¯¢ï¼æ¥è¯¢æ¡ä»¶ä½¿ç¨çå· |
Mapper.selectAll() | æ¥è¯¢å ¨é¨ç»æ |
Mapper.selectByExample(example) | æ ¹æ® Example æ¡ä»¶è¿è¡æ¥è¯¢ |
Mapper.selectByPrimaryKey(key) | æ ¹æ®ä¸»é®å段è¿è¡æ¥è¯¢ï¼æ¹æ³åæ°å¿ é¡»å å«å®æ´ç主é®å±æ§ï¼æ¥è¯¢æ¡ä»¶ä½¿ç¨çå· |
Mapper.selectCount(record) | æ ¹æ®å®ä½ä¸çå±æ§æ¥è¯¢æ»æ°ï¼æ¥è¯¢æ¡ä»¶ä½¿ç¨çå· |
Mapper.selectCountByExample(example) | æ ¹æ® Example æ¡ä»¶è¿è¡æ¥è¯¢æ»æ° |
Mapper.selectByExample(example) | æ ¹æ® Example æ¡ä»¶è¿è¡æ¥è¯¢ |
Mapper.selectOne(record) | æ ¹æ®å®ä½ä¸çå±æ§è¿è¡æ¥è¯¢ï¼åªè½æä¸ä¸ªè¿åå¼ï¼æå¤ä¸ªç»ææ¯æåºå¼å¸¸ï¼æ¥è¯¢æ¡ä»¶ä½¿ç¨çå·ãä½æ¯å¦æåå¨æ个å±æ§ä¸º intï¼åä¼åå§å为 0ãå¯è½å½±åå°å®é ä½¿ç¨ |
Spring Boot é ç½®æ件
spring:
application:
name: aitest
#æ°æ®åºé
置信æ¯
datasource:
url: jdbc:mysql://localhost:3306/aitest_mini?allowMultiQueries=true&useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai
username: hogwarts
password: db@hogwarts
driver-class-name: com.mysql.cj.jdbc.Driver
mybatis:
mapper-locations: classpath:mapper/*.xml
type-aliases-package: com.hogwartstest.aitestmini.entity
configuration:
mapUnderscoreToCamelCase: true
logging:
level:
com.hogwartstest.aitestmini.dao: debug #æå°sql
示ä¾è¡¨ç»æ
CREATE TABLE `hogwarts_test_user` (
`id` int NOT NULL AUTO_INCREMENT COMMENT '主é®',
`user_name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT 'ç¨æ·å',
`password` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT 'å¯ç ',
`email` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT 'é®ç®±',
`auto_create_case_job_name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT 'èªå¨çæç¨ä¾jobå称 ä¸ä¸ºç©ºæ¶è¡¨ç¤ºå·²ç»å建job',
`start_test_job_name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT 'æ§è¡æµè¯jobå称 ä¸ä¸ºç©ºæ¶è¡¨ç¤ºå·²ç»å建job',
`default_jenkins_id` int DEFAULT NULL COMMENT 'é»è®¤Jenkinsæå¡å¨',
`create_time` datetime NOT NULL COMMENT 'å建æ¶é´',
`update_time` datetime NOT NULL COMMENT 'æ´æ°æ¶é´',
PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=12 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC COMMENT='ç¨æ·è¡¨';
Controller 代ç
import com.hogwartsmini.demo.entity.HogwartsTestUser;
import com.hogwartsmini.demo.service.HogwartsTestUserService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
* @Author tlibn
* @Date 2020/7/16 17:14
**/
@Api(tags = "éæ ¼æ²å
¹æµè¯å¦é¢-ç¨æ·ç®¡ç模å")
@RestController
@RequestMapping("hogwartsUser")
public class HogwartsTestUserDbController {
@Autowired
private HogwartsTestUserService hogwartsTestUserService;
@ApiOperation("ç¨æ·æ³¨å")
@PostMapping("register")
public HogwartsTestUser register(
@RequestBody HogwartsTestUser hogwartsTestUser){
return hogwartsTestUserService.save(hogwartsTestUser);
}
@ApiOperation("ç¨æ·ä¿¡æ¯ä¿®æ¹æ¥å£")
@PutMapping()
public HogwartsTestUser updateUserInfo(
@RequestBody HogwartsTestUser hogwartsTestUser){
return hogwartsTestUserService.update(hogwartsTestUser);
}
@ApiOperation("æ ¹æ®ç¨æ·idå é¤ç¨æ·ä¿¡æ¯")
@DeleteMapping("{userId}")
public Integer delete(@PathVariable("userId") Integer userId){
return hogwartsTestUserService.delete(userId);
}
@ApiOperation("æ ¹æ®ç¨æ·åæ¥è¯¢")
@GetMapping("byName")
public List<HogwartsTestUser> getByName(
@RequestParam("userName") String userName){
HogwartsTestUser hogwartsTestUser = new HogwartsTestUser();
hogwartsTestUser.setUserName(userName);
return hogwartsTestUserService.getByName(hogwartsTestUser);
}
HogwartsTestUserService 代ç
import com.hogwartsmini.demo.entity.HogwartsTestUser;
import java.util.List;
public interface HogwartsTestUserService {
/**
* ä¿å
* @param hogwartsTestUser
* @return
*/
HogwartsTestUser save(HogwartsTestUser hogwartsTestUser);
/**
* æ´æ°
* @param hogwartsTestUser
* @return
*/
HogwartsTestUser update(HogwartsTestUser hogwartsTestUser);
/**
* æ ¹æ®ç¨æ·åæ¥è¯¢
* @param hogwartsTestUser
* @return
*/
List<HogwartsTestUser> getByName(HogwartsTestUser hogwartsTestUser);
/**
* æ ¹æ®ç¨æ·idå é¤ç¨æ·ä¿¡æ¯
* @param userId
* @return
*/
Integer delete(Integer userId);
}
HogwartsTestUserServiceImpl 代ç
import com.hogwartsmini.demo.dao.HogwartsTestUserMapper;
import com.hogwartsmini.demo.entity.HogwartsTestUser;
import com.hogwartsmini.demo.service.HogwartsTestUserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.Date;
import java.util.List;
/**
* @Author tlibn
* @Date 2020/7/17 11:03
**/
@Service
public class HogwartsTestUserServiceImpl implements HogwartsTestUserService {
@Autowired
private HogwartsTestUserMapper hogwartsTestUserMapper;
/**
* ä¿å
*
* @param hogwartsTestUser
* @return
*/
@Override
public HogwartsTestUser save(HogwartsTestUser hogwartsTestUser) {
hogwartsTestUser.setCreateTime(new Date());
hogwartsTestUser.setUpdateTime(new Date());
hogwartsTestUserMapper.insertUseGeneratedKeys(hogwartsTestUser);
return hogwartsTestUser;
}
/**
* æ´æ°
*
* @param hogwartsTestUser
* @return
*/
@Override
public HogwartsTestUser update(HogwartsTestUser hogwartsTestUser) {
hogwartsTestUser.setCreateTime(new Date());
hogwartsTestUser.setUpdateTime(new Date());
hogwartsTestUserMapper.updateByPrimaryKeySelective(hogwartsTestUser);
return hogwartsTestUser;
}
/**
* æ ¹æ®ç¨æ·åæ¥è¯¢
*
* @param hogwartsTestUser
* @return
*/
@Override
public List<HogwartsTestUser> getByName(HogwartsTestUser hogwartsTestUser) {
List<HogwartsTestUser> hogwartsTestUserList = hogwartsTestUserMapper.select(hogwartsTestUser);
return hogwartsTestUserList;
}
/**
* æ ¹æ®ç¨æ·idå é¤ç¨æ·ä¿¡æ¯
*
* @param userId
* @return
*/
@Override
public Integer delete(Integer userId) {
HogwartsTestUser hogwartsTestUser = new HogwartsTestUser();
hogwartsTestUser.setId(userId);
hogwartsTestUserMapper.delete(hogwartsTestUser);
return userId;
}
}
ä½¿ç¨ Postman æµè¯å¢å æ¹æ¥
- æ°å¢
POST http://127.0.0.1:8081/hogwartsUser/register
请æ±åæ°
{ "userName": "éæ ¼æ²å
¹test123", "password": "test123"}
ååºåæ°
{
"id": 15,
"userName": "éæ ¼æ²å
¹test123",
"password": "test123",
"email": null,
"autoCreateCaseJobName": null,
"startTestJobName": null,
"defaultJenkinsId": null,
"createTime": "2021-04-14T09:37:58.358+00:00",
"updateTime": "2021-04-14T09:37:58.358+00:00"
}
- æ¥è¯¢
GET http://127.0.0.1:8081/hogwartsUser/byName?userName=éæ ¼æ²å ¹test123
请æ±åæ°
è§è¯·æ±å°åä¸ userName =éæ ¼æ²å
¹test123
ååºåæ°
[
{
"id": 15,
"userName": "éæ ¼æ²å
¹test123",
"password": "test123",
"email": null,
"autoCreateCaseJobName": null,
"startTestJobName": null,
"defaultJenkinsId": null,
"createTime": "2021-04-14T09:37:58.000+00:00",
"updateTime": "2021-04-14T09:37:58.000+00:00"
}
]
- ä¿®æ¹
PUT http://127.0.0.1:8081/hogwartsUser
请æ±åæ°
{
"id": 15,
"userName": "éæ ¼æ²å
¹test12345",
"password": "test123"
}
ååºåæ°
{
"id": 15,
"userName": "éæ ¼æ²å
¹test12345",
"password": "test123",
"email": null,
"autoCreateCaseJobName": null,
"startTestJobName": null,
"defaultJenkinsId": null,
"createTime": "2021-04-14T09:43:45.018+00:00",
"updateTime": "2021-04-14T09:43:45.018+00:00"
}
- å é¤
DELETE http://127.0.0.1:8081/hogwartsUser/15
请æ±åæ°
è§è¯·æ±å°åä¸15
ååºåæ°
15
æ°æ®æä¹ åææ¯å°±å 讲å°è¿éå¦~大家è¦å¤ç»ä¹ å¦ï¼æè½å¦çæ´æå®ã