- 浏览: 111984 次
- 性别:
- 来自: 成都
最近访客 更多访客>>
文章分类
最新评论
-
dev_liu:
lipengyu2006 写道现在怎么样儿了啊 房子多少钱买 ...
最近比较心烦 -
lipengyu2006:
现在怎么样儿了啊 房子多少钱买的。
最近比较心烦 -
cynan168:
...
hibernate数据查询的几种方式 -
My_Choice:
joram中文文档 -
My_Choice:
非常感谢,太有用了,中文文档不好找啊,而且是这么详细的
joram中文文档
一、配置DataSource
<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName">
<value>java:comp/env/jdbc/myDatasource</value>
</property>
</bean>
<bean id="sessionFactory" class="org.springframework.orm.hibernate.LocalSessionFactoryBean">
<property name="dataSource"><ref bean="dataSource"/></property>
<property name="mappingResources">
<list>
<value>com/springinaction/training/model/Course.hbm.xml</value>
<value>com/springinaction/training/model/User.hbm.xml</value>
</list>
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">${hibernate.dialect}</prop>
</props>
</property>
</bean>
二、使用JdbcTemplate
JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
jdbcTemplate.update(
"UPDATE user SET age = ? WHERE id = ?",
new PreparedStatementSetter() {
public void setValues(PreparedStatementSetter ps)
throws SQLException {
ps.setInt(1, 18);
ps.setString(2, "erica");
}
}
);
在Spring中使用方法:
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource"><ref bean="dataSource"/></property>
</bean>
<bean id="studentDao" class="StudentDaoJdbc">
<property name="jdbcTemplate"><ref bean="jdbcTemplate"/></property>
</bean>
在DAO类中定义
public class StudentDaoJdbc implements StudentDao {
private JdbcTemplate jdbcTemplate;
public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
this.jdbcTemplate = jdbcTemplate;
}
…
}
三、以Batch方式批量插入数据
public int[] updatePersons(final List persons) {
String sql = "insert into person (id, firstName, lastName) " +"values (?, ?, ?)";
BatchPreparedStatementSetter setter = null;
setter = new BatchPreparedStatementSetter() {
public int getBatchSize() {
return persons.size();
}
public void setValues(PreparedStatement ps, int index)
throws SQLException {
Person person = (Person) persons.get(index);
ps.setInt(0, person.getId().intValue());
ps.setString(1, person.getFirstName());
ps.setString(2, person.getLastName());
}
};
return jdbcTemplate.batchUpdate(sql, setter);
}
四、Spring中查询数据
返回单条记录
public Person getPerson(final Integer id) {
String sql = "select id, first_name, last_name from person " + "where id = ?";
final Person person = new Person();
final Object[] params = new Object[] { id };
jdbcTemplate.query(sql, params, new RowCallbackHandler() {
public void processRow(ResultSet rs) throws SQLException {
person.setId(new Integer(rs.getInt("id")));
person.setFirstName(rs.getString("first_name"));
person.setLastName(rs.getString("last_name"));
}
});
return person;
}
返回多条记录
class PersonRowMapper implements RowMapper {
public Object mapRow(ResultSet rs, int index)
throws SQLException {
Person person = new Person();
person.setId(new Integer(rs.getInt("id")));
person.setFirstName(rs.getString("first_name"));
person.setLastName(rs.getString("last_name"));
return person;
}
}
public List getAllPersons() {
String sql = "select id, first_name, last_name from person";
return jdbcTemplate.query(
sql, new RowMapperResultReader(new PersonRowMapper()));
}
调用存储过程:
public void archiveStudentData() {
CallableStatementCallback cb = new CallableStatementCallback() {
public Object doInCallableStatement(CallableStatement cs)
throws SQLException{
cs.execute();
return null;
}
};
jdbcTemplate.execute("{ ARCHIVE_STUDENTS }", cb);
}
五、在Spring中集成Hibernate
配置文件:
<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName">
<value>java:comp/env/jdbc/trainingDatasource</value>
</property>
</bean>
<bean id="sessionFactory" class="org.springframework.orm.hibernate.LocalSessionFactoryBean">
<property name="dataSource">
<ref local="dataSource"/>
</property>
<property name="mappingResources">
<list>
<value>com/tongking/model/User.hbm.xml</value>
</list>
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">net.sf.hibernate.dialect.OracleDialect</prop>
<prop key="hibernate.show_sql">true</prop>
</props>
</property>
</bean>
<bean id="hibernateTemplate"
class="org.springframework.orm.hibernate.HibernateTemplate">
<property name="sessionFactory">
<ref bean="sessionFactory"/>
</property>
</bean>
<bean id="studentDao" class="com.springinaction.training.dao.hibernate.StudentDaoHibernate">
<property name="hibernateTemplate">
<ref bean="hibernateTemplate"/>
</property>
</bean>
代码:
public class UserDAOHibernate extends HibernateDaoSupport implements UserDAO {
public List getUsers() {
return getHibernateTemplate().find("from User");
}
public User getUser(Long id) {
User user = (User) getHibernateTemplate().get(User.class, id);
if (user == null) {
throw new ObjectRetrievalFailureException(User.class, id);
}
return user;
}
public void saveUser(User user) {
getHibernateTemplate().saveOrUpdate(user);
}
public void removeUser(Long id) {
getHibernateTemplate().delete(getUser(id));
}
}
三、在Spring中进行事务管理
TransactionProxyFactoryBean consults a method’s transaction attributes to determine
how to administer transaction policies on that method
The getTransactionAttribute() method is called to find the transaction
attributes for a particular method, given the target class and method.
<bean id="courseService" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
<property name="proxyInterfaces">
<list>
<value>
com.springinaction.training.service.CourseService
</value>
</list>
</property>
<property name="target">
<ref bean="courseServiceTarget"/>
</property>
<property name="transactionManager">
<ref bean="transactionManager"/>
</property>
<property name="transactionAttributeSource">
<ref bean="attributeSource"/>
</property>
</bean>
<bean id="myTransactionAttribute" class="org.springframework.transaction.interceptor.DefaultTransactionAttribute">
<property name="propagationBehaviorName">
<value>PROPAGATION_REQUIRES_NEW</value>
</property>
<property name="isolationLevelName">
<value>ISOLATION_REPEATABLE_READ</value>
</property>
</bean>
<bean id="transactionAttributeSource" class="org.springframework.transaction.interceptor.MatchAlwaysTransactionAttributeSource">
<property name="transactionAttribute">
<ref bean="myTransactionAttribute"/>
</property>
</bean>
CourseService course=context.getBean("courseService");
六、在Spring中访问DataSource
<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean" singleton="true">
<property name="jndiName">
<value>java:comp/env/jdbc/myDatasource</value>
</property>
</bean>
七、在Spring中实现JavaMail服务
<bean id="mailSession" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName">
<value>java:comp/env/mail/Session</value>
</property>
</bean>
<bean id="mailSender" class="org.springrframework.mail.javamail.JavaMailSenderImpl">
<property name="session">
<ref bean="mailSession"/>
</property>
</bean>
实现代码:
public void sendCourseEnrollmentReport() {
Set courseList = courseDao.findAll();
SimpleMailMessage message = new SimpleMailMessage(this.mailMessage);
StringBuffer messageText = new StringBuffer();//定义用于存入邮件内容
messageText.append("Current enrollment data is as follows:\n\n");
for(Iterator iter = courseList.iterator(); iter.hasNext(); ) {
Course course = (Course) iter.next();
messageText.append(course.getId() + " ");
messageText.append(course.getName() + " ");
int enrollment = courseDao.getEnrollment(course);
messageText.append(enrollment);
}//将从数据库中取得内容放至邮件中
message.setText(messageText.toString());
try {
mailSender.send(message);//发送邮件
} catch (MailException e) {
LOGGER.error(e.getMessage());
}
}
八、定时功能:
1.creating a job
public class EmailReportJob extends QuartzJobBean {
public EmailReportJob() {}
protected void executeInternal(JobExecutionContext context)
throws JobExecutionException {
courseService.sendCourseEnrollmentReport();
}
private CourseService courseService;
public void setCourseService(CourseService courseService) {
this.courseService = courseService;
}
}
2.在配置文件中定义:
<bean id="reportJob"class="org.springframework.scheduling.quartz.JobDetailBean">
<property name="jobClass">
<value>com.springinaction.training.schedule.EmailReportJob</value>
</property>
<property name="jobDataAsMap">
<map>
<entry key="courseService">
<ref bean="courseService"/>
</entry>
</map>
</property>
</bean>
3.Scheduling the job
<bean id="simpleReportTrigger"class="org.springframework.scheduling.quartz.SimpleTriggerBean">
<property name="jobDetail">
<ref bean="reportJob"/>
</property>
<property name="startDelay">
<value>3600000</value>
</property>
<property name="repeatInterval">
<value>86400000</value>
</property>
</bean>
以上方法不能用于具体的时间点定时功能,但下面的方法可以
<bean id="cronReportTrigger"class="org.springframework.scheduling.quartz.CronTriggerBean">
<property name="jobDetail">
<ref bean="reportJob"/>
</property>
<property name="cronExpression">
<value>0 0 6 * * ?</value>
</property>
</bean> //6:00 a.m. every day.
直接通过配置文件声明定时执行方法
<bean id="courseServiceInvokingJobDetail">
class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<property name="targetObject">
<ref bean="courseService"/>
</property>
<property name="targetMethod">
<value>sendCourseEnrollmentReport</value>
</property>
</bean>
九、在Spring中使用JMS
1、发送消息:
public void sendSettlementMessage(final PaySettlement settlement) {
jmsTemplate.send(
new MessageCreator() {
public Message createMessage(Session session)
throws JMSException {
MapMessage message = session.createMapMessage();
message.setString("authCode",
settlement.getAuthCode());
message.setString("customerName",
settlement.getCustomerName());
message.setString("creditCardNumber",
settlement.getCreditCardNumber());
message.setInt("expirationMonth",
settlement.getExpirationMonth());
message.setInt("expirationYear",
settlement.getExpirationYear());
return message;
}
}
);
}
配置文件:
bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate">
<property name="connectionFactory">
<ref bean="jmsConnectionFactory"/>
</property>
<property name="defaultDestination">
<ref bean="destination"/>
</property>
</bean>
<bean id="jmsConnectionFactory"class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName">
<value>connectionFactory</value>
</property>
</bean>
<bean id="destination" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName">
<value>creditCardQueue</value>
</property>
</bean>
2、消费消息
public PaySettlement processSettlementMessages() {
Message msg = jmsTemplate.receive("creditCardQueue");
try {
MapMessage mapMessage = (MapMessage) msg;
PaySettlement paySettlement = new PaySettlement();
paySettlement.setAuthCode(mapMessage.getString("authCode"));
paySettlement.setCreditCardNumber(
mapMessage.getString("creditCardNumber"));
paySettlement.setCustomerName(
mapMessage.getString("customerName"));
paySettlement.setExpirationMonth(
mapMessage.getInt("expirationMonth"));
paySettlement.setExpirationYear(
mapMessage.getInt("expirationYear"));
return paySettlement;
} catch (JMSException e) {
throw JmsUtils.convertJmsAccessException(e);
}
}
配置文件:
<bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate">
<property name="receiveTimeout">
<value>10000</value>
</property>
</bean>
相关推荐
3.2-3.7章节主要介绍如何设置开发环境,构建持久化对象,配置映射文件,理解Hibernate的查询语法,整合Hibernate与Spring,以及最终实现一个原型系统,演示数据持久层的功能。 总结,本课程设计通过学习和实践,...
事务管理是Spring持久层的关键特性之一,它提供了两种事务管理方式: 1. **编程式事务管理**:开发者需在代码中显式地管理事务的开启、提交和回滚,适用于需要精细控制事务边界的情况。 2. **声明式事务管理**:...
项目名称:轻量级Java持久层框架MiniDAO...MiniDAO致力于简化数据访问层代码,通过FreeMarker模板提供灵活的SQL管理方式,同时继承了Spring JDBC的易用性和高效性,为Java开发者提供了一个简洁、高效的持久层解决方案。
- Spring与Hibernate集成,通常使用Spring的HibernateTemplate或HibernateDaoSupport,提供事务管理和数据访问抽象,使得代码更简洁,事务控制更方便。 - Spring与Struts2集成,Spring可以作为Struts2的Action的...
3. **自动注入与便利获取**:Spring同样提供了`HibernateDaoSupport`等支持类,这些类可以自动注入数据源和SessionFactory,并且提供了一个便捷的方法来获取`HibernateTemplate`对象。这使得开发过程更加高效。 ###...
Spring 提供了对数据访问对象(DAO)的抽象,简化了与各种持久化技术(如JDBC、Hibernate、JPA等)的交互。它提供了一组模板类和回调接口,减少了重复的DAO代码。 **WebLogic Server 简介** BEA WebLogic Server...
这篇博客“Spring之Spring2.5集成Hibernate3.6”主要探讨了如何将两个经典的开源框架——Spring 2.5和Hibernate 3.6进行整合,以实现数据持久化的高效管理。 Spring 2.5版本是Spring框架的一个重要里程碑,它引入了...
Spring是一个全面的后端开发框架,提供了依赖注入、AOP(面向切面编程)等功能,而iBATIS则是一个持久层框架,用于简化数据库操作。本示例代码旨在展示如何将两者有效地结合在一起,以实现高效的数据访问层。 首先...
Spring还提供了数据访问抽象,包括JDBC模板和ORM支持,使得与数据库交互变得更加简单。在本集成中,Spring作为“胶水”将其他框架紧密连接起来。 Hibernate是一个强大的对象关系映射(ORM)框架,它允许开发者用...
此外,Spring还提供了数据访问抽象,包括JDBC模板和ORM支持,如Hibernate,以及事务管理功能。Spring的AOP模块使得我们可以编写切面代码,实现跨切面的关注点,如日志、性能监控等。 **Hibernate** 是一个流行的ORM...
2. **MyBatis分库分表**:MyBatis是一个轻量级的持久层框架,它允许开发者编写自定义的SQL语句,这为分库分表提供了便利。分库分表通常通过在Mapper XML文件中添加特定的逻辑,比如使用不同的SQL语句或者配置不同的...
1. **JDBC模板**:Spring JDBC模块提供了一个抽象层,简化了JDBC编码,避免了常见的错误和资源管理问题。`JdbcTemplate`和`NamedParameterJdbcTemplate`是两个主要的工具,它们封装了SQL执行和结果处理,使代码更...
而 iBatis(现在称为 MyBatis)是一个轻量级的持久层框架,它简化了数据库访问,通过 SQL 映射文件将 SQL 语句与 Java 代码解耦。 当我们将 Spring 与 iBatis 集成时,我们可以利用 Spring 的强大管理能力来控制 ...
Spring 是一个全面的后端开发框架,提供了依赖注入、面向切面编程、事务管理等功能,而 MyBatis 是一个轻量级的持久层框架,专注于数据库操作。将两者结合使用,可以构建出高效且灵活的 Java Web 应用。 Spring ...
总结起来,这个项目为我们提供了一个完整的示例,演示了如何在Spring Boot中集成Mybatis,配置多数据源、事务管理和连接池,同时展示了JPA和SqlSessionTemplate两种不同的数据库访问方式。对于想要学习和理解这些...
Hibernate是一个持久层框架,主要用于简化Java应用程序与数据库之间的交互。它提供了一种对象关系映射(Object-Relational Mapping, ORM)机制,使得开发者可以通过Java对象操作数据库记录,无需直接编写SQL语句。...
Spring MVC是Spring框架的一部分,用于构建Web应用程序的前端控制器,Spring则提供了全面的依赖注入(DI)和面向切面编程(AOP)支持,而MyBatis是一个优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射。...
这个模板旨在为开发者提供一个快速启动新项目的基础结构,使他们能够便捷地构建具有数据持久化、依赖注入和视图布局功能的应用程序。 **JPA知识点:** Java Persistence API (JPA) 是Java平台上的一个标准,用于...
2. iBatis:iBatis 是一个持久层框架,它允许开发者将SQL语句直接写在配置文件或者Java代码中,提供了一种灵活的映射机制,将数据库操作与业务逻辑解耦。iBatis 的优点在于它的动态SQL支持,可以根据条件动态生成SQL...