码迷,mamicode.com
首页 > 编程语言 > 详细

SpringBoot整合JOOQ例子(二)

时间:2019-06-19 23:25:50      阅读:373      评论:0      收藏:0      [点我收藏+]

标签:builder   html   time   port   ISE   dao   pattern   xtend   stc   

上一篇讲了配置,这篇做了一个例子,和大家共享一下。

项目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例子(二)

标签:builder   html   time   port   ISE   dao   pattern   xtend   stc   

原文地址:https://www.cnblogs.com/shileibrave/p/11055526.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!