java设计模式进阶_service-layer

这里写图片描述

1.需要的jar包
antlr-2.7.7.jar
dom4j-1.6.1.jar
h2-1.4.187.jar
hibernate-commons-annotations-4.0.5.Final.jar
hibernate-core-5.0.0.Beta1.jar
hibernate-jpa-2.1-api-1.0.0.Final.jar
jandex-1.1.0.Final.jar
javassist-3.18.1-GA.jar
jboss-logging-3.2.1.Final.jar
jboss-logging-annotations-1.2.0.Final.jar
jboss-logging-processor-1.2.0.Final.jar
jboss-transaction-api_1.2_spec-1.0.0.Final.jar
jdeparser-1.0.0.Final.jar
xml-apis-1.0.b2.jar

package com.think.in.java.design.pattern.lesson33.model;

import javax.persistence.Inheritance;
import javax.persistence.InheritanceType;
import javax.persistence.MappedSuperclass;

//
//
//  Generated by StarUML(tm) Java Add-In
//
//  @ Project : Untitled
//  @ File Name : BaseEntity.java
//  @ Date : 2016/9/2
//  @ Author : 
//
//


/**
 * Base class for entities.
 *
 */
@MappedSuperclass
@Inheritance(strategy=InheritanceType.TABLE_PER_CLASS)
public class BaseEntity {
    private Long version;
}

package com.think.in.java.design.pattern.lesson33.model;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;

//
//
//  Generated by StarUML(tm) Java Add-In
//
//  @ Project : Untitled
//  @ File Name : Spell.java
//  @ Date : 2016/9/2
//  @ Author : 
//
//



@Entity
@Table(name="SPELL")
public class Spell extends BaseEntity {
    @Id
    @GeneratedValue
    @Column(name="SPELL_ID")
    private Long id;

    private String name;

    @ManyToOne
    @JoinColumn(name="SPELLBOOK_ID_FK",referencedColumnName="SPELLBOOK_ID")
    private Spellbook spellbook;

    public Spell(){}

    public Spell(String name){
        this.name = name;
    }

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Spellbook getSpellbook() {
        return spellbook;
    }

    public void setSpellbook(Spellbook spellbook) {
        this.spellbook = spellbook;
    }

    @Override
    public String toString() {
        return name;
    }

}

package com.think.in.java.design.pattern.lesson33.model;

import java.util.HashSet;
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.ManyToMany;
import javax.persistence.OneToMany;
import javax.persistence.Table;


//
//
//  Generated by StarUML(tm) Java Add-In
//
//  @ Project : Untitled
//  @ File Name : Spellbook.java
//  @ Date : 2016/9/2
//  @ Author : 
//
//



@Entity
@Table(name="SPELLBOOK")
public class Spellbook extends BaseEntity {
    @Id
    @GeneratedValue
    @Column(name="SPELLBOOK_ID")
    private Long id;

    private String name;

    @ManyToMany(mappedBy="spellbooks")
    private Set<Wizard> wizards;

    @OneToMany(mappedBy="spellbook",orphanRemoval=true,cascade=CascadeType.ALL)
    private Set<Spell> spells;

    public Spellbook(){
        spells = new HashSet<Spell>();
        wizards = new HashSet<Wizard>();
    }

    public Spellbook(String name)
    {
        this();
        this.name = name;
    }

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Set<Wizard> getWizards() {
        return wizards;
    }

    public void setWizards(Set<Wizard> wizards) {
        this.wizards = wizards;
    }

    public Set<Spell> getSpells() {
        return spells;
    }

    public void setSpells(Set<Spell> spells) {
        this.spells = spells;
    }

    public void addSpell(Spell spell) {
        spell.setSpellbook(this);
        spells.add(spell);
    }

    @Override
    public String toString() {
        return name;
    }
}


package com.think.in.java.design.pattern.lesson33.model;

import java.util.HashSet;
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.ManyToMany;
import javax.persistence.Table;

//
//
//  Generated by StarUML(tm) Java Add-In
//
//  @ Project : Untitled
//  @ File Name : Wizard.java
//  @ Date : 2016/9/2
//  @ Author : 
//
//



