• [Hibernate]


    测试了常用的一些HQL查询方法,具体HQL的强大可以参考:

    http://docs.jboss.org/hibernate/orm/3.5/reference/zh-CN/html/queryhql.html#queryhql-casesensitivity


    Java Beans:

    package com.my.bean;
    
    import java.util.Date;
    import java.util.Set;
    
    import javax.persistence.CascadeType;
    import javax.persistence.Column;
    import javax.persistence.Entity;
    import javax.persistence.GeneratedValue;
    import javax.persistence.Id;
    import javax.persistence.OneToMany;
    import javax.persistence.Table;
    
    @Entity
    @Table(name="user")
    public class User {
        @Id @GeneratedValue @Column(name="user_id", nullable=false)
        private long userID;
        
        @Column(name="user_name", length=100, nullable=false)
        private String userName;
        
        @Column(name="create_time", nullable=false)
        private Date createTime;
        
        @OneToMany(mappedBy="user", cascade=CascadeType.ALL)
        private Set<UserCard> cards;
    
        public long getUserID() {
            return userID;
        }
    
        public void setUserID(long userID) {
            this.userID = userID;
        }
    
        public String getUserName() {
            return userName;
        }
    
        public void setUserName(String userName) {
            this.userName = userName;
        }
    
        public Date getCreateTime() {
            return createTime;
        }
    
        public void setCreateTime(Date createTime) {
            this.createTime = createTime;
        }
    
        public Set<UserCard> getCards() {
            return cards;
        }
    
        public void setCards(Set<UserCard> cards) {
            this.cards = cards;
        }
    }
    package com.my.bean;
    
    import javax.persistence.CascadeType;
    import javax.persistence.Column;
    import javax.persistence.Entity;
    import javax.persistence.GeneratedValue;
    import javax.persistence.GenerationType;
    import javax.persistence.Id;
    import javax.persistence.JoinColumn;
    import javax.persistence.ManyToOne;
    import javax.persistence.Table;
    
    @Entity
    @Table(name="user_card")
    public class UserCard {
        @Id
        @GeneratedValue(strategy=GenerationType.IDENTITY)
        @Column(name="card_id")
        private long cardID;
        
        @Column(name="card_name")
        private String cardName;
        
        @ManyToOne(cascade=CascadeType.ALL)
        @JoinColumn(name="user_id")
        private User user;
        
        public long getCardID() {
            return cardID;
        }
        public void setCardID(long cardID) {
            this.cardID = cardID;
        }
        public String getCardName() {
            return cardName;
        }
        public void setCardName(String cardName) {
            this.cardName = cardName;
        }
        public User getUser() {
            return user;
        }
        public void setUser(User user) {
            this.user = user;
        }
    }

    一些DTO的Java Beans:

    package com.my.bean.dto;
    
    public class GroupByTemp {
        private long sumUser;
        private long userID;
        
        public long getSumUser() {
            return sumUser;
        }
        public void setSumUser(long sumUser) {
            this.sumUser = sumUser;
        }
        public long getUserID() {
            return userID;
        }
        public void setUserID(long userID) {
            this.userID = userID;
        }
        
        /**
         * @param sumUser
         * @param userID
         */
        public GroupByTemp(long sumUser, long userID) {
            this.sumUser = sumUser;
            this.userID = userID;
        }
    }
    package com.my.bean.dto;
    
    import java.math.BigInteger;
    import java.util.Date;
    
    public class UserSQLTemp {
        private BigInteger userID;
        private Date createTime;
        private String userName;
        public BigInteger getUserID() {
            return userID;
        }
        public void setUserID(BigInteger userID) {
            this.userID = userID;
        }
        public Date getCreateTime() {
            return createTime;
        }
        public void setCreateTime(Date createTime) {
            this.createTime = createTime;
        }
        public String getUserName() {
            return userName;
        }
        public void setUserName(String userName) {
            this.userName = userName;
        }
    }
    package com.my.bean.dto;
    
    public class UserTemp {
        private long userID;
        private String userName;
        private String cardName;
        
        public long getUserID() {
            return userID;
        }
        public void setUserID(long userID) {
            this.userID = userID;
        }
        public String getUserName() {
            return userName;
        }
        public void setUserName(String userName) {
            this.userName = userName;
        }
        public String getCardName() {
            return cardName;
        }
        public void setCardName(String cardName) {
            this.cardName = cardName;
        }
        
        public UserTemp(long userID, String userName, String cardName) {
            super();
            this.userID = userID;
            this.userName = userName;
            this.cardName = cardName;
        }
    }

    测试:

    package com.my.init;
    
    import java.util.List;
    
    import org.hibernate.Query;
    import org.hibernate.Session;
    import org.hibernate.Transaction;
    import org.hibernate.transform.Transformers;
    
    import com.my.bean.User;
    import com.my.bean.UserCard;
    import com.my.bean.dto.GroupByTemp;
    import com.my.bean.dto.UserSQLTemp;
    import com.my.bean.dto.UserTemp;
    import com.my.dao.util.HibernateUtil;
    
    public class Test {
    
        @SuppressWarnings({ "unchecked" })
        public static void main(String[] args) {
            Session session = HibernateUtil.getSessionFactory().openSession();
            Transaction tx = session.beginTransaction();
    
            try {
                // ----------------------------------------------------
                // Select all data
                // ----------------------------------------------------
                String hql = "FROM User AS U ORDER BY U.createTime DESC";
                Query query = session.createQuery(hql);
                List<User> users = query.list();
                for (User user : users) {
                    System.out.println("User:" + user.getUserName());
                    System.out.println("Card size:" + user.getCards().size());
                    for (UserCard c : user.getCards()) {
                        System.out.println("Card:" + c.getCardName());
                    }
                }
    
                // ----------------------------------------------------
                // Select all user name
                // ----------------------------------------------------
                hql = "SELECT U.userName FROM User AS U";
                query = session.createQuery(hql);
                List<String> userNames = query.list();
                for (String item : userNames) {
                    System.out.println("Name:" + item);
                }
    
                // ----------------------------------------------------
                // Where
                // ----------------------------------------------------
                hql = "FROM User AS U WHERE U.userID=:userID";
                query = session.createQuery(hql);
                query.setParameter("userID", (long) 1);
                users = query.list();
                for (User user : users) {
                    System.out.println("User:" + user.getUserName());
                }
    
                // ----------------------------------------------------
                // Other fields, DTO
                // ----------------------------------------------------
                hql = "SELECT new com.my.bean.dto.UserTemp(U.userID, U.userName, C.cardName)"
                        + " FROM User AS U, UserCard AS C"
                        + " WHERE U.userID=:userID";
                query = session.createQuery(hql);
                query.setParameter("userID", (long) 2);
                List<UserTemp> temps = query.list();
                for (UserTemp item : temps) {
                    System.out.println("User name:" + item.getUserName()
                            + "	Card name:" + item.getCardName());
                }
    
                // ----------------------------------------------------
                // Group by
                // ----------------------------------------------------
                hql = "SELECT new com.my.bean.dto.GroupByTemp(SUM(C.user.userID), C.user.userID) FROM UserCard AS C GROUP BY C.cardName";
                query = session.createQuery(hql);
                List<GroupByTemp> results = query.list();
                for (GroupByTemp item : results) {
                    System.out.println("UserID:" + item.getUserID() + "	Sum:"
                            + item.getSumUser());
                }
    
                // ----------------------------------------------------
                // Count
                // ----------------------------------------------------
                hql = "SELECT COUNT(*) FROM User";
                query = session.createQuery(hql);
                long count = (long) query.uniqueResult();
                System.out.println("Total:" + count);
    
                // ----------------------------------------------------
                // SQL
                // ----------------------------------------------------
                String sql = "SELECT user_id AS userID, user_name AS userName, create_time AS createTime FROM user";
                query = session.createSQLQuery(sql).setResultTransformer(
                        Transformers.aliasToBean(UserSQLTemp.class));
                List<UserSQLTemp> usersTemp = query.list();
                for (UserSQLTemp item : usersTemp) {
                    System.out.println("UserID:" + item.getUserID()
                            + "	User name:" + item.getUserName());
                }
    
                // ----------------------------------------------------
                // Left join
                // ----------------------------------------------------
                hql = "SELECT U FROM User U LEFT JOIN U.cards C WITH C.cardID=:cardID WHERE U.userName=:userName";
                query = session.createQuery(hql);
                query.setLong("cardID", 1);
                query.setString("userName", "Robin");
                users = query.list();
                for (User user : users) {
                    System.out.println("User ID:" + user.getUserID()
                            + "	User name:" + user.getUserName());
                }
    
                // ----------------------------------------------------
                // Top N records
                // ----------------------------------------------------
                hql = "SELECT U FROM User AS U";
                query = session.createQuery(hql).setMaxResults(1);
                users = query.list();
                for (User user : users) {
                    System.out.println("User name:" + user.getUserName());
                }
    
                // ----------------------------------------------------
                // Like
                // ----------------------------------------------------
                hql = "SELECT U FROM User AS U WHERE U.userName LIKE :userName";
                query = session.createQuery(hql);
                query.setString("userName", "%m%");
                users = query.list();
                for (User user : users) {
                    System.out.println("User name:" + user.getUserName());
                }
    
                // ----------------------------------------------------
                // Paging, set First result and Max result
                // ----------------------------------------------------
                hql = "SELECT U FROM User AS U";
                query = session.createQuery(hql).setFirstResult(1).setMaxResults(1);
                users = query.list();
                for (User user : users) {
                    System.out.println("User name:" + user.getUserName());
                }
    
                // ----------------------------------------------------
                // IN
                // ----------------------------------------------------
                hql = "SELECT U FROM User AS U WHERE U.userID IN (:userID)";
                query = session.createQuery(hql);
                Long[] userIDs = new Long[] { (long) 1, (long) 2 };
                query.setParameterList("userID", userIDs);
                users = query.list();
                for (User user : users) {
                    System.out.println("User name:" + user.getUserName());
                }
    
                // ----------------------------------------------------
                // Sub search
                // ----------------------------------------------------
                hql = "SELECT U FROM User AS U WHERE U IN (SELECT C.user FROM UserCard AS C WHERE C.cardID=:cardID)";
                query = session.createQuery(hql);
                query.setLong("cardID", 1);
                users = query.list();
                for (User user : users) {
                    System.out.println("User name:" + user.getUserName());
                }
    
                // ----------------------------------------------------
                // Sub case
                // ----------------------------------------------------
                hql = "SELECT new com.my.bean.dto.UserTemp("
                        + "U.userID, U.userName, (SELECT C.cardName FROM UserCard C WHERE C.cardID=:cardID)"
                        + ") FROM User U";
                query = session.createQuery(hql);
                query.setLong("cardID", 1);
                temps = query.list();
                for (UserTemp item : temps) {
                    System.out.println("UserID:" + item.getUserID()
                            + "	User name:" + item.getUserName() + "	Card name:"
                            + item.getCardName());
                }
    
                tx.commit();
            } catch (Exception e) {
                tx.rollback();
                e.printStackTrace();
            }
    
            session.close();
        }
    
    }

    HQL中也可以使用SQL,见测试例子:SQL

    (但这种方法不推荐使用,因为这样就破坏了OO设计,除非在逼不得已的情况下,比如那些最初没设计好数据库然后又要出复杂到恶心的报表时)

  • 相关阅读:
    一维函数指针数组和二维函数指针数组demo
    等着新工作
    SSRS常见问题解决方案
    速度
    javascript 满足多层treeview的各种勾选
    vue create 初步解析以及定制化修改
    leveldb总结
    秋招总结场景设计题
    NOSQL: mongoDB windows
    更新webconfig配置文件
  • 原文地址:https://www.cnblogs.com/HD/p/3954039.html
Copyright © 2020-2023  润新知