Spring之数据库操作

本文主要包括以下内容

  1. spring+jdbc数据库操作
  2. spring+jdbc声明事务处理
  3. spring+hibernate声明事务处理

spring+jdbc数据库操作

方法

1、让自己写的一个dao类继承JdbcDaoSupport
2、让自己写的一个dao类继承JdbcTemplate
3、让自己写的一个dao类里有一个属性为JdbcTemplate

总结

1、引入dataSource的方式:
1、在dataSource的设置中直接写值
2、引入properties文件
2、在dao的写法中有很多种,最终只需要把dataSource注入jdbcTemplate中

继承JdbcDaoSupport的方法

package cn.itcast.spring.jdbc;import java.util.List;import org.springframework.jdbc.core.support.JdbcDaoSupport;public class PersonDao extends JdbcDaoSupport{public void update(){this.getJdbcTemplate().execute("update person set pname='a' where pid=3");}public void query(){List<Person> persons = this.getJdbcTemplate().query("select * from person", new PersonRowMapper());for(Person person:persons){System.out.println(person.getPname());}}
}

继承JdbcTemplate的方法

package cn.itcast.spring.jdbc;import javax.sql.DataSource;import org.springframework.jdbc.core.JdbcTemplate;public class PersonDao2 extends JdbcTemplate{public PersonDao2(DataSource dataSource){super(dataSource);}public void update(){this.execute("update person set pname='aa' where pid=2");}
}

属性为JdbcTemplate的方法

package cn.itcast.spring.jdbc;import javax.sql.DataSource;import org.springframework.jdbc.core.JdbcTemplate;public class PersonDao3{private JdbcTemplate jdbcTemplate;public JdbcTemplate getJdbcTemplate() {return jdbcTemplate;}public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {this.jdbcTemplate = jdbcTemplate;}public void update(){this.jdbcTemplate.execute("update person set pname='aaa' where pid=2");}
}

其中查询时的PersonRowMapper为

