24H免费课程咨询  TEL:13401595960   QQ:1870218756  微信:13401595960(李老师)

东方博宜

网站首页 > 软件开发资讯 > Java开发

Spring的控制反转、依赖注入以及Spring和Hibernate的整合

2017-07-17 19:54:21 东方博宜 阅读

1spring基础框架搭建

Struts:实现了MVC设计模式,并提供web开发过程中的常见功能(标签库、validate、参数获取、拦截器……)

Hibernate:实现了DAO设计模式(封装了JDBC

Spring:让我们的程序更加灵活(核心思想:控制反转和依赖注入)

 

定义了很多功能模块,可以根据需要获取我们自己的模块!

image.png

 

2Spring的依赖注入和控制反转案例

Strutsstruts.xml

Hibernatehibernate.cfg.xmlormxx.hbm.xml

SpringapplicationContext.xml

 

例子:

UserService

public class UserService {

    //属性

    private String url;

    private String username;

    private int password;

   

    /**

     * 获取数据

     * @param sql

     * @return

     */

    public List getList(String sql){

        System.out.println("连接数据库获取数据,url : " + url + ",用户名 " + username + ",密码 " + password);

        return null;

    }

   

    public String getUrl() {

        return url;

    }

    public void setUrl(String url) {

        this.url = url;

    }

    public String getUsername() {

        return username;

    }

    public void setUsername(String username) {

        this.username = username;

    }

    public int getPassword() {

        return password;

    }

    public void setPassword(int password) {

        this.password = password;

    }

}

 

Test

public class Test {

 

    public static void main(String[] args) {

//      UserService us = new UserService();

//      us.getList("");

       

        //生成专门用来读取applicationContext.xml的工厂类

        XmlBeanFactory factory = new XmlBeanFactory(new ClassPathResource("applicationContext.xml"));

        //applicationContext.xml的配置文件中读取UserService对象,并为属性赋值(由配置文件为属性赋值)

        UserService us = (UserService) factory.getBean("us");

        us.getList("");

    }

}

 

 

applicationContext.xml

    <!-- 定义UserService节点,相当于UserService us = new UserService() -->

    <bean id="us" class="com.user.service.UserService">

       <property name="url" value="jdbc:mysql://127.0.0.1:3306/crm"></property>

       <property name="username" value="root"></property>

       <property name="password" value="123456"></property>

</bean>

 

3、为属性注入对象,通过接口来提升程序的灵活性

IUserService

public interface IUserService {

 

    //获取列表

    public List getList();

}

 

UserServiceHibernate

public class UserServiceHibernate implements IUserService{

 

    public List getList() {

        System.out.println("使用Hibernate来查询数据!");

        return null;

    }

 

}

 

UserServiceJdbc

public class UserServiceJdbc implements IUserService{

 

    public List getList() {

        System.out.println("通过Jdbc来查询数据!");

        return null;

    }

 

}

 

UserAction

public class UserAction {

    //Service作为Action的属性,方便每个方法使用(使用接口是为了使用多态)

    public IUserService userService;

   

    //获取列表

    public String getList(){

        List list = userService.getList();

        return null;

    }

   

    public static void main(String[] args) {

        //为了测试写一个main方法

        //读取spring的配置文件方式二

        ApplicationContext factory = new ClassPathXmlApplicationContext("applicationContext.xml");

        UserAction ua = (UserAction) factory.getBean("userAction");

        ua.getList();

    }

 

    public IUserService getUserService() {

        return userService;

    }

 

    public void setUserService(IUserService userService) {

        this.userService = userService;

    }

}

 

applicationContext.xml

   <!-- new UserService -->

   <bean id="hibernateService" class="com.user.service.UserServiceHibernate"></bean>

  

   <!-- new UserServiceJdbc -->

   <bean id="jdbcService" class="com.user.service.UserServiceJdbc"></bean>

  

   <!-- new UserAction -->

   <bean id="userAction" class="com.user.action.UserAction">

      <!-- 将上面new好的UserServiceHibernate的对象,作为userService的属性的值 -->

      <property name="userService" ref="jdbcService"></property>

   </bean>

 

4、控制反转(IOC)和依赖注入(DI)总结

IOC:控制反转,Spring将为属性赋值的控制权反转到了配置文件中从而提升程序的灵活性!

DI:依赖注入,Spring的某些类的属性的值依赖于配置文件为他们注入!

 

5spring整合hibernate

A、添加spring框架(勾选spring对于jdbc支持的jar包)

B、添加hibernate框架

Hibernate使用spring的配置文件!

C、反转ORM文件和POJO

 


 

案例:

UserService

public class UserService {

    //将配置文件applicationContext.xml中的sessionFactory注入

    private SessionFactory sessionFactory;

   

    public List getList(String hql){

        //HibernateTemplate封装了数据库操作的基本动作

        HibernateTemplate template = new HibernateTemplate(this.sessionFactory);

        List list = template.find(hql);

        return list;

    }

   

    /**

     * 根据例子查询(对象)

     * @param user

     * @return

     */

    public List getByExample(User user){

        return new HibernateTemplate(this.sessionFactory).findByExample(user);

    }

   

   

    public static void main(String[] args) {

        ApplicationContext factory = new ClassPathXmlApplicationContext("applicationContext.xml");

        UserService us = (UserService) factory.getBean("userService");

//      List list = us.getList("from User");

        User user = new User();

        user.setUsername("zhangsan");

        user.setPassword("333");

        List list = us.getByExample(user);

       

        for(Object obj:list){

            User u = (User) obj;

            System.out.println(u.getUid() + " " + u.getUsername());

        }

    }

   

 

    public SessionFactory getSessionFactory() {

        return sessionFactory;

    }

 

    public void setSessionFactory(SessionFactory sessionFactory) {

        this.sessionFactory = sessionFactory;

    }

   

   

}

 

applicationContext.xml

    <!-- UserService -->

    <bean id="userService" class="com.user.service.UserService">

       <property name="sessionFactory" ref="sessionFactory"></property>

</bean>

 

注意:如果需要显示sql语句,则在applicationContext.xml中的sessionFactory节点中配置prop节点(name=”hibernate.show_sql”,值为true)!

    <!-- 类似我们之前的HibernateSessionFactory -->

    <bean id="sessionFactory"

        class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">

        <property name="dataSource">

            <ref bean="dataSource" />

        </property>

        <property name="hibernateProperties">

            <props>

                <prop key="hibernate.dialect">

                    org.hibernate.dialect.MySQLDialect

                </prop>

                <prop key="hibernate.show_sql">true</prop>

            </props>

        </property>

        <property name="mappingResources">

            <list>

                <value>com/user/domain/User.hbm.xml</value></list>

        </property>

    </bean>

 

 

6HibernateTemplate的常见方法

查询:

 List

find(String queryString)

 List

find(String queryString, Object value)

 List

find(String queryString, Object... values)

 List

findByExample(Object exampleEntity)

 List

findByNamedParam(String queryString, String paramName, Object value)

 List

findByNamedParam(String queryString, String[] paramNames, Object[] values)

 List

findByNamedQuery(String queryName)

 List

findByNamedQuery(String queryName, Object value)

 List

findByNamedQuery(String queryName, Object... values)

 List

findByNamedQueryAndNamedParam(String queryName, String paramName, Object value)

 List

findByNamedQueryAndNamedParam(String queryName, String[] paramNames, Object[] values)

<T> T

get(Class<T> entityClass, Serializable id)

 void

load(Object entity, Serializable id)

 Serializable

save(Object entity)

 void

saveOrUpdate(Object entity)

 void

update(Object entity)

 void

delete(Object entity)

 int

bulkUpdate(String queryString)

 int

bulkUpdate(String queryString, Object value)

 int

bulkUpdate(String queryString, Object... values)

 List

findByExample(Object exampleEntity, int firstResult, int maxResults)

 


Powered by 东方博宜教育咨询江苏有限公司  ©2008-2017 www.czos.cn