@Entity
@Table(name="WIZARD")
public class Wizard extends BaseEntity {
    @Id
    @GeneratedValue
    @Column(name="WIZARD_ID")
    private Long id;

    private String name;

    @ManyToMany(cascade=CascadeType.ALL)
    private Set<Spellbook> spellbooks;

    public Wizard(){
        spellbooks = new HashSet<>();
    }

    public Wizard(String name){
        this();
        this.name = name;
    }

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Set<Spellbook> getSpellbooks() {
        return spellbooks;
    }

    public void setSpellbooks(Set<Spellbook> spellbooks) {
        this.spellbooks = spellbooks;
    }

    public void addSpellbook(Spellbook spellbook){
        spellbook.getWizards().add(this);
        spellbooks.add(spellbook);
    }

    @Override
    public String toString() {
        return name;
    }



}

package com.think.in.java.design.pattern.lesson33.dao;

import java.util.List;

//
//
//  Generated by StarUML(tm) Java Add-In
//
//  @ Project : Untitled
//  @ File Name : Dao.java
//  @ Date : 2016/9/2
//  @ Author : 
//
//



/**
 * Dao interface.
 * @param <E>
 */
public interface Dao<E> {
    public E find(Long id);
    public void persist(E entity);
    public E merge(E entity);
    public void delete(E entity);
    public List<E> findAll();
}

package com.think.in.java.design.pattern.lesson33.dao;

import com.think.in.java.design.pattern.lesson33.model.Spellbook;

//
//
//  Generated by StarUML(tm) Java Add-In
//
//  @ Project : Untitled
//  @ File Name : SpellbookDao.java
//  @ Date : 2016/9/2
//  @ Author : 
//
//



/**
 * SpellbookDao interface.
 *
 */
public interface SpellbookDao extends Dao<Spellbook> {
    public Spellbook findByName(String name);
}

package com.think.in.java.design.pattern.lesson33.dao;

import com.think.in.java.design.pattern.lesson33.model.Spell;

//
//
//  Generated by StarUML(tm) Java Add-In
//
//  @ Project : Untitled
//  @ File Name : SpellDao.java
//  @ Date : 2016/9/2
//  @ Author : 
//
//



/**
 * SpellDao interface.
 */
public interface SpellDao extends Dao<Spell> {
    public Spell findByName(String name);
}

package com.think.in.java.design.pattern.lesson33.dao;

import com.think.in.java.design.pattern.lesson33.model.Wizard;

//
//
//  Generated by StarUML(tm) Java Add-In
//
//  @ Project : Untitled
//  @ File Name : WizardDao.java
//  @ Date : 2016/9/2
//  @ Author : 
//
//



/**
 * WizardDao interface.
 */
public interface WizardDao extends Dao<Wizard> {
    public Wizard findByName(String name);
}

package com.think.in.java.design.pattern.lesson33.dao.impl;

import java.lang.reflect.ParameterizedType;
import java.util.List;

import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.criterion.Restrictions;

import com.think.in.java.design.pattern.lesson33.dao.Dao;
import com.think.in.java.design.pattern.lesson33.model.BaseEntity;
import com.think.in.java.design.pattern.lesson33.util.HibernateUtil;

//
//
//  Generated by StarUML(tm) Java Add-In
//
//  @ Project : Untitled
//  @ File Name : DaoBaseImpl.java
//  @ Date : 2016/9/2
//  @ Author : 
//
//




@SuppressWarnings("unchecked")
public abstract class DaoBaseImpl<E extends BaseEntity> implements Dao<E> {

    protected Class<E> persistentClass = (Class<E>)((ParameterizedType)getClass()
            .getGenericSuperclass()).getActualTypeArguments()[0];

    public DaoBaseImpl() {

    }

    public Session getSession() {
        return HibernateUtil.getSessionFactory().openSession();
    }

    public E find(Long id) {
        Session session = getSession();
        Transaction tx = null;
        E result = null;
        try {
            tx = session.beginTransaction();
            Criteria criteria = session.createCriteria(persistentClass);
            criteria.add(Restrictions.idEq(id));
            result = (E)criteria.uniqueResult();
            tx.commit();
        } catch (Exception e) {
            if(tx != null)
                tx.rollback();
            throw e;
        } finally {
            session.close();
        }
        return result;
    }

