java8

1.        熟悉对象化查询方式,熟悉HQL

设计DAO层,实现以下DAO:

实现根据玩家名称查询指定玩家数据的DAO

 

         public List<Player> findByName(String name) {

                   try {

                            List<Player> list = new ArrayList<Player>();

                            String hql = "from Player where name=?";

                            Query query = session.createQuery(hql);

                            query.setString(0, name);

 

                            // 把多个实体添加到list中

                            for (int i = 0; i < query.list().size(); i++) {

                                     Player player = (Player) query.list().get(i);

                                     list.add(player);

                                     test = true;

                                     System.out.println(player.getId() + "    " + player.getName()

                                                        + "    " + player.getJob() + "    " + player.getGrade()

                                                        + "    " + player.getExp());

                            }

 

                            return list;

                   } catch (Exception e) {

                            test = false;

                            System.out.println("查询操作未完成");

                            List<Player> list1 = new ArrayList<Player>();

                            return list1;

                   }

 

         }

实现统计的DAO:按升序的方式,统计显示玩家的宠物数量,结果包括:玩家ID,玩家名称,宠物数量

 

         public List<Player> findPlayer() {

 

                   List<Player> list = new ArrayList<Player>();

                   String hql = "select player from Player as player inner join player.pet as pet group by player.id order by count(pet.id)";

                   Query query = session.createQuery(hql);

 

                   for (int i = 0; i < query.list().size(); i++) {

 

                            Player player = (Player) query.list().get(i);

                            list.add(player);

                            test = true;

                            System.out.println(player.getId() + "   " + player.getName()

                                               + "    " + player.getPet().size());

                   }

 

                   return list;

 

         }

显示宠物等级高于主人等级的宠物数据

 

         public List<Pet> findPet() {

 

                   List<Pet> list = new ArrayList<Pet>();

                   String hql = "select pet from Player as player inner join player.pet as pet where pet.grade>player.grade";

                   Query query = session.createQuery(hql);

 

                   for (int i = 0; i < query.list().size(); i++) {

                            Pet pet = (Pet) query.list().get(i);

                            list.add(pet);

                            test = true;

                            System.out.println(pet.getId() + "   " + pet.getName() + "   "

                                               + pet.getExp() + "    " + pet.getGrade());

                   }

 

                   return list;

 

         }

 

分别使用Criteria、HQL、SQL,这三种方式来实现以上操作,并对比这种查询方式的区别

Criteria:

1.       Criteria crit = session.createCriteria(Player.class);
crit. add( Restrictions.like("name", "%%") );
List players = crit.list();

2.       Criteria crit = session.createCriteria(Player.class);
crit. addOrder( Order.asc("pet") );
List players = crit.list();

Hql:

1.    String hql = "from Player where name=?";

           Query query = session.createQuery(hql);

           query.setString(0, name);

或者 hql = "from Player user where user.name='yyy' ";

3.        Select player.id,player.name,count(pet.id)  from Player as player inner join player.pet  as pet group by player.id order by count(pet.id)

4.       Select pet  from Player as player inner join player. Pet as pet where pet.grade>player.grade

 

 

Sql:

1.       select *from player where name=”test”

2.       select player.id ,player.name,count(pet_id) from player,player_pet where player.id=player_pet.player_id group by player.id

3.       select pet.id,pet.name,pet.grade,pet.exp from player,player_pet,pet where player.id=player_pet.player_id  and  player_pet.pet_id=pet.id  and   pet.grade>player.grade

 

要求先编写测试用例,测试DAO,实现测试驱动开发

package test.hibernate;

 

import static org.junit.Assert.*;

 

import java.util.ArrayList;

import java.util.List;

 

import hibernate.PlayerDaoHibernate;

import hibernate.model.*;

 

import org.junit.After;

import org.junit.AfterClass;

import org.junit.Before;

import org.junit.BeforeClass;

import org.junit.Test;

 

public class PlayerDaoHibernateTest {

 

         @BeforeClass

         public static void setUpBeforeClass() throws Exception {

         }

 

         @AfterClass

         public static void tearDownAfterClass() throws Exception {

         }

 

         @Before

         public void setUp() throws Exception {

         }

 

         @After

         public void tearDown() throws Exception {

                  

         }

 

         @Test

         public void testFindByName() {

                   PlayerDaoHibernate test = new PlayerDaoHibernate();

                   test.doConfiguration();

                   test.openSession();

                   Player player=test.createPlayer();

                   test.saveEntity(player);

                  

                   List<Player> list =new ArrayList<Player>();

                   list.add(player);

                  

                   assertEquals(list, test.findByName("test"));

                   test.closeSession();

         }

 

         @Test

         public void testFindPet() {

                   PlayerDaoHibernate test = new PlayerDaoHibernate();

                   test.doConfiguration();

                   test.openSession();

                   Player player=test.createPlayer();

                   test.saveEntity(player);

                  

                   List<Pet> list =new ArrayList<Pet>();

                   list.addAll(player.getPet());

                  

                   assertEquals(list, test.findPet());

                   test.closeSession();

         }

 

 

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值