zoukankan      html  css  js  c++  java
  • Spring框架基础(中)

    • Spring对不同持久化技术进行支持
      • JDBC
        • 导入spring-jdbc-4.3.5.RELEASE.jar、spring-tx-4.3.5.RELEASE.jar
        • 创建对象,设置数据库信息
        • 创建jdbcTemplate对象,设置数据源
        • 调用jdbcTemplate对象里面对方法实现操作
          public class TestDao {
          
                /**
                * 添加指定数据表的数据
                */
              public void insertUser() {
          
                  try {
                      //导入配置文件
                      InputStream inputStream = this.getClass().getClassLoader().getResourceAsStream("db.properties");
                      Properties properties = new Properties();
                      properties.load(inputStream);
                      //获取参数
                      String driver = properties.getProperty("jdbc.driver");
                      String url = properties.getProperty("jdbc.url");
                      String username = properties.getProperty("jdbc.username");
                      String password = properties.getProperty("jdbc.password");
                      //
                      DriverManagerDataSource driverManagerDataSource = new DriverManagerDataSource();
                      driverManagerDataSource.setJdbcUrl(driver);
                      driverManagerDataSource.setJdbcUrl(url);
                      driverManagerDataSource.setUser(username);
                      driverManagerDataSource.setPassword(password);
                      //数据库语句
                      String sql = "insert into user (username,password,email,root,register_time) values (?,?,?,?,?) ";
                      //
                      JdbcTemplate jdbcTemplate = new JdbcTemplate(driverManagerDataSource);
                      int rows = jdbcTemplate.update(sql,"rabbit","rabbit","rabbit@qq.com",1,"2019-3-2");
          
                      System.out.println("rows="+rows);
                  } catch (IOException e) {
                      e.printStackTrace();
                  }
          
              }
          
                /**
                * 更新指定数据表的数据
                */
             public void updateUser() {
          
                  try {
                      //导入配置文件
                      InputStream inputStream = this.getClass().getClassLoader().getResourceAsStream("db.properties");
                      Properties properties = new Properties();
                      properties.load(inputStream);
                      //获取参数
                      String driver = properties.getProperty("jdbc.driver");
                      String url = properties.getProperty("jdbc.url");
                      String username = properties.getProperty("jdbc.username");
                      String password = properties.getProperty("jdbc.password");
                      //
                      DriverManagerDataSource driverManagerDataSource = new DriverManagerDataSource();
                      driverManagerDataSource.setJdbcUrl(driver);
                      driverManagerDataSource.setJdbcUrl(url);
                      driverManagerDataSource.setUser(username);
                      driverManagerDataSource.setPassword(password);
                      //数据库语句
                   
                      String sql = "update user set phone = ? where username = ?";
                      //
                      JdbcTemplate jdbcTemplate = new JdbcTemplate(driverManagerDataSource);
                      
                      int rows = jdbcTemplate.update(sql,"13812392132","rabbit");
                      System.out.println("rows=" + rows);
                  } catch (IOException e) {
                      e.printStackTrace();
                  }
          
              }
                /**
                * 查询全部数据
                */
              public void selectAllUser() {
          
                  try {
                      //导入配置文件
                      InputStream inputStream = this.getClass().getClassLoader().getResourceAsStream("db.properties");
                      Properties properties = new Properties();
                      properties.load(inputStream);
                      //获取参数
                      String driver = properties.getProperty("jdbc.driver");
                      String url = properties.getProperty("jdbc.url");
                      String username = properties.getProperty("jdbc.username");
                      String password = properties.getProperty("jdbc.password");
                      //
                      DriverManagerDataSource driverManagerDataSource = new DriverManagerDataSource();
                      driverManagerDataSource.setJdbcUrl(driver);
                      driverManagerDataSource.setJdbcUrl(url);
                      driverManagerDataSource.setUser(username);
                      driverManagerDataSource.setPassword(password);
                      //数据库语句
                    
                      String sql = "select * from user";
                      //
                      JdbcTemplate jdbcTemplate = new JdbcTemplate(driverManagerDataSource);
                    
                      List<Map<String, Object>> maps = jdbcTemplate.queryForList(sql);
                      System.out.println("maps=" + maps);
                  } catch (IOException e) {
                      e.printStackTrace();
                  }
          
              }
              /**
               * 删除指定数据
               */
              public void deleteUser() {
                
                  try {
                      //导入配置文件
                      InputStream inputStream = this.getClass().getClassLoader().getResourceAsStream("db.properties");
                      Properties properties = new Properties();
                      properties.load(inputStream);
                      //获取参数
                      String driver = properties.getProperty("jdbc.driver");
                      String url = properties.getProperty("jdbc.url");
                      String username = properties.getProperty("jdbc.username");
                      String password = properties.getProperty("jdbc.password");
                      //
                      DriverManagerDataSource driverManagerDataSource = new DriverManagerDataSource();
                      driverManagerDataSource.setJdbcUrl(driver);
                      driverManagerDataSource.setJdbcUrl(url);
                      driverManagerDataSource.setUser(username);
                      driverManagerDataSource.setPassword(password);
                      //数据库语句
                    
                      String sql = "delete from user where username = ?";
                      //
                      JdbcTemplate jdbcTemplate = new JdbcTemplate(driverManagerDataSource);
               
                      int row = jdbcTemplate.update(sql, "rabbit");
                      System.out.println("row=" + row);
                  } catch (IOException e) {
                      e.printStackTrace();
                  }
          
               }
          
                /**
                * 查询指定数据表的记录数
                */
                public void selectCountUser() {
                      try {
                      //导入配置文件
                      InputStream inputStream = this.getClass().getClassLoader().getResourceAsStream("db.properties");
                      Properties properties = new Properties();
                      properties.load(inputStream);
                      //获取参数
                      String driver = properties.getProperty("jdbc.driver");
                      String url = properties.getProperty("jdbc.url");
                      String username = properties.getProperty("jdbc.username");
                      String password = properties.getProperty("jdbc.password");
                      //
                      DriverManagerDataSource driverManagerDataSource = new DriverManagerDataSource();
                      driverManagerDataSource.setJdbcUrl(driver);
                      driverManagerDataSource.setJdbcUrl(url);
                      driverManagerDataSource.setUser(username);
                      driverManagerDataSource.setPassword(password);
                      //数据库语句
                   
                      String sql = "select count(*) from user";
                      //
                      JdbcTemplate jdbcTemplate = new JdbcTemplate(driverManagerDataSource);
                      //第一个参数sql语句,第二个参数返回的数据类型
                      Integer count = jdbcTemplate.queryForObject(sql,Integer.class);
                      System.out.println("count=" + count);
                  } catch (IOException e) {
                      e.printStackTrace();
                  }
          
              }
              
              
              public void   selectUser();() {
          
                  try {
                      //导入配置文件
                      InputStream inputStream = this.getClass().getClassLoader().getResourceAsStream("db.properties");
                      Properties properties = new Properties();
                      properties.load(inputStream);
                      //获取参数
                      String driver = properties.getProperty("jdbc.driver");
                      String url = properties.getProperty("jdbc.url");
                      String username = properties.getProperty("jdbc.username");
                      String password = properties.getProperty("jdbc.password");
                      //
                      DriverManagerDataSource driverManagerDataSource = new DriverManagerDataSource();
                      driverManagerDataSource.setJdbcUrl(driver);
                      driverManagerDataSource.setJdbcUrl(url);
                      driverManagerDataSource.setUser(username);
                      driverManagerDataSource.setPassword(password);
                      //数据库语句
                    
                      String sql = "select * from user where username = ?";
                      
                      User user = jdbcTemplate.queryForObject(sql, new NewRowMapper(), "rabbit");
                      JSONObject jsonObject = JSONObject.fromObject(user);
                      System.out.println(jsonObject + "");
                  } catch (IOException e) {
                      e.printStackTrace();
                  }
          
              }
          
          
              /**
              * 处理查询结果集
              */
              class NewRowMapper implements RowMapper<User> {
          
          
                  @Override
                  public User mapRow(ResultSet resultSet, int i) throws SQLException {
          
          
                      try {
                          Class<?> newClass = Class.forName("cn.muriel.auto.pojo.User");
                          Object o = newClass.newInstance();
                          for (int j = 1; j <= resultSet.getMetaData().getColumnCount(); j++) {
                              String name = resultSet.getMetaData().getColumnName(j);
                              String type = resultSet.getMetaData().getColumnTypeName(j);
                              //针对只有一次_的情况,多次则可用递归
                              if (name.contains("_")) {
                                  int position = name.indexOf("_");
                                  String smailChar = name.substring(position + 1, position + 2).toUpperCase();
                                  name = name.substring(0, position) + smailChar + name.substring(position + 2, name.length());
                              }
                              Field declaredField = newClass.getDeclaredField(name);
                              if (declaredField != null) {
                                  declaredField.setAccessible(true);
                                  if (type.equals("INT"))
                                      declaredField.set(o, resultSet.getInt(name));
                                  else if (type.equals("VARCHAR"))
                                      declaredField.set(o, resultSet.getString(name));
                              }
          
                          }
                          return (User) o;
          
                      } catch (ClassNotFoundException e) {
                          e.printStackTrace();
                      } catch (IllegalAccessException e) {
                          e.printStackTrace();
                      } catch (InstantiationException e) {
                          e.printStackTrace();
                      } catch (NoSuchFieldException e) {
                          e.printStackTrace();
                      }
          
          
                      return null;
                  }
              }
              
          }
          
          
          
          /**
          * 测试代码
          */
           public static void main(String[] args) {
          
          
             
                  Test01 test01 = (Test01) applicationContext.getBean("test01");
                  test01.test01();*/
          
                  TestDao dao = new TestDao();
                  dao.insertUser();
                  dao.updateUser();
                  dao.selectAllUser();
                    dao.selectUser();
                  dao.selectCountUser();
          }    
              
        • spring配置c3p0连接池
          • 导入mchange-commons-java-0.2.11.jar、c3p0-0.9.5.2.jar
          • 连接连接池
            • 代码实现
                InputStream inputStream = this.getClass().getClassLoader().getResourceAsStream("db.properties");
                      Properties properties = new Properties();
                      try {
                          properties.load(inputStream);
                          //获取参数
                          String driver = properties.getProperty("jdbc.driver");
                          String url = properties.getProperty("jdbc.url");
                          String username = properties.getProperty("jdbc.username");
                          String password = properties.getProperty("jdbc.password");
                          ComboPooledDataSource comboPooledDataSource = new ComboPooledDataSource();
                          comboPooledDataSource.setDriverClass(driver);
                          comboPooledDataSource.setJdbcUrl(url);
                          comboPooledDataSource.setUser(username);
                          comboPooledDataSource.setPassword(password);
                      } catch (IOException e) {
                          e.printStackTrace();
                      } catch (PropertyVetoException e) {
                          e.printStackTrace();
                      }
            • 注入实现
              <?xml version="1.0" encoding="UTF-8" ?>
              <!--
                  http://www.springframework.org/schema/context/spring-context.xsd:用于注解的约束
               -->
              <beans xmlns="http://www.springframework.org/schema/beans"
                     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                     xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="
                      http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
                      http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
              
                  <!-- 自动注入
                  <context:component-scan base-package="cn.muriel.auto.dao"/> -->
              
                  <context:property-placeholder location="db.properties"/>
                  <!-- 配置注入 -->
                  <bean id="userDao" class="cn.muriel.auto.dao.UserDao"/>
              
              
                  <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
                      <property name="driverClass" value="${jdbc.driver}"></property>
                      <property name="jdbcUrl" value="${jdbc.url}"></property>
                      <property name="user" value="${jdbc.username}"></property>
                      <property name="password" value="${jdbc.password}"></property>
                  </bean>
              
              
                  <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
                      <property name="dataSource" ref="dataSource"/>
                  </bean>
              
                  <bean id="testDao" class="cn.muriel.auto.dao.TestDao">
                      <property name="jdbcTemplate" ref="jdbcTemplate"/>
                  </bean>
              
              </beans>
      • Hibernate
      • Ibatis(MyBatis)
      • JPA
    • Spring的事务管理
      • 什么是事务
      • 事务的特性
      • 不考虑隔离性产生读问题
      • 解决读问题
        • 设置隔离级别
      • spring事务管理两种方式
        • 编程式事务管理
        • 声明式事务管理
          • 基于xml配置文件实现
             <!-- 配置事务管理器 -->
                <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
                    <!-- 注入dataSource -->
                    <property name="dataSource" ref="dataSource"/>
                </bean>
                <!-- 配置事务增强 -->
                <tx:advice id="txadvice" transaction-manager="transactionManager">
                    <!-- 做事务操作 -->
                    <tx:attributes>
                        <!--
                            设置进行事务操作的方法匹配规则
                            name:匹配名字
                            propagation:默认。
                         -->
                        <tx:method name="insert*" propagation="REQUIRED"/>
                    </tx:attributes>
                </tx:advice>
                <!-- 配置切面 -->
                <aop:config>
                    <!-- 切入点 -->
                    <aop:pointcut id="pointcut1" expression="* (cn.muriel.auto.service.TestService.*)(..)"/>
                    <!-- 切面 -->
                    <aop:advisor advice-ref="txadvice" pointcut-ref="pointcut1"/>
                </aop:config>
          • 基于注解实现
              <!-- 配置事务管理器 -->
                <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
                    <!-- 注入dataSource -->
                    <property name="dataSource" ref="dataSource"/>
                </bean>
                <!-- 配置事务注解 -->
                <tx:annotation-driven transaction-manager="transactionManager"/>
            
            
            /**
             * 使用事务的方法所在类上面添加注解
             */
            @Transactional
            public class TestService {
            
                
            }
      • spring事务管理高层抽象主要包括3个接口
        • PlatformTransactionManager(事务管理器)
          • spring针对不同的dao层框架,提供接口不同的实现类
          • 首先都要配置事务管理器
        • TransactionDefinition(事务定义信息(隔离、传播、超时、只读))
        • TransactionStatus(事务具体运行状态)
  • 相关阅读:
    8张图带你轻松温习 Java 知识.md
    关于 Java 序列化你不知道的 5 件事
    为什么 String 是不可变的?
    如何使用 Nginx 优雅地限流?
    JAVA泛型编程笔记
    java_接口的应用
    java_抽象类应用
    深入理解Java的接口和抽象类
    java_重写与重载的区别
    Java:按值传递还是按引用传递详细解说
  • 原文地址:https://www.cnblogs.com/fatRabbit-/p/10562544.html
Copyright © 2011-2022 走看看