    public void persist(E entity) {
        Session session = getSession();
        Transaction tx = null;
        try {
            tx = session.beginTransaction();
            session.persist(entity);
            tx.commit();
        } catch (Exception e) {
            if(tx != null)
                tx.rollback();
            throw e;
        } finally{
            session.close();
        }
    }

    public E merge(E entity) {
        Session session = getSession();
        Transaction tx = null;
        E result = null;
        try {
            tx = session.beginTransaction();
            result = (E)session.merge(entity);
            tx.commit();
        } catch (Exception e) {
            if(tx != null)
                tx.rollback();
            throw e;
        } finally {
            session.close();
        }
        return result;
    }

    public void delete(E entity) {
        Session session = getSession();
        Transaction tx = null;
        try {
            tx = session.beginTransaction();
            session.delete(entity);
            tx.commit();
        } catch (Exception e) {
            if(tx != null)
                tx.rollback();
            throw e;
        } finally {
            session.close();
        }
    }

    public List<E> findAll() {
        Session session = getSession();
        Transaction tx = null;
        List<E> result = null;
        try {
            tx = session.beginTransaction();
            Criteria criteria = session.createCriteria(persistentClass);
            result = criteria.list();
        } catch (Exception e) {
            if(tx != null)
                tx.rollback();
            throw e;
        } finally {
            session.close();
        }
        return result;
    }
}

package com.think.in.java.design.pattern.lesson33.dao.impl;

import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.criterion.Restrictions;

import com.think.in.java.design.pattern.lesson33.dao.SpellbookDao;
import com.think.in.java.design.pattern.lesson33.model.Spell;
import com.think.in.java.design.pattern.lesson33.model.Spellbook;

//
//
//  Generated by StarUML(tm) Java Add-In
//
//  @ Project : Untitled
//  @ File Name : SpellbookDaoImpl.java
//  @ Date : 2016/9/2
//  @ Author : 
//
//




public class SpellbookDaoImpl extends DaoBaseImpl<Spellbook> implements SpellbookDao {

    @Override
    public Spellbook findByName(String name) {
        Session session = getSession();
        Transaction tx = null;
        Spellbook result = null;

        try {
            tx = session.beginTransaction();
            Criteria criteria = session.createCriteria(persistentClass);
            criteria.add(Restrictions.eq("name",name));
            result = (Spellbook)criteria.uniqueResult();
            result.getSpells().size();
            result.getWizards().size();
            tx.commit();
        } catch (Exception e) {
            if(tx != null)
                tx.rollback();
            throw e;
        } finally {
            session.close();
        }

        return result;
    }


}

package com.think.in.java.design.pattern.lesson33.dao.impl;

import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.criterion.Restrictions;

import com.think.in.java.design.pattern.lesson33.dao.SpellDao;
import com.think.in.java.design.pattern.lesson33.model.Spell;

//
//
//  Generated by StarUML(tm) Java Add-In
//
//  @ Project : Untitled
//  @ File Name : SpellDaoImpl.java
//  @ Date : 2016/9/2
//  @ Author : 
//
//




public class SpellDaoImpl<E> extends DaoBaseImpl<Spell> implements SpellDao {

    @Override
    public Spell findByName(String name) {

        Session session = getSession();
        Transaction tx = null;
        Spell result = null;

        try {
            tx = session.beginTransaction();
            Criteria criteria = session.createCriteria(persistentClass);
            criteria.add(Restrictions.eq("name",name));
            result = (Spell)criteria.uniqueResult();
            result.getSpellbook().getWizards().size();
            tx.commit();
        } catch (Exception e) {
            if(tx != null)
                tx.rollback();
            throw e;
        } finally {
            session.close();
        }

        return result;
    }


}

package com.think.in.java.design.pattern.lesson33.dao.impl;

import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.criterion.Restrictions;

