java sql 联表查询系统

编程入门 行业动态 更新时间:2024-10-10 02:21:23

java sql 联表<a href=https://www.elefans.com/category/jswz/34/1759121.html style=查询系统"/>

java sql 联表查询系统

背景:Comp项目要实现日期条件查询多表级联的数据信息,查询结果可多表多字段拼接,做以下总结:

1.Comp封装了比较方便的时间工具类DateUtil,如获取当天的最后时间23:59:59,获取当月的最后一天等,该工具类主要基于java.util的Calendar类实现的。

Calendar类是一个抽象类,没有构造方法,无法通过new来创建对象,提供了getInstance()方法来获取Calendar的实例。

public static Calendar getInstance(){

return createCalendar(TimeZone.getDefault(),

Locale.getDefault(Locale.Category.FORMAT));

}

调用getInstance()方法返回的是Calendar的一个子类对象,因为每个国家地区都有自己的一套日历算法,抽象类向外界提供一个通用的获取Calendar的方法。

Calendar类中我们主要关注set和add方法,set可以设置日历的时间如set(int,int,int)设置年月日,set(int,int,int,int,int,int)设置年月日时分秒,add方法可以关注add(int field, int amount),field表示要设置的域,在Calendar类中有定义,如1是年,2是月,5是日,具体参见Calendar类,amount表示变更的数量,当amount为负数的时候表示减小。

下面以获取当月最后一天的函数为例(参数为当前时间):

public static Date getLastDayOfMonth(Date date) {

// 获取Calendar实例

Calendar ca = Calendar.getInstance();

// 日历时间设置为当前时间 如2019-01-07 19:28:55

ca.setTime(date);

// 设置日期为当月1日 但有延缓计算的设置,所以当前不会立即计算,见下文

ca.set(5, 1);

// 月份加1 2019-02-01 19:28:55

ca.add(2, 1);

// 日减1 2019-01-31 19:28:55

ca.add(5, -1);

Date lastDate = ca.getTime();

return lastDate;

}

这里的field可以用Calendar.DATE代表5,Calendar.MONTH代表2,这样的代码可读性较强。

同时要主要set方法中的月份是从0开始的,即ca.set(2000, 0, 31, 0, 0 , 0);表示的是2000年1月31日

Calendar 对象在使用时,有一些值得注意的事项:

1. Calendar 的 set() 方法

set(int field, int value) - 是用来设置"年/月/日/小时/分钟/秒/微秒"等值

field 的定义在 Calendar 中

set(int year, int month, int day, int hour, int minute, int second) 但没有

set(int year, int month, int day, int hour, int minute, int second, int millisecond) 前面 set(int,int,int,int,int,int) 方法不会自动将 MilliSecond 清为 0。

另外,月份的起始值为0而不是1,所以要设置八月时,我们用7而不是8。

calendar.set(Calendar.MONTH, 7);

另外我们要注意的一点是,Calendar 为了性能原因对 set() 方法采取延缓计算的方法。在 JavaDoc 中有下面的例子来说明这个问题:

Calendar cal1 = Calendar.getInstance();

cal1.set(2000, 7, 31, 0, 0 , 0); //2000-8-31

cal1.set(Calendar.MONTH, Calendar.SEPTEMBER); //应该是 2000-9-31,也就是 2000-10-1

cal1.set(Calendar.DAY_OF_MONTH, 30); //如果 Calendar 转化到 2000-10-1,那么现在的结果就该是 2000-10-30

System.out.println(cal1.getTime()); //输出的是2000-9-30,说明 Calendar 不是马上就刷新其内部的记录

本地SQL查询主要基于JPA的EntityManager

参考:

EntityManager是JPA中用于增删改查的接口,它的作用相当于一座桥梁,连接内存中的java对象和数据库的数据存储。

org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean类是EntityManagerFactoryBean的工厂,可以管理数据库中的数据存储,核心代码:

EntityManager em = entityManagerFactory.getNativeEntityManagerFactory().createEntityManager();

Query nativeQuery = em.createNativeQuery(sql, T.class);

comp对repository层进行了封装,实现更加方便的分页查询,参数查询等,主要配置如下:

@Repository(value = "wssbfsbNwNativeSqlRepository")

public class WssbfsbNwNativeSqlRepository extends AbstractNativeSqlRepository{

@PersistenceContext(unitName = "nw-db")

private EntityManager entityManager;

@Override

protected EntityManager getEntityManager() {

return entityManager;

}

}

class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">

class="cn.servyou.framework.jpa.entity.DynamicPersistenceUnitPostProcessor">

使用的时候注入即可:

@Autowired

@Qualifier(value = "wssbfsbNwNativeSqlRepository")

private NativeSqlRepository wssbfsbNwNativeSqlRepository;

具体的解读留在下回。

更多推荐

java sql 联表查询系统

本文发布于:2024-02-13 08:59:53,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1757896.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:查询系统   java   sql

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!