SpringBoot + NutzDao

2019-10-12 Views

春天的靴子+坚果

关于Nutz

Nutz首页

Nutz 可以做什么?

  • Dao -- 针对 JDBC 的薄封装,事务模板,无缓存
  • Ioc -- JSON 风格的配置文件,声明时切片支持
  • Mvc -- 注解风格的配置,内置多文件上传功能
  • Json -- 解析和渲染
  • Castors -- Java 对象类型转换
  • Lang -- 更简洁的 Java 函数以及更丰富的反射支持
  • Aop -- 轻便快速的切面编程支持
  • Plugin -- 轻便的插件机制
  • Resource -- 资源扫描

使用NutzDao


<properties>
    <java.version>1.8</java.version>
    <nutz.version>1.r.66</nutz.version>
</properties>

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <scope>provided</scope>
</dependency>

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
</dependency>

<dependency>
    <groupId>org.nutz</groupId>
    <artifactId>nutz</artifactId>
    <version>${nutz.version}</version>
</dependency>

  • 添加数据库配置
server:
  port: 8881
  context-path: /
spring:
  datasource:
    url: jdbc:mysql://127.0.0.1:3306/demo?useUnicode=true&characterEncoding=utf-8&useSSL=false&zeroDateTimeBehavior=convertToNull
    username: root
    password: 123456
# 配置自定义sql文件的路径
nutz:
  paths:
  - sqls
  • 配置NutzDao
package com.wade.demo.config;

import javax.sql.DataSource;

import org.nutz.dao.Dao;
import org.nutz.dao.SqlManager;
import org.nutz.dao.Sqls;
import org.nutz.dao.impl.FileSqlManager;
import org.nutz.dao.impl.NutDao;
import org.nutz.dao.sql.Sql;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import lombok.Data;

@Data
@Configuration
@ConfigurationProperties("nutz")
public class NutzConfig {

    // 配置自定义sql文件的路径
	private String[] paths;

	@Autowired
	private DataSource dataSource;

	@Bean
	@ConditionalOnMissingBean
	public SqlManager sqlManager() {
		String[] pathsArr = this.paths;
		if (pathsArr == null) {
			pathsArr = new String[] { "sqls" };
		}
		return new FileSqlManager(pathsArr);
	}

	@Bean
	public Dao dao() {
		NutDao nutDao = new NutDao();
		nutDao.setDataSource(dataSource);
		nutDao.setSqlManager(sqlManager());
		return nutDao;
	}

	public Sql getQueryRecordSqlByKey(String key) {
		return Sqls.queryRecord(dao().sqls().get(key));
	}
}
  • 以获取用户列表为例,添加User实体类
package com.wade.demo.domain.entity;

import java.io.Serializable;

import org.nutz.dao.entity.annotation.Column;
import org.nutz.dao.entity.annotation.Comment;
import org.nutz.dao.entity.annotation.Id;
import org.nutz.dao.entity.annotation.Table;

import lombok.Data;

@Data
@Table("user")
public class User implements Serializable {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	@Id
	private Long id;

	@Column("open_id")
	private String openId;

	@Column("username")
	private String username;
	@Column("password")
	private String password;

	@Column("salt")
	private String salt;

	@Column("nickname")
	private String nickname;

	@Column("phone")
	private String phone;

	@Column("email")
	private String email;

	@Column("password_reseted_at")
	@Comment("密码最后一次重置时间")
	private Long passwordResetedAt;

	@Column("password_updated_at")
	@Comment("密码最后一次更新时间")
	private Long passwordUpdatedAt;

	@Column("locked")
	@Comment("是否锁定")
	private Boolean locked;

	@Column("super_admin")
	@Comment("是否为超级管理员")
	private Boolean superAdmin;

       public static final class Field {

		public static final String OPENID = "openId";
		public static final String USERNAME = "username";
		public static final String SALT = "salt";
		public static final String NICKNAME = "nickname";
		public static final String PHONE = "phone";
		public static final String EMAIL = "email";
		public static final String LOCKED = "locked";
		public static final String SUPER_ADMIN = "superAdmin";

		private Field() {
		}
	}
}
  • service
package com.wade.demo.service;

import java.util.List;

import com.wade.demo.domain.entity.User;

public interface UserService {

	List<User> listUsers();
}
  • serviceImpl
package com.wade.demo.service.impl;

import java.util.List;

import org.nutz.dao.Cnd;
import org.nutz.dao.Dao;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.wade.demo.domain.entity.User;
import com.wade.demo.service.UserService;

@Service
public class UserServiceImpl implements UserService {

	@Autowired
	private Dao dao;

	@Override
	public List<User> listUsers() {
		return dao.query(User.class, Cnd.where("deleted_at", "=", 0));
	}
}
  • controller
package com.wade.demo.web;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import com.wade.demo.domain.entity.User;
import com.wade.demo.service.UserService;

@RestController
@RequestMapping("/api/v1/users")
public class UserController {

	@Autowired
	private UserService userService;
	
	@GetMapping("")
	public List<User> listUsers() {
		return userService.listUsers();
	}
}
  • 项目结构
0c0c5fb93f529de9bca8bf80245749d.png
3cade9abef8dad5fd66896f170f6bd0.png
  • 自定义sql,在/src/main/resources/sqls下新建user.sql文件

/*
get.by.id
*/
SELECT username FROM user WHERE id = @id
  • service
package com.wade.demo.service;

import java.util.List;

import com.wade.demo.domain.entity.User;

public interface UserService {

	List<User> listUsers();
	
	User getById(long id);
}
  • serviceImpl
package com.wade.demo.service.impl;

import java.util.List;

import org.nutz.dao.Cnd;
import org.nutz.dao.Dao;
import org.nutz.dao.Sqls;
import org.nutz.dao.sql.Sql;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.wade.demo.domain.entity.User;
import com.wade.demo.domain.entity.User.Field;
import com.wade.demo.service.UserService;

@Service
public class UserServiceImpl implements UserService {

	@Autowired
	private Dao dao;

	@Override
	public List<User> listUsers() {
		return dao.query(User.class, Cnd.where("deleted_at", "=", 0));
	}

	@Override
	public User getById(long id) {
		Sql sql = Sqls.queryRecord(dao.sqls().get("get.by.id"));
		sql.setParam(Field.ID, id);
		return dao.execute(sql).getObject(User.class);
	}
}

  • controller
package com.wade.demo.web;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import com.wade.demo.domain.entity.User;
import com.wade.demo.service.UserService;

@RestController
@RequestMapping("/api/v1/users")
public class UserController {

	@Autowired
	private UserService userService;
	
	@GetMapping("")
	public List<User> listUsers() {
		return userService.listUsers();
	}
	
	@GetMapping("/{id:\\d+}")
	public User getById(@PathVariable("id") long id) {
		return userService.getById(id);
	}
}

86bf2fdec2cb9e8ca032d5300bed535.png
  • 搞定收工!

△