1、Spring核心模块组成
3、spring里applicationContext.xml文件的读取代码:
Resource resource = new ClassPathResource(“applicationContext.xml”);
//或者Resosurce resource = new
FileSysemResource(“D://workspace//demo//src//applicationContext.xml”);
绝对路径也可以改成相对路径
FileSysemResource(“src//applicationContext.xml”);
备注:这里的applicationContext.xml是放在src目录下的,src目录下的在发布的时候一般是打成.jar文件的,所以我们应该把applicationContext.xml文件放在WEB-INF/lib下,这样的话程序就应该通过.getRealPath来寻找该配置文件
XmlBeanFactory beanfac = new XmlBeanFactory(resource);
Beanfac.getBean(“logindao”);
applicationContext.xml文件里的配置:
<bean id=”logindao” class=”com.sun.demo.LoginDaoHibernate”></bean>//红色部分可以替换为其他的类,例如LoginDaoJdbc.
6、<bean id=”userdao” class=”com.sun.demo.UserDaoImpl”>
<property name=”emp”>
<ref bean=”e”/>
</property><!—调用类UserDaoImpl中的userdao.setEmp(e)à
<property name=”username”>
<value>gaoge</value>
</property>
<!—UserDaoImpl类中的username类型是String类型的,调用userdao.setUsername(“gaoge”)à
<property name=”date”>
<ref bean=”d”/>
</property>
<!—UserDaoImpl类中的date类型是Date类型的,调用userdao.setDate(“date”)à
</bean>
<bean id=”e” class=”com.sun.demo.Emp”><!—相当于Emp e = new Emp();à
<bean id=”d” class=”java.util.Date”></bean>
7、容器实例化
基于多配置文件的加载
String [] configFile = {“applicationContext.xml”};
ApplicationContext ac= new ClassPatchXmlApplicationContext(configFile);
BeanFactory bean = (BeanFactory)ac;
源代码示例:
ApplicationContext ctx = new
ClassPathXmlApplicationContext(“applicationContext.xml”);
IUserDao userdao = (IUserDao)ctx.getBean(“applicationContext.xml”);
Userdao.addUser();
备注:ApplicationContext是只要取一个节点,就会把applicationContext.xml里所有的节点都给实例化出来,而XmlBeanFactory是延迟加载,只实例化程序使用到的节点。
8、applicationContext.xml文件里节点配置构造函数
<bean id=”user” class=”com.sun.demo.User”>
<constructor-arg index=”0” value=”dddddd”></constructor-arg>
<constructor-arg index=”1” ref=”date”></constructor-arg>
</bean>
<bean id=”date” class=”java.util.Date”/>
1、 Spring对Hibernate的支持
先安装spring,再安装hibernate,将Hibernate中一以前的hibernate.cfg.xml文件中的配置信息放到applicationContext.xml中。让Spring对Hibernate进行管理。
(1)、HibernateTemplate的使用
源代码:UserDao.java
Public class UserDao extends HibernateTemplate{
Private SessionFactory sessionFactory;//此处必须为sessionFactory
Public static void main(String[]args){
ApplicationContext ctx = new ClassPathXmlApplicationContext(“applicationContext.xml”);
Userinfo u = ctx.getBean(“userinfo”);
This.save(u)
}
Public void setSsessionFactory (SessionFactoy sf){
This.sf = sf;
}
}
ApplicationContext.xml:
<bean id=”userdao” class=”com.sun.demo.UserDao”>
<property name=” sessionFactory”>
<ref name=”mySessionFactory”/>//此处的mySessionFactory是该配置文件创建的时候设置好的,相当于Hibernate中的SessionFactory.
</proerty>
</bean>
备注:不用创建session,也不用手动提交事务,关闭事务,Spring都已经封装好了。
(2)HibernateDaoSupport的使用
源代码:StaffDao.java
Public class StaffDao extends HibernateDaoSupport{
Public static void main(String[]args){
ApplicationContext ctx = new
ClassPathXmlApplicationContext(“applicationContext.xml”);
Userinfo u = ctx.getBean(“userinfo”);
This.getHibernateTemplate.save(u)
}
}
ApplicationContext.xml:
<bean id=”staffdao” class=”com.sun.demo.StaffDao”>
<property name=” sessionFactory”>
<ref name=”mySessionFactory”/>//此处的mySessionFactory是该配置文件创建的时候设置好的,相当于Hibernate中的SessionFactory.
</proerty>
</bean>
备注:HibernateDaoSupport继承了HibernateTemplate,并将HibernateTemplate中的
SessionFactory sessionFactory;
Public void setSessonFactory(SessionFactory sessionFactory){
This.sessionFactory = sesssionFactory;
}
这几句话封装了起来。
增删改语句:
修改:
Userinfo u = new Userinfo();
u.setUserid(“9001”);//9001是数据库中已经存在的记录
u.setUsername(“gaoge”);
this.getHibernateTemplate.update(u);
删除:
Userinfo u = new Userinfo(“9001”);
This.getHibernateTemplate.delete(u);
批量修改:
This.getHibernateTemplate().execute(new HibernateCallback(){
Public Object doInHibernate(Session session)
Throws HibernateException,SQLException{
Query q = session.createQuery(“update Userinfo set
username=’zhangsan’”);
q.executeUpdate();//executeUpdate():批量修改
return null;
}
});
加载:Userinfo u =
(Userinfo)this.getHibernateTemplate.get(Userinfo.class,”1001”);
插入或更新:
Userinfo u = new Userinfo(“5006”,”yaoming”,”male”,”22”);
This.getHibernateTemplate().saveOrUpdate(u);
分页查询:
List list = (List)This.getHibernateTemplate().execute(new HibernateCallback(){
Public Object doInHibernate(Session session)
Throws HibernateException,SQLException{
Query q = session.createQuery(“from Userinfo”);
q.setFirstResult(3); //executeUpdate():批量修改
q.setMaxResults(3);
return q.list();
}
});