codecamp

虚拟视图


多表关联常常通过创建数据库视图的方式来解决,其实也可以使用虚拟视图,维护更为方便。


表person和表id_card通过外键id_card_id关联。


创建虚拟视图PersonIdCard类:

@Entity
@Immutable
@Subselect("SELECT p.id id, p.name name, p.age age, ic.number number " +
           "FROM person p " +
           "LEFT JOIN id_card ic " +
           "ON p.id_card_id=ic.id")
public class PersonIdCard {
    @Id
    private Long id;
    private String name;
    private Integer age;
    private String number;

    // getter and setter}
数据库访问PersonIdCardRepository类:

public interface PersonIdCardRepository extends JpaRepository<PersonIdCard, Long>, JpaSpecificationExecutor<PersonIdCard> {
}
查询年龄大于20的人。
public List<PersonIdCard> findAll(SearchRequest request) {
    Specification<PersonIdCard> specification = new Specifications<PersonIdCard>()
            .gt(Object.nonNull(request.getAge()), "age", 20)
            .build();

    return personRepository.findAll(specification); 
} 

And自定义查询的用法
分页与排序
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }