SpringBoot整合JOOQ例子(二)
生活随笔
收集整理的這篇文章主要介紹了
SpringBoot整合JOOQ例子(二)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
上一篇講了配置,這篇做了一個例子,和大家共享一下。
項目Demo地址:https://github.com/shileishmily/spring-boot-jooq-demo
1、抽象DAO
package com.suixingpay.jooq;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
import com.suixingpay.jooq.constants.SystemConst;
import org.apache.commons.collections.CollectionUtils;
import org.jooq.DSLContext;
import org.jooq.Table;
import org.jooq.UpdatableRecord;
import org.jooq.impl.UpdatableRecordImpl;
import org.springframework.beans.factory.annotation.Autowired;
import java.sql.Timestamp;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.stream.IntStream;
public abstract class BaseDao<R extends UpdatableRecordImpl> implements SystemConst {
@Autowired
protected DSLContext dsl;
private static final String FIELD_ID = "id";
private static final String FIELD_CREATE_TIME = "create_time";
private static final String FIELD_DEL_FLAG = "del_flag";
private static final Map<String, Byte> DEL_MAPPER = ImmutableMap.of(FIELD_DEL_FLAG, DEL);
/**
* Description:table
*
* @return table
*/
public abstract Table<R> table();
public R newRecord() {
return dsl.newRecord(table());
}
public R newRecord(Object object) {
return dsl.newRecord(table(), object);
}
public R get(long id) {
return dsl.selectFrom(table()).where(" id=? ", id).fetchAny();
}
public List<R> get(Collection<Long> ids) {
if (CollectionUtils.isEmpty(ids)) {
return ImmutableList.of();
}
StringBuilder sql = new StringBuilder(" id in (");
String pattern = IntStream.range(0, ids.size()).mapToObj(i -> "?").reduce((s1, s2) -> s1 + "," + s2).orElse("");
sql.append(pattern).append(")");
return dsl.selectFrom(table()).where(sql.toString(), ids.toArray()).fetch();
}
public List<R> findAllValid() {
return dsl.selectFrom(table()).where(" del_flag=? ", NOT_DEL).fetch();
}
public R update(R record) {
record.store();
return record;
}
public int insert(R record) {
record.from(ImmutableMap.of(FIELD_CREATE_TIME, new Timestamp(System.currentTimeMillis())), FIELD_CREATE_TIME);
return dsl.batchInsert(record).execute()[0];
}
public int delete(R record) {
record.from(DEL_MAPPER, FIELD_DEL_FLAG);
return record.store();
}
/**
* 自動根據id判斷插入或者更新
*
* @param record
* @return
*/
public int store(R record) {
Long id = record.getValue(FIELD_ID, Long.class);
if (id == null || id == 0) {
return dsl.batchInsert(record).execute()[0];
} else {
update(record);
return 1;
}
}
public void batchUpdate(List<? extends UpdatableRecord<?>> records) {
dsl.batchUpdate(records).execute();
}
}
2、SysUserDao接口
package com.suixingpay.jooq.dao;
import com.suixingpay.jooq.entity.tables.pojos.SysUser;
import com.suixingpay.jooq.entity.tables.records.SysUserRecord;
import java.util.List;
public interface SysUserDao {
SysUserRecord findByName(String userName);
List<SysUserRecord> findByRealName(String realName);
List<SysUser> findByPhone(String phone);
}
3、SysUserDaoImpl實現類
package com.suixingpay.jooq.dao.impl;
import com.suixingpay.jooq.BaseDao;
import com.suixingpay.jooq.dao.SysUserDao;
import com.suixingpay.jooq.entity.tables.pojos.SysUser;
import com.suixingpay.jooq.entity.tables.records.SysUserRecord;
import org.jooq.Table;
import org.springframework.stereotype.Repository;
import java.util.List;
import static com.suixingpay.jooq.entity.tables.SysUser.SYS_USER;
@Repository("sysUserDao")
public class SysUserDaoImpl extends BaseDao<SysUserRecord> implements SysUserDao {
@Override
public Table<SysUserRecord> table() {
return SYS_USER;
}
@Override
public SysUserRecord findByName(String userName) {
return this.dsl.selectFrom(table()).where("user_name=?", userName).fetchOne();
}
@Override
public List<SysUserRecord> findByRealName(String realName) {
return this.dsl.selectFrom(table()).where("real_name=?", realName).fetch();
}
@Override
public List<SysUser> findByPhone(String phone) {
return this.dsl.selectFrom(table()).where("phone = ?", phone).fetch().map(record -> {
return record.into(SysUser.class);
});
}
}
4、SysUserService接口
package com.suixingpay.jooq.service;
import com.suixingpay.jooq.entity.tables.pojos.SysUser;
import com.suixingpay.jooq.entity.tables.records.SysUserRecord;
import java.util.List;
public interface SysUserService {
SysUserRecord newRecord();
int insert(SysUserRecord sysUserRecord);
int update(SysUserRecord sysUserRecord);
int delete(int id);
SysUserRecord get(int id);
List<SysUserRecord> findAll();
SysUserRecord findByName(String userName);
List<SysUserRecord> findByRealName(String realName);
List<SysUser> findByPhone(String phone);
}
5、SysUserServiceImpl實現類
package com.suixingpay.jooq.service.impl;
import com.suixingpay.jooq.dao.impl.SysUserDaoImpl;
import com.suixingpay.jooq.entity.tables.pojos.SysUser;
import com.suixingpay.jooq.entity.tables.records.SysUserRecord;
import com.suixingpay.jooq.service.SysUserService;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.List;
@Service("sysUserService")
public class SysUserServiceImpl implements SysUserService {
@Resource
private SysUserDaoImpl sysUserDao;
@Override
public SysUserRecord newRecord() {
return sysUserDao.newRecord();
}
@Override
public int insert(SysUserRecord sysUserRecord) {
return sysUserDao.insert(sysUserRecord);
}
@Override
public int update(SysUserRecord sysUserRecord) {
return 0;
}
@Override
public int delete(int id) {
return 0;
}
@Override
public SysUserRecord get(int id) {
return null;
}
@Override
public List<SysUserRecord> findAll() {
return null;
}
@Override
public SysUserRecord findByName(String userName) {
return sysUserDao.findByName(userName);
}
@Override
public List<SysUserRecord> findByRealName(String realName) {
return sysUserDao.findByRealName(realName);
}
@Override
public List<SysUser> findByPhone(String phone) {
return sysUserDao.findByPhone(phone);
}
}
6、Controller實現
package com.suixingpay.jooq.controller;
import com.suixingpay.jooq.entity.tables.pojos.SysUser;
import com.suixingpay.jooq.entity.tables.records.SysUserRecord;
import com.suixingpay.jooq.protocal.Response;
import com.suixingpay.jooq.service.SysUserService;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.List;
@ApiModel
@RestController
@RequestMapping("/sysUser")
public class SysUserController {
@Autowired
private SysUserService sysUserService;
@ApiOperation(value = "插入用戶")
@PostMapping("/insert")
public Response saveUser(@RequestParam String userName,
@RequestParam String realName,
@RequestParam String email,
@RequestParam String phone,
@RequestParam String pswd,
@RequestParam int userStatus) {
SysUserRecord record = sysUserService.newRecord();
record.setUserName(userName);
record.setRealName(realName);
record.setEmail(email);
record.setPhone(phone);
record.setPswd(pswd);
record.setUserStatus(userStatus);
record.setCreateTime(new Timestamp(System.currentTimeMillis()));
sysUserService.insert(record);
return Response.ok();
}
@ApiOperation(value = "根據登錄賬戶查詢")
@PostMapping("/findByName")
public Response findByName(@RequestParam String userName) {
SysUserRecord sysUserRecord = sysUserService.findByName(userName);
SysUser sysUser = sysUserRecord.into(SysUser.class);
return Response.ok(sysUser);
}
@ApiOperation(value = "根據真實姓名查詢")
@PostMapping("/findByRealName")
public Response findByRealName(@RequestParam String realName) {
List<SysUser> resultList = new ArrayList<>();
List<SysUserRecord> list = sysUserService.findByRealName(realName);
for (SysUserRecord sysUserRecord : list) {
SysUser sysUser = sysUserRecord.into(SysUser.class);
resultList.add(sysUser);
}
return Response.ok(resultList);
}
@ApiOperation(value = "根據手機號查詢")
@PostMapping("/findByPhone")
public Response findByPhone(@RequestParam String phone) {
List<SysUser> list = sysUserService.findByPhone(phone);
return Response.ok(list);
}
}
7、本機可以訪問http://localhost:8080/swagger-ui.html測試。
總結
以上是生活随笔為你收集整理的SpringBoot整合JOOQ例子(二)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 41年来新高 美国6月通胀跃升至9.1%
- 下一篇: mysql中的自定义函数