public void addUser(Webuserlogin user) { //增 this.getHibernateTemplate().save(user); } public void delUser(int userid) { //删 this.getHibernateTemplate().delete(queryById(userid)); } public Webuserlogin queryById(int userid) { //根据ID查询 return this.getHibernateTemplate().get(Webuserlogin.class, userid); } public void updateUser(Webuserlogin user) { //改 Webuserlogin users = this.queryById(user.getUserid()); users.setUserrealname(user.getUserrealname()); users.setUseraddress(user.getUseraddress()); this.getHibernateTemplate().merge(users); } public List<Webuserlogin> queryList() { //查 return this.getHibernateTemplate().find("From Webuserlogin"); } public Webuserlogin loginWeb(Webuserlogin user) { //登陆 == 按用户名/密码查询 List<Webuserlogin> list = this .getHibernateTemplate() .find( "From Webuserlogin wul Where wul.username = ? and wul.userpwd= ?", user.getUsername(), user.getUserpwd()); if (list != null && list.size() > 0) { return user; } return null; }
但是Spring的增删改查并没有将事务整合进去.给我们提供事务的切面,而在实际开发中,增删改查没有事务是非常不利于数据维护的.所以Spring在它的配置文件中给我们提供了用户自定义配置事务的方法.
<!-- 使用事务!!! --> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource"></property> </bean> <!-- 配置事务中方法的属性 --> <tx:advice id="transactionAdvice" transaction-manager="transactionManager"> <tx:attributes> <!-- update* 表示这个事务对 * com.services.*.*(..)中的update开头的方法都有效;
对于一些只读(比如登陆)的数据,可以设置readonly=true-->
<tx:method name="update*" propagation="REQUIRED" />
<tx:method name="del*" propagation="REQUIRED" />
<tx:method name="add*" propagation="REQUIRED" />
<tx:method name="*" propagation="REQUIRED" />
</tx:attributes>
</tx:advice>
<!--配置生效位置 -->
<aop:config>
<!-- 第一个星号:方法的返回值为次类型的值时生效(com.model.Webuserlogin/String);
2.services中的哪一个类生效 userServices*;
3.类中的何种方法生效del*;(..)方法中何种参数时生效 -->
<aop:advisor advice-ref="transactionAdvice"
pointcut="execution(* com.services.*.*(..))" />
</aop:config>
事务配置成功之后,在配置文件(applicationContext.xml)和serviceImpl层会有对应的call out--call in小电话上图--