jooq-codegen-maven,配置了所连接的数据库信息,模式名,以及自动生成的代码的配置,比如要生成哪些代码、将生成的代码放在哪个目录中等。
2、基于Jooq的CURD由于Jooq支持通过Java代码来写sql的逻辑,为此例子工程中没有Dao层,sql的逻辑全部在Service层,Service层的代码如下:
用户信息服务接口:IUserService
package com.swnote.jooq.service; import java.util.List; import java.util.Map; import com.swnote.jooq.generator.tables.pojos.User; /** * 用户信息服务接口 * * @author lzj * @date [2019-03-10] */ public interface IUserService { /** * 创建用户 * * @param user */ void create(User user); /** * 根据id删除用户 * * @param user_id */ void delete(String user_id); /** * 更新用户 * * @param user */ void update(User user); /** * 根据id获取用户 * * @param user_id * @return */ User retrieve(String user_id); /** * 根据条件获取用户列表 * * @param params * @return */ List<User> queryForList(Map<String, Object> params); }用户信息服务类:UserService
package com.swnote.jooq.service.impl; import static com.swnote.jooq.generator.tables.User.USER; import java.util.List; import java.util.Map; import java.util.Map.Entry; import org.jooq.DSLContext; import org.jooq.UpdateQuery; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; import com.swnote.jooq.generator.tables.pojos.User; import com.swnote.jooq.generator.tables.records.UserRecord; import com.swnote.jooq.service.IUserService; /** * 用户信息服务类 * * @author lzj * @date [2019-03-10] */ @Transactional @Service public class UserService implements IUserService { @Autowired private DSLContext dsl; @Override public void create(User user) { // 构建insert语句 dsl.insertInto(USER, USER.USER_ID, USER.NAME, USER.INTRO) .values(user.getUserId(), user.getName(), user.getIntro()).execute(); } @Override public void delete(String user_id) { // 构建delete语句 dsl.delete(USER).where(USER.USER_ID.eq(user_id)).execute(); } @Override public void update(User user) { // 构建update语句 UpdateQuery<UserRecord> update = dsl.updateQuery(USER); update.addValue(USER.NAME, user.getName()); update.addValue(USER.INTRO, user.getIntro()); update.addConditions(USER.USER_ID.eq(user.getUserId())); update.execute(); } @Transactional(propagation = Propagation.NOT_SUPPORTED) @Override public User retrieve(String user_id) { // 构建select语句 List<User> users = dsl.select(USER.USER_ID, USER.NAME, USER.INTRO).from(USER).where(USER.USER_ID.eq(user_id)) .fetch().into(User.class); if (users != null && !users.isEmpty()) { return users.get(0); } return null; } @Transactional(propagation = Propagation.NOT_SUPPORTED) @Override public List<User> queryForList(Map<String, Object> params) { // 构建select语句 StringBuilder builder = new StringBuilder(); if (params != null) { for (Entry<String, Object> entry : params.entrySet()) { if (builder.length() == 0) { builder.append(entry.getKey()).append(" = ").append(entry.getValue()); } else { builder.append(" and ").append(entry.getKey()).append(" = ").append(entry.getValue()); } } } List<User> users = dsl.select(USER.USER_ID, USER.NAME, USER.INTRO).from(USER).where(builder.toString()).fetch().into(User.class); return users; } }从上面的代码可以看到利用Jooq来写sql的逻辑,也很简单。
3、测试