配色: 字号:
第4章 Spring的数据库开发
2021-05-25 | 阅:  转:  |  分享 
  
学习目标掌握JdbcTemplate类中几个常用方法的使用了解Spring中JDBC模块的作用熟悉SpringJDBC的配置4.1Sp
ringJDBCSpringJDBC模块有什么作用?Spring的JDBC模块负责数据库资源管理和错误处理,大大简化了开发人员
对数据库的操作,使得开发人员可以从繁琐的数据库操作中解脱出来,从而将更多的精力投入到编写业务逻辑当中。4.1.1SpringJ
dbcTemplate的解析针对数据库的操作,Spring框架提供了JdbcTemplate类,该类是Spring框架数据抽象层的
基础。可以说,JdbcTemplate类是SpringJDBC的核心类。JdbcTemplate类的继承结构具体如下图所示:从
JdbcTemplate的继承关系图可以看出,JdbcTemplate类的直接父类是JdbcAccessor,该类为子类提供了一些
访问数据库时使用的公共属性。DataSource:其主要功能是获取数据库连接,还可以引入对数据库连接的缓冲池和分布式事务的支持,它
可以作为访问数据库资源的标准接口。SQLExceptionTranslator:该接口负责对SQLException进行转译工作。
通过必要的设置获取SQLExceptionTranslator中的方法,可以使JdbcTemplate在需要处理SQLExcept
ion时,委托SQLExceptionTranslator的实现类来完成相关的转译工作。而JdbcOperations接口定义了在
JdbcTemplate类中可以使用的操作集合,包括添加、修改、查询和删除等操作。4.1.2SpringJDBC的配置Sp
ringJDBC模块主要由4个包组成,分别是core(核心包)、dataSource(数据源包)、object(对象包)和sup
port(支持包)。4.1.3导入包本次示例需要导入一下包spring-jdbc-4.3.6.RELEASE.jarspring
-tx-4.3.6.RELEASE.jarmysql-connector-java-8.0.15.jar(mysql8使用这个包,
之前版本包需要降级)junit-4.12.jarhamcrest-core-1.3.jar,和junit配合使用,否则报错4.1.
4配置项目创建对象packagecom.unknown.myjdbc;publicclassAccount{priva
teIntegerid;//账户idprivateStringusername;//用户名priv
ateDoublebalance;//账户余额publicIntegergetId(){returnid;
}publicvoidsetId(Integerid){this.id=id;}publicStringg
etUsername(){returnusername;}publicvoidsetUsername(String
username){this.username=username;}publicDoublegetBalance(
){returnbalance;}publicvoidsetBalance(Doublebalance){th
is.balance=balance;}publicStringtoString(){return"com.un
known.myjdbc.Account[id="+id+","+"username="+username+
",balance="+balance+"]";}}创建接口packagecom.unknown.myjdbc;i
mportjava.util.List;publicinterfaceAccountDao{//添加publici
ntaddAccount(Accountaccount);//更新publicintupdateAccount(Ac
countaccount);//删除publicintdeleteAccount(intid);//通过id查询
publicAccountfindAccountById(intid);//查询所有账户publicListcount>findAllAccount();}创建实现packagecom.unknown.myjdbc;importja
va.util.List;importorg.springframework.jdbc.core.BeanPropertyRow
Mapper;importorg.springframework.jdbc.core.JdbcTemplate;importo
rg.springframework.jdbc.core.RowMapper;publicclassAccountDaoImp
limplementsAccountDao{//声明JdbcTemplate属性及其setter方法privateJ
dbcTemplatejdbcTemplate;publicvoidsetJdbcTemplate(JdbcTemplat
ejdbcTemplate){this.jdbcTemplate=jdbcTemplate;}//添加账户pub
licintaddAccount(Accountaccount){//定义SQLStringsql="inse
rtintoaccount(username,balance)value(?,?)";//定义数组来存放SQL语句中的参
数Object[]obj=newObject[]{account.getUsername(),account.get
Balance()};//执行添加操作,返回的是受SQL语句影响的记录条数intnum=this.jdbcTempl
ate.update(sql,obj);returnnum;}//更新账户publicintupdateAcco
unt(Accountaccount){//定义SQLStringsql="updateaccountset
username=?,balance=?whereid=?";//定义数组来存放SQL语句中的参数Object[]
params=newObject[]{account.getUsername(),account.getBalance(
),account.getId()};//执行添加操作,返回的是受SQL语句影响的记录条数intnum=this.
jdbcTemplate.update(sql,params);returnnum;}//删除账户publicin
tdeleteAccount(intid){//定义SQLStringsql="deletefromacc
ountwhereid=?";//执行添加操作,返回的是受SQL语句影响的记录条数intnum=this.j
dbcTemplate.update(sql,id);returnnum;}//通过id查询账户数据信息public
AccountfindAccountById(intid){//定义SQL语句Stringsql="select
fromaccountwhereid=?";//创建一个新的BeanPropertyRowMapper对象R
owMapperrowMapper=newBeanPropertyRowMapper(
Account.class);//将id绑定到SQL语句中,并通过RowMapper返回一个Object类型的单行记录ret
urnthis.jdbcTemplate.queryForObject(sql,rowMapper,id);}//查询
所有账户信息publicListfindAllAccount(){//定义SQL语句String
sql="selectfromaccount";//创建一个新的BeanPropertyRowMapper对象R
owMapperrowMapper=newBeanPropertyRowMapper(
Account.class);//执行静态的SQL查询,并通过RowMapper返回结果returnthis.jdbcTe
mplate.query(sql,rowMapper);}}创建配置"UTF-8"?>s"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:sche
maLocation="http://www.springframework.org/schema/beanshttp://ww
w.springframework.org/schema/beans/spring-beans.xsd">ource.DriverManagerDataSource">verClassName"value="com.mysql.jdbc.Driver"/><
propertyname="url"value="jdbc:mysql://localhost:3306/jobinfo"/>
.jdbc.core.JdbcTemplate">Source"ref="dataSource"/>eanid="accountDao"class="com.unknown.myjdbc.AccountDaoImpl">--将jdbcTemplate注入到accountDao实例中-->"ref="jdbcTemplate"/>创建测试类-创建表importorg.springf
ramework.context.ApplicationContext;importorg.springframework.co
ntext.support.ClassPathXmlApplicationContext;importorg.springfra
mework.jdbc.core.JdbcTemplate;publicclassMain{/使用execute
()方法建表/publicstaticvoidmain(String[]args){//加载配置文件Appl
icationContextapplicationContext=newClassPathXmlApplicationCo
ntext("applicationContext.xml");//获取JdbcTemplate实例JdbcTemplate
jdTemplate=(JdbcTemplate)applicationContext.getBean("jdbcTemp
late");//使用execute()方法执行SQL语句,创建用户账户管理表accountjdTemplate.execu
te("createtableaccount("+"idintprimarykeyauto_increment,"
+"usernamevarchar(50),"+"balancedouble)");System.out.print
ln("账户表account创建成功!");}}4.2SpringJdbcTemplate的常用方法从上表可以看出,Spr
ing对数据库的操作都封装在了这几个包中,而想要使用SpringJDBC,就需要对其进行配置。关于上述示例dataSource配
置中的4个属性说明,如下表所示:上表中的属性值在实际配置时,需要根据数据库类型和设置进行相应配置。在JdbcTemplate核心类
中,提供了大量的更新和查询数据库的方法,我们就是使用的这些方法来操作数据库的。execute()execute(Stringsq
l)方法可用于执行sql语句update()update()用于执行插入、更新和删除操作query()query()用于执行数据查
询操作单元测试类完整示例importcom.unknown.myjdbc.Account;importcom.unknown.
myjdbc.AccountDao;importorg.junit.Test;importorg.springframewor
k.context.ApplicationContext;importorg.springframework.context.s
upport.ClassPathXmlApplicationContext;importorg.springframework.
jdbc.core.JdbcTemplate;importjava.util.List;publicclassJdbcTem
plateTest{@TestpublicvoidaddAccountTest(){//加载配置文件Applic
ationContextapplicationContext=newClassPathXmlApplicationCont
ext("applicationContext.xml");//获取AccountDao实例AccountDaoaccou
ntDao=(AccountDao)applicationContext.getBean("accountDao");//
创建Account对象,并向Account对象中添加数据Accountaccount=newAccount();ac
count.setUsername("tom");account.setBalance(1000.00);//执行addAc
count()方法,并获取返回结果intnum=accountDao.addAccount(account);if(n
um>0){System.out.println("成功插入了"+num+"条数据!");}else{Sy
stem.out.println("插入操作执行失败!");}}@TestpublicvoidupdateAccoun
tTest(){//加载配置文件ApplicationContextapplicationContext=newC
lassPathXmlApplicationContext("applicationContext.xml");//获取Acc
ountDao实例AccountDaoaccountDao=(AccountDao)applicationContext
.getBean("accountDao");//创建Account对象,并向Account对象中添加数据Accounta
ccount=newAccount();account.setId(1);account.setUsername("to
m");account.setBalance(2000.00);//执行updateAccount()方法,并获取返回结果
intnum=accountDao.updateAccount(account);if(num>0){Syste
m.out.println("成功修改了"+num+"条数据!");}else{System.out.printl
n("修改操作执行失败!");}}@TestpublicvoiddeleteAccountTest(){//加载
配置文件ApplicationContextapplicationContext=newClassPathXmlAppl
icationContext("applicationContext.xml");//获取AccountDao实例Accou
ntDaoaccountDao=(AccountDao)applicationContext.getBean("accou
ntDao");//执行deleteAccount()方法,并获取返回结果intnum=accountDao.dele
teAccount(1);if(num>0){System.out.println("成功删除了"+num+"
条数据!");}else{System.out.println("删除操作执行失败!");}}@Testpubli
cvoidfindAccountByIdTest(){//加载配置文件ApplicationContextappli
cationContext=newClassPathXmlApplicationContext("applicationCo
ntext.xml");//获取AccountDao实例AccountDaoaccountDao=(AccountDa
o)applicationContext.getBean("accountDao");//执行findAccountById
()方法Accountaccount=accountDao.findAccountById(1);System.out.println(account);}@TestpublicvoidfindAllAccountTest(){//加载配置文件ApplicationContextapplicationContext=newClassPathXmlApplicationContext("applicationContext.xml");//获取AccountDao实例AccountDaoaccountDao=(AccountDao)applicationContext.getBean("accountDao");//执行findAllAccount()方法,获取Account对象的集合Listaccount=accountDao.findAllAccount();//循环输出集合中的对象for(Accountact:account){System.out.println(act);}}}4.3本章小结本章作业请简述SpringJDBC是如何进行配置的。请简述SpringJdbcTemplate类中几个常用方法的作用。预习作业Spring事务管理的核心接口有哪些?Spring事务管理的方式?
献花(0)
+1
(本文系大量资料原创)