zoukankan      html  css  js  c++  java
  • 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测试。

  • 相关阅读:
    Java虚拟机的内存模型
    JAVA 对文件的操作
    JAVA 读取 YAML 文件
    Nginx 502 问题解决 及 安装
    Python pdb 调试 命令
    pycharm设置鼠标控制字体大小
    ISO9126 软件质量模型
    人生苦短我学Java9面向对象三大特性之多态 广深
    Golang微服务入门到精通之路3类的封装/继承/多态/接口类型 广深
    人生苦短我学Java10final关键字/代码块/抽象类 广深
  • 原文地址:https://www.cnblogs.com/shileibrave/p/11055526.html
Copyright © 2011-2022 走看看