1.application
## mysql + hibernate
spring.jpa.show-sql=true
spring.jpa.properties.hibernate.format_sql=false
spring.jpa.properties.hibernate.use_sql_comments=false
spring.jta.transaction-manager-id=transactionManager
spring.jpa.database=MYSQL
spring.jpa.properties.hibernate.dialect=com.startdima.assessment.config.SddmMySqlDialect
### 数据库配置 ###
spring.datasource.tomcat.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.tomcat.url=jdbc:mysql://172.168.2.189:3306/assessment_dev?useSSL=false&useUnicode=true&characterEncoding=utf-8&autoReconnect=true&serverTimezone=Asia/Shanghai
spring.datasource.tomcat.username=superdev
spring.datasource.tomcat.password=dima#1234
spring.datasource.tomcat.test-while-idle=true
spring.datasource.tomcat.test-on-borrow=false
spring.datasource.tomcat.test-on-return=false
spring.datasource.tomcat.validation-query=SELECT 1
spring.datasource.tomcat.time-between-eviction-runs-millis=300000
spring.datasource.tomcat.min-evictable-idle-time-millis=1800000
spring.datasource.tomcat.initial-size=5
spring.datasource.tomcat.min-idle=5
spring.datasource.tomcat.max-idle=20
spring.datasource.tomcat.max-active=50
spring.datasource.tomcat.max-wait=60000
2.POJO
@Data
@Entity
@Table(name = "t_site")
public class Site {
/**
* 主键id
*/
@Id
@Column(name = "id")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
/**
* 客户名称
*/
@Column(name = "site_name")
private String siteName;
/**
* 客户代码
*/
@Column(name = "site_code")
private String siteCode;
/**
* 状态
*/
@Column(name = "status")
private Integer status;
}
3.Controller
/**
* 新增站点
* */
@PostMapping("/addSite")
public RestResult addSite(Site site) {
siteService.addSite(site);
return RestResult.success("新增成功");
}
/**
* 更新站点
* */
@PostMapping("/updateSite")
public RestResult updateSite(Site site) {
siteService.updateSite(site);
return RestResult.success("更新成功");
}
/**
* 删除站点
* */
@PostMapping("/deleteSite")
public RestResult deleteSite(Long id) {
siteService.deleteSite(id);
return RestResult.success("删除成功");
}
4.SiteService
public interface SiteService {
/**
* 站点配置列表
*/
EasyUIDatagrid listSite(SiteQuery siteQuery);
/**
* 验证站点名称
*/
boolean validateName(String name,Long id);
/**
* 验证站点代码
*/
boolean validateCode(String code,Long id);
/**
* 增加站点
*/
void addSite(Site site);
/**
* 更新站点
*/
void updateSite(Site site);
/**
* 删除站点
*/
void deleteSite(Long id);
}
5.SiteServiceImpl
@Service
@Transactional
public class SiteServiceImpl implements SiteService {
@Autowired
SiteDao siteDao;
@Override
public EasyUIDatagrid listSite(SiteQuery siteQuery) {
List<Site> sites = siteDao.listSite(siteQuery);
long total = siteDao.countSite(siteQuery);
return new EasyUIDatagrid(total,sites);
}
@Override
public boolean validateName(String name, Long id) {
Site site = siteDao.getSiteByName(name.trim(),id);
if(site == null) {
return true;
}
return false;
}
@Override
public boolean validateCode(String code, Long id) {
Site site = siteDao.getSiteByCode(code, id);
if(site == null){
return true;
}
return false;
}
@Override
public void addSite(Site site) {
site.setStatus(1);
this.validate(site);
siteDao.addSite(site);
}
@Override
public void updateSite(Site site) {
site.setStatus(1);
this.validate(site);
siteDao.updateSite(site);
}
@Override
public void deleteSite(Long id) {
siteDao.deleteSite(id);
}
private void validate(Site site) {
Site siteByCode = siteDao.getSiteByCode(site.getSiteCode(), site.getId());
if(siteByCode != null) {
throw new ConstraintViolationException("站点代码已存在", null);
}
Site siteByName = siteDao.getSiteByName(site.getSiteName(), site.getId());
if(siteByName != null) {
throw new ConstraintViolationException("站点名称已存在", null);
}
}
}
6.SiteDao
@Repository
@Transactional
public interface SiteDao {
/**
*站点配置列表
*/
List<Site> listSite(SiteQuery siteQuery);
/**
*站点配置列表数量
*/
long countSite(SiteQuery params);
/**
*添加站点
*/
void addSite(Site site);
/**
* 修改站点
*/
void updateSite(Site site);
/**
* 删除站点
*/
void deleteSite(long id);
/**
* 根据名称找出站点
*/
Site getSiteByName(String name,Long id);
/**
* 根据代码找出站点
*/
Site getSiteByCode(String code,Long id);
}
7.SiteDaoImpl
@Repository
@Transactional
public class SiteDaoImpl extends BaseDao implements SiteDao {
@Resource(name = "sessionFactory")
private SessionFactory sessionFactory;
@Override
public List<Site> listSite(SiteQuery params) {
Session session = sessionFactory.getCurrentSession();
StringBuilder sBuilder = new StringBuilder();
sBuilder.append(" from Site where 1=1");
if(params.getName() != null && !"".equals(params.getName().trim())) {
sBuilder.append(" and (siteName like :name escape '|' or siteCode like :name escape '|')");
}
Query<Site> query = session.createQuery(sBuilder.toString(),Site.class);
if(params.getName() != null && !"".equals(params.getName().trim())) {
query.setParameter("name", "%|"+params.getName()+"%");
}
query.setFirstResult((params.getPage()-1)*params.getRows());
query.setMaxResults(params.getRows());
return query.list();
}
@Override
public long countSite(SiteQuery params) {
Session session = sessionFactory.getCurrentSession();
StringBuilder sBuilder = new StringBuilder();
sBuilder.append("select count(*) from Site where 1=1");
if(params.getName() != null && !"".equals(params.getName().trim())) {
sBuilder.append(" and (siteName like :name escape '|' or siteCode like :name escape '|')");
}
Query<Long> sqlQuery = session.createQuery(sBuilder.toString());
if(params.getName() != null && !"".equals(params.getName().trim())) {
sqlQuery.setParameter("name", "%|"+params.getName()+"%");
}
return sqlQuery.uniqueResult().longValue();
}
@Override
public void addSite(Site site) {
save(site);
}
@Override
public void updateSite(Site site) {
update(site);
}
@Override
public void deleteSite(long id) {
Session session = sessionFactory.getCurrentSession();
String hql = "delete from Site where id=:id";
Query query = session.createQuery(hql);
query.setParameter("id", id);
query.executeUpdate();
}
@Override
public Site getSiteByName(String name, Long id) {
Session session = sessionFactory.getCurrentSession();
StringBuilder sBuilder = new StringBuilder();
sBuilder.append(" from Site where siteName=:name");
if(id != null) {
sBuilder.append(" and id != :id");
}
Query query = session.createQuery(sBuilder.toString());
query.setParameter("name", name);
if(id != null) {
query.setParameter("id", id.longValue());
}
return (Site) query.uniqueResult();
}
@Override
public Site getSiteByCode(String code, Long id) {
Session session = sessionFactory.getCurrentSession();
StringBuilder sBuilder = new StringBuilder();
sBuilder.append("from Site where siteCode=:code");
if(id != null) {
sBuilder.append(" and id != :id");//这里注意这个,解决增加和更新的校验
}
Query query = session.createQuery(sBuilder.toString());
query.setParameter("code", code);
if(id != null) {
query.setParameter("id", id.longValue());
}
return (Site) query.uniqueResult();
}
}
8.BaseDao
/**
* 基础模块持久层
*
* @author chenf
*/
public abstract class BaseDao {
@Resource
protected SessionFactory sessionFactory;
public void save(Object o) {
Session session = sessionFactory.getCurrentSession();
session.save(o);
session.flush();
}
public void update(Object o) {
Session session = sessionFactory.getCurrentSession();
session.update(o);
session.flush();
}
public void delete(Object o) {
Session session = sessionFactory.getCurrentSession();
session.delete(o);
session.flush();
}
}
9.总结