发布网友 发布时间:2022-04-08 03:53
共3个回答
懂视网 时间:2022-04-08 08:14
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://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 >
<!--方法一 继承JdbcDaoSupport -->
<bean id="classesDao" class="cn.itheima03.spring.jdbc.ClassesDaoImpl" >
<property name= "dataSource">
<ref bean= "dataSource"/>
</property>
</bean >
<!--方法二 引入JdbcTemplate,即让JdbcTemplate变成dao的成员变量-->
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate" >
<constructor-arg index= "0" ref="dataSource" ></constructor-arg>
</bean >
<bean id="classesDao2" class="cn.itheima03.spring.jdbc.ClassesDaoImpl2" >
<property name= "jdbcTemplate">
<ref bean= "jdbcTemplate"/>
</property>
</bean >
<!--方法三 继承JdbcTemplate,需要在构造方法中提供数据源 -->
<bean id="classesDao3" class="cn.itheima03.spring.jdbc.ClassesDaoImpl3" >
<constructor-arg index= "0" ref="dataSource" ></constructor-arg>
</bean >
<!-- 方法四 自定义模板 -->
<bean id="itheimaTemplate" class="cn.itheima03.spring.itheima03db.ItHeimaTemplate" >
<constructor-arg index= "0" ref="dataSource" ></constructor-arg>
</bean >
<bean id="classesDao4" class="cn.itheima03.spring.itheima03db.ClassesDaoImpl4" >
<constructor-arg index= "0" ref="dataSource" ></constructor-arg>
</bean >
</beans> ============================================== 位于src目录下的配置文件:jdbc.properties jdbc.driverClassName=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql ://localhost:3306/hibernate_itheima03 jdbc.username=root jdbc.password=root |
/*
* 方式一:继承JdbcDaoSupport,需要使用数据源,在配置文件中应该配置。
*/
public class ClassesDaoImpl extends JdbcDaoSupport implements ClassesDao{
public void saveClasses()
{
this.getJdbcTemplate().execute("insert
into classes(cname,description) values(‘a‘,‘a‘)");
}
@Override public List<Classes> getClasses() { return this .getJdbcTemplate().query("select * from classes", new ClassesRowMapper()) ; } } =================================================== /** * 方式二:引入JdbcTemplate */ public class ClassesDaoImpl2 implements ClassesDao{ private JdbcTemplate jdbcTemplate; public JdbcTemplate getJdbcTemplate() { return jdbcTemplate ; } public void setJdbcTemplate(JdbcTemplate jdbcTemplate) { this.jdbcTemplate = jdbcTemplate; } public void saveClasses() { this.jdbcTemplate .execute("insert into classes(cname,description) values(‘a‘,‘a‘)"); } @Override public List<Classes> getClasses() { return null ; } } =================================================== /** * 方式三:继承JdbcTemplate,写一个以DataSource作为参数的构造函数。 */ public class ClassesDaoImpl3 extends JdbcTemplate implements ClassesDao{ public ClassesDaoImpl3(DataSource dataSource){ super(dataSource); } public void saveClasses() { this.execute("insert into classes(cname,description) values(‘a‘,‘a‘)"); } @Override public List<Classes> getClasses() { return null; } } =================================================== /** * 方式四:自定义模板。 * * 在spring内部完成是面向接口编程 * 在spring的配置文件中,通过set方法或者构造器,给接口注入实现的类 * */ public class ItHeimaTemplate { private DataSource dataSource; public DataSource getDataSource() { return dataSource ; } public void setDataSource(DataSource dataSource) { this.dataSource = dataSource; } public ItHeimaTemplate(){} public ItHeimaTemplate(DataSource dataSource){ this.dataSource = dataSource; } /** * 实现插入数据 */ public void insert(String sql){ try { Connection conn = this.d 热心网友 时间:2022-04-08 05:22 defaultAutoCommit 的意思是你如果没有使用事物来控制点的话,他会自动提交(一条语句执行就会提交)比如:在一个service的save方法中 public void save(){ .save1(); 执行完save1后会自动提交。如果你使用了事物控制,那么会在这个方法都执行完后提交的 .save2(); } 换句话就是说就算你不配置事物,数据也会保存到数据库中的,应为spring默认的是defaultAutoCommit自动提交 理解不?追问大概理解了,也就是说如果配置了事务的话,就跟defaultAutoCommit 的设置无关了对吗? 顺便再教教我吧,比如说在service里面两个save方法,如果是 @Transaction public void save1(){...} @Transaction public void save2(){...} 然后一个方法当中同时调用了save1和save2这是两个事务还是一个啊? 追答肯定是两个事务了。
热心网友 时间:2022-04-08 06:40 这样可能不太规范 可以后期还是会出现问题的不管你是用标签,还是用注释 commit只能放在DAO层里面就可以了 (sql语句不出DAO) 如果说你要用标签的话你可以把commint 放到标签类中 标签调用 或者是 直接把commit 直接写在增删改查类中的方法中insert update delete select 之后 jdbcTemplate.conmit (调用那边的commit方法) 声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
懂视 51dongshi.com 版权所有
Copyright © 2019-2024 |