import com.think.in.java.design.pattern.lesson33.dao.WizardDao;
import com.think.in.java.design.pattern.lesson33.model.Spellbook;
import com.think.in.java.design.pattern.lesson33.model.Wizard;

//
//
//  Generated by StarUML(tm) Java Add-In
//
//  @ Project : Untitled
//  @ File Name : WizardDaoImpl.java
//  @ Date : 2016/9/2
//  @ Author : 
//
//




public class WizardDaoImpl extends DaoBaseImpl<Wizard> implements WizardDao {

    @Override
    public Wizard findByName(String name) {
        Session session = getSession();
        Transaction tx = null;
        Wizard result = null;

        try {
            tx = session.beginTransaction();
            Criteria criteria = session.createCriteria(persistentClass);
            criteria.add(Restrictions.eq("name",name));
            result = (Wizard)criteria.uniqueResult();
            for(Spellbook s : result.getSpellbooks())
            {
                s.getSpells().size();
            }
            tx.commit();
        } catch (Exception e) {
            if(tx != null)
                tx.rollback();
            throw e;
        } finally {
            session.close();
        }
        return result;
    }


}

package com.think.in.java.design.pattern.lesson33.service;

import java.util.List;

import com.think.in.java.design.pattern.lesson33.model.Spell;
import com.think.in.java.design.pattern.lesson33.model.Spellbook;
import com.think.in.java.design.pattern.lesson33.model.Wizard;

//
//
//  Generated by StarUML(tm) Java Add-In
//
//  @ Project : Untitled
//  @ File Name : MagicService.java
//  @ Date : 2016/9/2
//  @ Author : 
//
//




public interface MagicService {
    public List<Wizard> findAllWizards();
    public List<Spellbook> findAllSpellbooks();
    public List<Spell> findAllSpells();
    public List<Wizard> findWizardsWithSpellbook(String name);
    public List<Wizard> findWizardsWithSpell(String name);
}

package com.think.in.java.design.pattern.lesson33.service.impl;

import java.util.ArrayList;
import java.util.List;

import com.think.in.java.design.pattern.lesson33.dao.SpellDao;
import com.think.in.java.design.pattern.lesson33.dao.SpellbookDao;
import com.think.in.java.design.pattern.lesson33.dao.WizardDao;
import com.think.in.java.design.pattern.lesson33.model.Spell;
import com.think.in.java.design.pattern.lesson33.model.Spellbook;
import com.think.in.java.design.pattern.lesson33.model.Wizard;
import com.think.in.java.design.pattern.lesson33.service.MagicService;

//
//
//  Generated by StarUML(tm) Java Add-In
//
//  @ Project : Untitled
//  @ File Name : MagicServiceImpl.java
//  @ Date : 2016/9/2
//  @ Author : 
//
//




public class MagicServiceImpl implements MagicService {

    private WizardDao wizardDao;
    private SpellbookDao spellbookDao;
    private SpellDao spellDao;

    public MagicServiceImpl(WizardDao wizardDao, SpellbookDao spellbookDao, SpellDao spellDao) {
        this.wizardDao = wizardDao;
        this.spellbookDao = spellbookDao;
        this.spellDao = spellDao;
    }

    @Override
    public List<Wizard> findAllWizards() {
        return wizardDao.findAll();
    }

    @Override
    public List<Spellbook> findAllSpellbooks() {
        return spellbookDao.findAll();
    }

    @Override
    public List<Spell> findAllSpells() {
        return spellDao.findAll();
    }

    @Override
    public List<Wizard> findWizardsWithSpellbook(String name) {
        Spellbook spellbook = spellbookDao.findByName(name);
        return new ArrayList<Wizard>(spellbook.getWizards());
    }

    @Override
    public List<Wizard> findWizardsWithSpell(String name) {
        Spell spell = spellDao.findByName(name);
        Spellbook spellbook = spell.getSpellbook();
        return new ArrayList<Wizard>(spellbook.getWizards());
    }

}
package com.think.in.java.design.pattern.lesson33.util;

import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;

import com.think.in.java.design.pattern.lesson33.model.Spell;
import com.think.in.java.design.pattern.lesson33.model.Spellbook;
import com.think.in.java.design.pattern.lesson33.model.Wizard;

