SpringBoo之持久层Hibernate

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.总结
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值