package cn.itcast.spring.jdbc;import java.sql.ResultSet;
import java.sql.SQLException;import org.springframework.jdbc.core.RowMapper;public class PersonRowMapper implements RowMapper{@Overridepublic Object mapRow(ResultSet rs, int rowNum) throws SQLException {// TODO Auto-generated method stubPerson person = new Person();person.setPid(rs.getLong("pid"));person.setPname(rs.getString("pname"));person.setPsex(rs.getString("psex"));return person;}/*** crud做一下*/}

注入dataSource的方法,在配置文件中配置

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans-2.5.xsd"><bean
        class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"><property name="locations"><value>classpath:jdbc.properties</value></property></bean><bean id="dataSource" destroy-method="close"class="org.apache.commons.dbcp.BasicDataSource"><property name="driverClassName" value="${jdbc.driverClassName}" /><property name="url" value="${jdbc.url}" /><property name="username" value="${jdbc.username}" /><property name="password" value="${jdbc.password}" /></bean><bean id="personDao" class="cn.itcast.spring.jdbc.PersonDao"><property name="dataSource"><ref bean="dataSource"/></property></bean><bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"><property name="dataSource"><ref bean="dataSource"/></property></bean><bean id="personDao2" class="cn.itcast.spring.jdbc.PersonDao2"><constructor-arg index="0" ref="dataSource"></constructor-arg></bean><bean id="personDao3" class="cn.itcast.spring.jdbc.PersonDao3"><property name="jdbcTemplate"><ref bean="jdbcTemplate"/></property></bean>
</beans>

jdbc.properties如下,路径在src文件夹下

jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc\:mysql\://localhost\:3306/hibernate
jdbc.username=root
jdbc.password=root

测试

package cn.itcast.spring.jdbc;import javax.sql.DataSource;import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;public class PersonTest {@Testpublic void test(){ApplicationContext context = new ClassPathXmlApplicationContext("cn/itcast/spring/jdbc/applicationContext.xml");PersonDao personDao = (PersonDao)context.getBean("personDao");personDao.update();}@Testpublic void testDataSource(){ApplicationContext context=new ClassPathXmlApplicationContext("cn/itcast/spring/jdbc/applicationContext.xml");DataSource datasource=(DataSource) context.getBean("dataSource");System.out.println(datasource);}
}

spring+jdbc声明事务处理

spring声明式事务处理的步骤:
1、搭建环境
2、把dao层和service层的接口和类写完
3、在spring的配置文件中,先导入dataSource
4、测试
5、导入dao和service层的bean
6、测试
7、进行AOP的配置
1、引入事务管理器
2、进行aop的配置
8、测试service层的类看是否是代理对象

dao

package cn.itcast.spring.jdbc.transaction.sh.dao;import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;import org.springframework.jdbc.core.RowMapper;
import org.springframework.jdbc.core.support.JdbcDaoSupport;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import org.springframework.transaction.PlatformTransactionManager;
import org.springframework.transaction.support.AbstractPlatformTransactionManager;import cn.itcast.spring.jdbc.transaction.bean.Person;public class PersonDaoImpl extends JdbcDaoSupport implements PersonDao{@Overridepublic List<Person> getPerson() {// TODO Auto-generated method stubreturn this.getJdbcTemplate().query("select * from person", new RowMapper() {@Overridepublic Object mapRow(ResultSet rs, int rowNum) throws SQLException {// TODO Auto-generated method stubPerson person = new Person();person.setPid(rs.getLong("pid"));person.setPname(rs.getString("pname"));person.setPsex(rs.getString("psex"));return person;}});}@Overridepublic void savePerson() {// TODO Auto-generated method stubthis.getJdbcTemplate().update("insert into person values(11,'a','a')");}}

Service

package cn.itcast.spring.jdbc.transaction.sh.service;import java.util.List;import org.springframework.transaction.PlatformTransactionManager;import cn.itcast.spring.jdbc.transaction.bean.Person;
import cn.itcast.spring.jdbc.transaction.sh.dao.PersonDao;public class PersonServiceImpl implements PersonService{private PersonDao personDao;public PersonDao getPersonDao() {return personDao;}public void setPersonDao(PersonDao personDao) {this.personDao = personDao;}@Overridepublic List<Person> getPerson() {// TODO Auto-generated method stubreturn this.personDao.getPerson();}@Overridepublic void savePerson() {// TODO Auto-generated method stubthis.personDao.savePerson();}}

spring配置文件

完成了以下功能
1. 导入dataSource
2. 导入dao和service层的bean
3. 引入事务管理器
4. 进行aop的配置

<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop"xmlns:tx="http://www.springframework.org/schema/tx"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsdhttp://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsdhttp://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd"><bean
        class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"><property name="locations"><value>classpath:jdbc.properties</value></property></bean><bean id="dataSource" destroy-method="close"class="org.apache.commons.dbcp.BasicDataSource"><property name="driverClassName" value="${jdbc.driverClassName}" /><property name="url" value="${jdbc.url}" /><property name="username" value="${jdbc.username}" /><property name="password" value="${jdbc.password}" /></bean><bean id="personDao" class="cn.itcast.spring.jdbc.transaction.sh.dao.PersonDaoImpl"><property name="dataSource"><ref bean="dataSource" /></property></bean><bean id="personService"class="cn.itcast.spring.jdbc.transaction.sh.service.PersonServiceImpl"><property name="personDao"><ref bean="personDao" /></property></bean><!-- 异常处理 --><bean id="myException" class="cn.itcast.spring.jdbc.transaction.exception.MyException"></bean><!-- 确定transactionManager的种类 --><bean id="transactionManager"class="org.springframework.jdbc.datasource.DataSourceTransactionManager"><property name="dataSource"><ref bean="dataSource" /></property></bean><!--通知 1、告诉spring容器,采用什么样的方法处理事务 2、告诉spring容器,目标方法应该采用什么样的事务处理策略--><tx:advice id="tx" transaction-manager="transactionManager"><tx:attributes><!--name规定方法 isolation(隔离机制) 默认值为DEFAULT propagation(传播机制) REQUIRED--><tx:method name="save*" read-only="false" /></tx:attributes></tx:advice><aop:config><aop:pointcut
            expression="execution(* cn.itcast.spring.jdbc.transaction.sh.service.*.*(..))"id="perform" /><aop:advisor advice-ref="tx" pointcut-ref="perform" /><aop:aspect ref="myException"><aop:after-throwing method="myException"pointcut-ref="perform" throwing="ex" /></aop:aspect></aop:config></beans>

测试

package cn.itcast.spring.jdbc.transaction.test;import javax.sql.DataSource;import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;import cn.itcast.spring.jdbc.transaction.sh.service.PersonService;public class TransactionTest {public static ApplicationContext context;static{context = new ClassPathXmlApplicationContext("cn/itcast/spring/jdbc/transaction/config/applicationContext.xml");}@Testpublic void testDataSource(){DataSource dataSource = (DataSource)context.getBean("dataSource");System.out.println(dataSource);}@Testpublic void testPesonDao(){context.getBean("personDao");}@Testpublic void testPersonService(){PersonService personService = (PersonService)context.getBean("personService");personService.savePerson();}
}

spring+hibernate声明事务处理

主要注意sessionFactory在spring配置文件中的配置

方法一

配置sessionFactory第一种方式<bean id="sessionFactory"class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"><property name="dataSource" ref="dataSource"></property><property name="mappingResources"><list><value>cn/itcast/spring/hiberante/transaction/domain/Person.hbm.xml</value></list></property><property name="hibernateProperties"><value>hibernate.dialect=org.hibernate.dialect.MySQLDialect</value></property></bean>

方法二

 <!-- 第二种方式,导入hibernate配置文件 --><bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"><property name="configLocation"><value>classpath:cn/itcast/spring/hibernate/transaction/config/hibernate.cfg.xml</value></property></bean>

详细代码如下

dao

package cn.itcast.spring.hibernate.transaction.dao.impl;import org.springframework.orm.hibernate3.support.HibernateDaoSupport;import cn.itcast.spring.hiberante.transaction.domain.Person;
import cn.itcast.spring.hibernate.transaction.dao.PersonDao;public class PersonDaoImpl extends HibernateDaoSupport implements PersonDao{@Overridepublic void savePerson(Person person) {// TODO Auto-generated method stubthis.getHibernateTemplate().save(person);}}

service

package cn.itcast.spring.hibernate.transaction.service.impl;import org.hibernate.impl.SessionFactoryImpl;
import org.springframework.orm.jdo.JdoTemplate;
import org.springframework.orm.toplink.TopLinkTemplate;import cn.itcast.spring.hiberante.transaction.domain.Person;
import cn.itcast.spring.hibernate.transaction.dao.PersonDao;
import cn.itcast.spring.hibernate.transaction.service.PersonService;public class PersonServiceImpl implements PersonService{private PersonDao personDao;public PersonDao getPersonDao() {return personDao;}public void setPersonDao(PersonDao personDao) {this.personDao = personDao;}@Overridepublic void savePerson(Person person) {// TODO Auto-generated method stubthis.personDao.savePerson(person);}
}

配置文件

<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop"xmlns:tx="http://www.springframework.org/schema/tx"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsdhttp://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsdhttp://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd"><bean
        class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"><property name="locations"><value>classpath:jdbc.properties</value></property></bean><bean id="dataSource" destroy-method="close"class="org.apache.commons.dbcp.BasicDataSource"><property name="driverClassName" value="${jdbc.driverClassName}" /><property name="url" value="${jdbc.url}" /><property name="username" value="${jdbc.username}" /><property name="password" value="${jdbc.password}" /></bean><!--sessionFactory 1、sessionFactoryImpl 2、利用spring的IOC和DI的特征--><!-- 配置sessionFactory第一种方式<bean id="sessionFactory"class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"><property name="dataSource" ref="dataSource"></property><property name="mappingResources"><list><value>cn/itcast/spring/hiberante/transaction/domain/Person.hbm.xml</value></list></property><property name="hibernateProperties"><value>hibernate.dialect=org.hibernate.dialect.MySQLDialect</value></property></bean>--><!-- 第二种方式,导入hibernate配置文件 --><bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"><property name="configLocation"><value>classpath:cn/itcast/spring/hibernate/transaction/config/hibernate.cfg.xml</value></property></bean><bean id="personDao"class="cn.itcast.spring.hibernate.transaction.dao.impl.PersonDaoImpl"><property name="sessionFactory"><ref bean="sessionFactory"/></property></bean><bean id="personService" class="cn.itcast.spring.hibernate.transaction.service.impl.PersonServiceImpl"><property name="personDao"><ref bean="personDao"/></property></bean><bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"><property name="sessionFactory"><ref bean="sessionFactory"/></property></bean><tx:advice id="tx" transaction-manager="transactionManager"><tx:attributes><tx:method name="save*" read-only="false"/></tx:attributes></tx:advice><aop:config><aop:pointcut expression="execution(* cn.itcast.spring.hibernate.transaction.service.impl.PersonServiceImpl.*(..))" id="perform"/><aop:advisor advice-ref="tx" pointcut-ref="perform"/></aop:config>
</beans>

测试

package cn.itcast.spring.hibernate.transaction.test;import javax.sql.DataSource;import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;import cn.itcast.spring.hiberante.transaction.domain.Person;
import cn.itcast.spring.hibernate.transaction.service.PersonService;public class PersonTest {@Testpublic void testDataSource(){ApplicationContext context =  new ClassPathXmlApplicationContext("cn/itcast/spring/hibernate/transaction/config/applicationContext.xml");DataSource dataSource=(DataSource) context.getBean("dataSource");}@Testpublic void test(){ApplicationContext context =  new ClassPathXmlApplicationContext("cn/itcast/spring/hibernate/transaction/config/applicationContext.xml");PersonService personService = (PersonService)context.getBean("personService");Person person = new Person();person.setPname("a");personService.savePerson(person);}
}

完成

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/494184.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

iOS网络编程-ASIHTTPRequest框架同步请求

在ASIHTTPRequest框架中与HTTP请求相关的类有&#xff1a;ASIHTTPRequest和ASIFormDataRequest&#xff0c;其中最常用的是ASIHTTPRequest&#xff0c;ASIFormDataRequest是ASIHTTPRequest的子类&#xff0c;ASIFormDataRequest可以发送类似与HTML表单数据&#xff0c;也可以上…

苹果未来秘密在这里!从神秘组织到七大技术布局

来源&#xff1a;智东西随着人工智能的艰难发展&#xff0c;智能手机增长的放缓&#xff0c; 苹果公司能否第三次重塑自我&#xff1f;在很多方面&#xff0c;苹果仍然是一家以Steve Jobs个人形象制造的公司&#xff0c;专注于颠覆性产品。但今天&#xff0c;苹果走在了十字路口…

❤️ 爬虫分析CSDN大佬之间关系,堪比娱乐圈 ❤️

&#x1f345; 作者主页&#xff1a;不吃西红柿 &#x1f345; 简介&#xff1a;CSDN博客专家&#x1f3c6;、信息技术智库公号作者✌简历模板、PPT模板、技术资料尽管【关注】私聊我。历史文章目录&#xff1a;https://t.1yb.co/zHJo &#x1f345; 欢迎点赞 &#x1f44d; …

编程之美--读书笔记--返回一个数组中所有元素被第一个元素除的结果

笔试题目1&#xff1a;写一个函数&#xff0c;返回一个数组中所有元素被第一个元素除的结果 很多人会想到如下&#xff1a; void DivAarry&#xff08;int *pArray,int size) { for(int isize-1;i>0;i--) { pArray[i] / pArray[0]; } } 问题1&#xff1a;可不可以把循环正着…

SSH框架整合

ssh框架整合步骤如下 提示&#xff1a;myeclipse环境、工程环境、tomcat环境的jdk保持一致 1、新建一个工程&#xff0c;把工程的编码为utf-8 2、把jsp的编码形式改成utf-8 3、把jar包放入到lib下 4、建立三个src folder src 存放源代码 config 存放配置文件 hibernate…

给你的Linux把把脉(内存、磁盘、CPU、网络)

🍅 作者主页:不吃西红柿 🍅 简介:CSDN博客专家🏆、信息技术智库公号作者✌。简历模板、职场PPT模板、技术难题交流、面试套路尽管【关注】私聊我。 今日重点: ① 学会查看linux各种状态,包括:网络IO、磁盘、CPU、内存等; ② 学会理解命令所代表的含义,能够…

关于未来的10点核心思考

作者&#xff1a;尤瓦尔赫拉利 牛津大学历史学博士&#xff0c;全球瞩目的新锐历史学家来源&#xff1a;《今日简史》世界正在变得越来越复杂&#xff0c;我们正在陷入知识的错觉和群体的无知。同时&#xff0c;我们的生活被社交媒体所塑造&#xff0c;真相早已不存在&#xff…

❤️爆肝3万字,最硬核丨Mysql 知识体系、命令全集 【建议收藏 】❤️

&#x1f345; 作者主页&#xff1a;不吃西红柿 &#x1f345; 简介&#xff1a;CSDN博客专家&#x1f3c6;、信息技术智库公号作者✌ 简历模板、PPT模板、学习资料、面试题库、技术互助【关注我&#xff0c;都给你】 &#x1f345; 欢迎点赞 &#x1f44d; 收藏 ⭐留言 &am…

今天专攻POWERSHELL获取本机CPU,内存消耗

PS脚本如下&#xff1a; 1 $Server $env:computername2 #servers CPU Mem Hardinfor 3 $cpu gwmi –computername $Server win32_Processor 4 $men gwmi -ComputerName $Server win32_OperatingSystem 5 $Disks gwmi –Computer: $Server win32_logicaldisk -filter …

证明黎曼猜想的5页论文已发布!最简洁的解读在这里

来源&#xff1a;潇轩社著名数学家阿蒂亚&#xff08;Michael Atiyah&#xff09;公开了他为黎曼猜想做的“简洁证明”&#xff0c;论文长度总共5页。借助量子力学中的无量纲常数α&#xff08;fine structure constant&#xff09;&#xff0c;阿提亚声称解决了复数域上的黎曼…

struts2+ajax+json使用实例

本文主要包含一个struts2ajaxjson的使用实例 步骤如下 1.准备工作 ①ajax使用Jquery&#xff1a;jquery-1.4.2.min.js ②struts2与json的依赖包&#xff1a;struts2-json-plugin-2.2.3.jar,json-lib PS&#xff1a;版本可自己控制&#xff01;~ 2.过程 ①引入json依赖包…

《Python顶级入门教程》一步一步,是魔鬼的步伐

目录 &#x1f345; 1、欲练此功&#xff0c;先知此人 ⚾ 2、Python 语言特性 ❤ 3、Python 特点 &#x1f345; 4、Python 行情如何&#xff1f; ✍ 5、Python 怎么学&#xff1f; 5.1 学理论——懂原理 5.2 做练习——会应用 5.3 团队学习——不懂就问 &#x1f34…

C#/C++/Fortran 在32位/64位下数学计算性能对比

测试平台 在我的上一篇博客中对比了VS2010中C#和C在运算密集型程序中的性能。上一篇博客的链接&#xff1a; http://www.cnblogs.com/ytyt2002ytyt/archive/2011/11/24/2261104.html 当时是在AMD 速龙9650 CPU(4核心)下的测试结果。 随着VS2012、Intel Parallel Studio XE 2013…

《Pycharm操作和配置指南》这些不会,写Python肯定慢嘛

据说,看我文章的帅帅 都有个习惯:先点赞、收藏再看 目录 🍅 一、Pycharm 常用命令大全 ♣ 二、Pycharm 骚操作 🍑 1、全局查找

“光纤之父”高锟离世,感谢他的贡献

来源&#xff1a;云头条据明报报道&#xff0c;香港中文大学前校长、“光纤之父”、2009年诺贝尔物理学奖得主&#xff0c;今天&#xff08;9月23日&#xff09;下午在医院离世&#xff0c;享年84岁。高錕1933年11月在中国上海出生&#xff0c;祖贯江苏金山市&#xff0c;出身书…

struts2服务端与android交互

本文主要包括以下内容 android与struts2服务器实现登陆 android从struts2服务器获取list数据 android上传数据到struts2服务器 服务器端代码 package com.easyway.json.android;import java.util.HashMap; import java.util.Map;import javax.servlet.http.HttpServletReque…

爆款专栏《Python 黑科技》目录导航丨进度:12/50

《Python 快速入门专栏丨掌握基础》和《Python 黑科技丨练习应用》由 CSDN 博客专家丨全站排名 Top 8 的硬核博主 不吃西红柿 倾力打造&#xff0c;旨在帮助大家快速入门掌握 Python。 更有学习资料&#xff0c;简历和 PPT 模板&#xff0c;微信公众号 【信息技术智库】关注我&…

干货|2018年中国智能硬件行业现状与发展趋势报告

来源&#xff1a;前瞻产业研究院未来智能实验室是人工智能学家与科学院相关机构联合成立的人工智能&#xff0c;互联网和脑科学交叉研究机构。未来智能实验室的主要工作包括&#xff1a;建立AI智能系统智商评测体系&#xff0c;开展世界人工智能智商评测&#xff1b;开展互联网…

Unity3d--美工建模须知【转http://blog.csdn.net/tanmengwen/article/details/8735889】

3dsmax2010安装插件&#xff0c;输出FBX的类型导入Unity3D中。默认情况下&#xff0c;3dsmax8可以和U3D软件直接融合&#xff0c;自动转换为FBX物体。 1.面数控制 在MAX软件中制作单一Game Object物体的面数不能超过65000个三角形&#xff0c;即32500个多边形Poly&#xff0c;如…

一文看懂芯片测试产业

来源&#xff1a;基业常青经济研究院从IDM到垂直分工&#xff0c;IC产业专业化分工催生独立测试厂商出现。集成电路产业从上世纪60年代开始逐渐兴起&#xff0c;早期企业都是IDM运营模式&#xff08;垂直整合&#xff09;&#xff0c;这种模式涵盖设计、制造、封测等整个芯片生…