public class HibernateUtil {

    private static final SessionFactory sessionFactory;

    static {
        try {
            sessionFactory = new Configuration()
                .addAnnotatedClass(Wizard.class)
                .addAnnotatedClass(Spellbook.class)
                .addAnnotatedClass(Spell.class)
                .setProperty("hibernate.dialect", "org.hibernate.dialect.H2Dialect")
                .setProperty("hibernate.connection.url", "jdbc:h2:mem:test;DB_CLOSE_DELAY=-1")
                .setProperty("hibernate.current_session_context_class", "thread")
                .setProperty("hibernate.show_sql", "true")
                .setProperty("hibernate.hbm2ddl.auto", "create-drop")
                .buildSessionFactory();
        } catch (Throwable ex) {
            System.err.println("Initial SessionFactory creation failed." + ex);
            throw new ExceptionInInitializerError(ex);
        }
    }

    public static SessionFactory getSessionFactory() {
        return sessionFactory;
    }

}

package com.think.in.java.design.pattern.lesson33.app;

import java.util.List;

import com.think.in.java.design.pattern.lesson33.dao.SpellDao;
import com.think.in.java.design.pattern.lesson33.dao.SpellbookDao;
import com.think.in.java.design.pattern.lesson33.dao.WizardDao;
import com.think.in.java.design.pattern.lesson33.dao.impl.SpellDaoImpl;
import com.think.in.java.design.pattern.lesson33.dao.impl.SpellbookDaoImpl;
import com.think.in.java.design.pattern.lesson33.dao.impl.WizardDaoImpl;
import com.think.in.java.design.pattern.lesson33.model.Spell;
import com.think.in.java.design.pattern.lesson33.model.Spellbook;
import com.think.in.java.design.pattern.lesson33.model.Wizard;
import com.think.in.java.design.pattern.lesson33.service.MagicService;
import com.think.in.java.design.pattern.lesson33.service.impl.MagicServiceImpl;


public class App {



    public static void main( String[] args ) {   
        // populate the in-memory database
        initData();
        // query the data using the service
        queryData();
    }

