zoukankan      html  css  js  c++  java
  • JavaWeb学习之Spring框架(二)

    spring整合JDBC

    spring提供了很多模板整合Dao技术

    spring中提供了一个可以操作数据库的对象,对象封装了jdbc技术

       JDBCTemplate----JDBC模板技术

     与DButils中的QueryRunner非常相似

    package com.jdbcdemo;
    
    import java.beans.PropertyVetoException;
    
    import org.junit.Test;
    import org.springframework.jdbc.core.JdbcTemplate;
    
    import com.mchange.v2.c3p0.ComboPooledDataSource;
    
    public class JDBCDemo {
    	@Test
           public  void  method() throws PropertyVetoException{
        	   //创建连接池对象
        	   ComboPooledDataSource  dataSource =new ComboPooledDataSource();
        	   dataSource.setDriverClass("com.mysql.jdbc.Driver");
        	   dataSource.setJdbcUrl("jdbc:mysql:///spring_demo?characterEncoding=utf-8");
        	   dataSource.setUser("root");
        	   dataSource.setPassword("123456");
        	   //创建JDBC模板对象
        	   JdbcTemplate  jdbcTemplate=new JdbcTemplate();
        	   jdbcTemplate.setDataSource(dataSource);
        	   //书写sql语句并执行
        	   String  sql="insert  into  s_user(name)  values('李四')";
        	   jdbcTemplate.update(sql);
           }
    }
    

    步骤:导包:4个基础包+2个日志包+spring-test、spring-aop、junit4类库+c3p0连接池、spring-tx事务

               准备数据库

                书写Dao层

    package com.dao;
    
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.util.List;
    
    import org.springframework.jdbc.core.JdbcTemplate;
    import org.springframework.jdbc.core.RowMapper;
    import org.springframework.jdbc.core.support.JdbcDaoSupport;
    
    import com.domain.User;
    
    public class UserDao extends JdbcDaoSupport {
    	// private JdbcTemplate jdbcTemplate;
    	//
    	// public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
    	// this.jdbcTemplate = jdbcTemplate;
    	// }
    
    	public void save(User user) {
    		String sql = "insert  into   s_user(name) values(?)";
    		getJdbcTemplate().update(sql, user.getName());
    	}
    
    	public void update(User user) {
    		String sql = "update  s_user  set  name=? where id=?";
    		getJdbcTemplate().update(sql, user.getName(), user.getId());
    	}
    
    	public void delete(Integer id) {
    		String sql = "delete  from s_user  where id=?";
    		getJdbcTemplate().update(sql, id);
    	}
    
    	// 单个对象查询
    	public User findById(Integer id) {
    		String sql = "select  * from  s_user where id=?";
    		return getJdbcTemplate().queryForObject(sql, new RowMapper<User>() {
    
    			public User mapRow(ResultSet rs, int arg1) throws SQLException {
    				// TODO Auto-generated method stub
    				User user = new User();
    				user.setId(rs.getInt("id"));
    				user.setName(rs.getString("name"));
    				return user;
    			}
    		}, id);
    	}
    
    	// 查询单个值
    	public int getCount() {
    		String sql = "select  count(*) from s_user";
    		return getJdbcTemplate().queryForObject(sql, Integer.class);
    	}
    
    	// 查询List<User>
    	public List<User> getAll() {
    		String sql = "select  *  from  s_user";
    		return getJdbcTemplate().query(sql, new RowMapper<User>() {
    
    			public User mapRow(ResultSet rs, int arg1) throws SQLException {
    				// TODO Auto-generated method stub
    				User user = new User();
    				user.setId(rs.getInt("id"));
    				user.setName(rs.getString("name"));
    				return user;
    			}
    		});
    	}
    }
    

      spring配置

            

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.springframework.org/schema/beans" xmlns:context="http://www.springframework.org/schema/context" 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-4.2.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.2.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.2.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.2.xsd ">
       <!-- datasource -->
       <context:property-placeholder location="classpath:db.properties"/>
       <bean name="transactionManager"  class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
       <property name="dataSource" ref="dataSource"></property>
       </bean>
       <bean  name="dataSource"  class="com.mchange.v2.c3p0.ComboPooledDataSource">
          <property name="driverClass"  value="${jdbc.driverClass}"></property>
          <property name="jdbcUrl"  value="${jdbc.jdbcUrl}"></property>
          <property name="user"  value="${jdbc.user}"></property>
          <property name="password"  value="${jdbc.password}"></property>
       </bean>
       <!-- jdbcTemplate -->
      <!--  <bean  name="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
         <property name="dataSource" ref="dataSource"></property>
      </bean>-->
      <!-- UserDao -->
      <bean  name="userDao"  class="com.dao.UserDao">
         <property name="dataSource"  ref="dataSource"></property>
      </bean>
        <!-- AccountDao -->
      <bean name="accountDao"  class="com.dao.AccountDao">
           <property name="dataSource"  ref="dataSource"></property>
      </bean>
      <bean name="accountService"  class="com.service.AccountService">
           <property name="accountDao"  ref="accountDao"></property>
      </bean>
      <!-- 注解配置事务 -->
      <tx:annotation-driven/>
      <!-- XML配置事务 -->
      <!--  <tx:advice id="txAdvice" transaction-manager="transactionManager">
          <tx:attributes>
              <tx:method name="transfer"  isolation="REPEATABLE_READ"  propagation="REQUIRED"  read-only="false"/>
          </tx:attributes>
      </tx:advice>
      <aop:config>
           <aop:pointcut expression="execution(* com.service.*Service.*(..))" id="txpc"/>
           <aop:advisor advice-ref="txAdvice" pointcut-ref="txpc"/>
      </aop:config>-->
    </beans>
    

            测试

    package com.test;
    
    import org.junit.Test;
    import org.junit.runner.RunWith;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.beans.factory.annotation.Qualifier;
    import org.springframework.test.context.ContextConfiguration;
    import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
    
    import com.dao.UserDao;
    import com.domain.User;
    import com.service.AccountService;
    
    @RunWith(SpringJUnit4ClassRunner.class)
    @ContextConfiguration("classpath:applicationContext.xml")
    public class Demo {
    	// 引用注入
    	@Autowired // 自动装配
    	@Qualifier("userDao") // 使用Qualifier注解告诉spring容器自动装配哪个名称的对象
    	private UserDao userDao;
    	@Autowired // 自动装配
    	@Qualifier("accountService")
    	private AccountService accountService;
    
    	@Test
    	public void method1() {
    		User user = new User();
    		user.setName("qwerty");
    		userDao.save(user);
    	}
    
    	@Test
    	public void method2() {
    		accountService.transfer(1, 2, 2000d);
    	}
    }
    

    进阶内容

    JDBCDaoSupport

     

      读取外部的properties配置

    jdbc.driverClass=com.mysql.jdbc.Driver
    jdbc.jdbcUrl=jdbc:mysql:///spring_demo?characterEncoding=utf-8
    jdbc.user=root
    jdbc.password=123456
    

    spring中的aop事务

      事务:事务特性:acid

                      事务并发问题:脏读、不可重复读、幻读

                      事务的隔离级别:1 读未提交  2 读已提交  4 可重复读  8  串行化

          spring封装了事务管理代码

                 事务操作:打开事务、提交事务、回滚事务

                 事务操作对象:因为在不同平台,操作事务的代码各不相同,spring提供了一个接口

                 PlatformTransactionManager接口:DataSourceTransactionManager

                                                                               HibernateTransitionmanager

                                  注:在spring中玩事务管理,最为核心的对象就是TransactionManager

                 spring管理事务的属性介绍:事务的隔离级别:1 读未提交  2 读已提交  4 可重复读  8  串行化

                                                               是否只读:true  只读   false  可操作

                                                                事务的传播行为

    spring管理事务的方式

         XML配置(aop)

         注解配置(aop)

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.springframework.org/schema/beans" xmlns:context="http://www.springframework.org/schema/context" 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-4.2.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.2.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.2.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.2.xsd ">
       <!-- datasource -->
       <context:property-placeholder location="classpath:db.properties"/>
       <bean name="transactionManager"  class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
       <property name="dataSource" ref="dataSource"></property>
       </bean>
       <bean  name="dataSource"  class="com.mchange.v2.c3p0.ComboPooledDataSource">
          <property name="driverClass"  value="${jdbc.driverClass}"></property>
          <property name="jdbcUrl"  value="${jdbc.jdbcUrl}"></property>
          <property name="user"  value="${jdbc.user}"></property>
          <property name="password"  value="${jdbc.password}"></property>
       </bean>
       <!-- jdbcTemplate -->
      <!--  <bean  name="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
         <property name="dataSource" ref="dataSource"></property>
      </bean>-->
      <!-- UserDao -->
      <bean  name="userDao"  class="com.dao.UserDao">
         <property name="dataSource"  ref="dataSource"></property>
      </bean>
        <!-- AccountDao -->
      <bean name="accountDao"  class="com.dao.AccountDao">
           <property name="dataSource"  ref="dataSource"></property>
      </bean>
      <bean name="accountService"  class="com.service.AccountService">
           <property name="accountDao"  ref="accountDao"></property>
      </bean>
      <!-- 注解配置事务 -->
      <tx:annotation-driven/>
      <!-- XML配置事务 -->
      <!--  <tx:advice id="txAdvice" transaction-manager="transactionManager">
          <tx:attributes>
              <tx:method name="transfer"  isolation="REPEATABLE_READ"  propagation="REQUIRED"  read-only="false"/>
          </tx:attributes>
      </tx:advice>
      <aop:config>
           <aop:pointcut expression="execution(* com.service.*Service.*(..))" id="txpc"/>
           <aop:advisor advice-ref="txAdvice" pointcut-ref="txpc"/>
      </aop:config>-->
    </beans>
    

      

      

  • 相关阅读:
    bzoj1724[Usaco2006 Nov]Fence Repair 切割木板*
    vue-cli脚手架和webpack-simple模板项目
    Vue-router 进阶
    前端路由vue-router介绍
    vue的一些特殊特性
    生命周期钩子
    过滤器
    RSA加密算法
    欧几里得算法
    动态规划
  • 原文地址:https://www.cnblogs.com/Java-125/p/9187664.html
Copyright © 2011-2022 走看看