    public static void initData() {
        // spells
        Spell spell1 = new Spell("Ice dart");
        Spell spell2 = new Spell("Invisibility");
        Spell spell3 = new Spell("Stun bolt");
        Spell spell4 = new Spell("Confusion");
        Spell spell5 = new Spell("Darkness");
        Spell spell6 = new Spell("Fireball");
        Spell spell7 = new Spell("Enchant weapon");
        Spell spell8 = new Spell("Rock armour");
        Spell spell9 = new Spell("Light");
        Spell spell10 = new Spell("Bee swarm");
        Spell spell11 = new Spell("Haste");
        Spell spell12 = new Spell("Levitation");
        Spell spell13 = new Spell("Magic lock");
        Spell spell14 = new Spell("Summon hell bat");
        Spell spell15 = new Spell("Water walking");
        Spell spell16 = new Spell("Magic storm");
        Spell spell17 = new Spell("Entangle");
        SpellDao spellDao = new SpellDaoImpl();
        spellDao.persist(spell1);
        spellDao.persist(spell2);
        spellDao.persist(spell3);
        spellDao.persist(spell4);
        spellDao.persist(spell5);
        spellDao.persist(spell6);
        spellDao.persist(spell7);
        spellDao.persist(spell8);
        spellDao.persist(spell9);
        spellDao.persist(spell10);
        spellDao.persist(spell11);
        spellDao.persist(spell12);
        spellDao.persist(spell13);
        spellDao.persist(spell14);
        spellDao.persist(spell15);
        spellDao.persist(spell16);
        spellDao.persist(spell17);

        // spellbooks
        SpellbookDao spellbookDao = new SpellbookDaoImpl();
        Spellbook spellbook1 = new Spellbook("Book of Orgymon");
        spellbookDao.persist(spellbook1);
        spellbook1.addSpell(spell1);
        spellbook1.addSpell(spell2);
        spellbook1.addSpell(spell3);        
        spellbook1.addSpell(spell4);    
        spellbookDao.merge(spellbook1);
        Spellbook spellbook2 = new Spellbook("Book of Aras");
        spellbookDao.persist(spellbook2);
        spellbook2.addSpell(spell5);
        spellbook2.addSpell(spell6);        
        spellbookDao.merge(spellbook2);
        Spellbook spellbook3 = new Spellbook("Book of Kritior");
        spellbookDao.persist(spellbook3);
        spellbook3.addSpell(spell7);
        spellbook3.addSpell(spell8);
        spellbook3.addSpell(spell9);        
        spellbookDao.merge(spellbook3);
        Spellbook spellbook4 = new Spellbook("Book of Tamaex");
        spellbookDao.persist(spellbook4);
        spellbook4.addSpell(spell10);
        spellbook4.addSpell(spell11);
        spellbook4.addSpell(spell12);       
        spellbookDao.merge(spellbook4);
        Spellbook spellbook5 = new Spellbook("Book of Idores");
        spellbookDao.persist(spellbook5);
        spellbook5.addSpell(spell13);
        spellbookDao.merge(spellbook5);
        Spellbook spellbook6 = new Spellbook("Book of Opaen");
        spellbookDao.persist(spellbook6);
        spellbook6.addSpell(spell14);
        spellbook6.addSpell(spell15);       
        spellbookDao.merge(spellbook6);
        Spellbook spellbook7 = new Spellbook("Book of Kihione");
        spellbookDao.persist(spellbook7);
        spellbook7.addSpell(spell16);
        spellbook7.addSpell(spell17);
        spellbookDao.merge(spellbook7);

        // wizards
        WizardDao wizardDao = new WizardDaoImpl();
        Wizard wizard1 = new Wizard("Aderlard Boud");
        wizardDao.persist(wizard1);
        wizard1.addSpellbook(spellbookDao.findByName("Book of Orgymon"));
        wizard1.addSpellbook(spellbookDao.findByName("Book of Aras"));
        wizardDao.merge(wizard1);
        Wizard wizard2 = new Wizard("Anaxis Bajraktari");
        wizardDao.persist(wizard2);
        wizard2.addSpellbook(spellbookDao.findByName("Book of Kritior"));
        wizard2.addSpellbook(spellbookDao.findByName("Book of Tamaex"));
        wizardDao.merge(wizard2);
        Wizard wizard3 = new Wizard("Xuban Munoa");
        wizardDao.persist(wizard3);
        wizard3.addSpellbook(spellbookDao.findByName("Book of Idores"));
        wizard3.addSpellbook(spellbookDao.findByName("Book of Opaen"));
        wizardDao.merge(wizard3);
        Wizard wizard4 = new Wizard("Blasius Dehooge");
        wizardDao.persist(wizard4);
        wizard4.addSpellbook(spellbookDao.findByName("Book of Kihione"));
        wizardDao.merge(wizard4);
    }

    public static void queryData() {
        MagicService service = new MagicServiceImpl(new WizardDaoImpl(), new SpellbookDaoImpl(), new SpellDaoImpl());
        System.out.println("Enumerating all wizards");
        for (Wizard w: service.findAllWizards()) {
            System.out.println(w.getName());
        }
        System.out.println("Enumerating all spellbooks");
        for (Spellbook s: service.findAllSpellbooks()) {
            System.out.println(s.getName());
        }
        System.out.println("Enumerating all spells");
        for (Spell s: service.findAllSpells()) {
            System.out.println(s.getName());
        }
        System.out.println("Find wizards with spellbook 'Book of Idores'");
        List<Wizard> wizardsWithSpellbook = service.findWizardsWithSpellbook("Book of Idores");
        for (Wizard w: wizardsWithSpellbook) {
            System.out.println(String.format("%s has 'Book of Idores'", w.getName()));
        }
        System.out.println("Find wizards with spell 'Fireball'");
        List<Wizard> wizardsWithSpell = service.findWizardsWithSpell("Fireball");
        for (Wizard w: wizardsWithSpell) {
            System.out.println(String.format("%s has 'Fireball'", w.getName()));
        }
    }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值