zoukankan      html  css  js  c++  java
  • spring(三)数据库操作事务的注解形式

    今天内容介绍

    1.基于aspectj的注解aop操作(会用)

    1) 使用注解操作方式实现aop操作

    第一步:创建对象

     

    第二步:在spring核心配置文件中,开启aop操作

     

    第三步:在增强的类里面使用注解完成aop操作

     

    2.spring的jdbcTemplate操作

    1.spring框架一站式框架

    1)针对javaee三层,每一层都有解决技术

    2)在dao层,使用jdbcTemplate

    2.Spring对不同的持久化技术都做了封装

     

    1jdbcTemplatejdbc进行了封装

    3. jdbcTemplate使用和dbutils使用很相似,都是数据库进行crud操作

    1)实现crud操作

    第一步:导入jar

     

    第二步:创建对象,设置数据库信息

    第三步:创建jdbcTemplate对象,设置数据源

    第四步:调用jdbcTemplate对象里面的方法实现操作

    增加操作:


    public void add() { // 第二步:创建对象,设置数据库信息 DriverManagerDataSource dataSource = new DriverManagerDataSource(); dataSource.setDriverClassName("com.mysql.jdbc.Driver"); dataSource.setUrl("jdbc:mysql:///hibernate"); dataSource.setUsername("root"); dataSource.setPassword("1234"); // 第三步:创建jdbcTemplate对象,设置数据源 JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource); // 第四步:调用jdbcTemplate对象里面的方法实现操作 String sql = "insert into test values(?,?,?)"; int row = jdbcTemplate.update(sql, 3, "jieke", "253"); System.out.println("行号:" + row); }

    修改:

    public void update() {
            // 第二步:创建对象,设置数据库信息
            DriverManagerDataSource dataSource = new DriverManagerDataSource();
            dataSource.setDriverClassName("com.mysql.jdbc.Driver");
            dataSource.setUrl("jdbc:mysql:///hibernate");
            dataSource.setUsername("root");
            dataSource.setPassword("1234");
    
            // 第三步:创建jdbcTemplate对象,设置数据源
            JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
    
            // 第四步:调用jdbcTemplate对象里面的方法实现操作
            String sql = "update test set password=? where uid=?";
            int row = jdbcTemplate.update(sql, "455", 1);
            System.out.println("行号:" + row);
        }

     删除:

    public void delete() {
            // 第二步:创建对象,设置数据库信息
            DriverManagerDataSource dataSource = new DriverManagerDataSource();
            dataSource.setDriverClassName("com.mysql.jdbc.Driver");
            dataSource.setUrl("jdbc:mysql:///hibernate");
            dataSource.setUsername("root");
            dataSource.setPassword("1234");
            // 第三步:创建jdbcTemplate对象,设置数据源
            JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
            // 第四步:调用jdbcTemplate对象里面的方法实现操作
            String sql = "delete from test where uid=?";
            int row = jdbcTemplate.update(sql, 1);
            System.out.println("行号:" + row);
        }

    查询(重点)

    1.使用jdbc

    QueryRunner runner=new QueryRunner(datasource);
    //返回对象
    runner.query(sql,new BeanHandler<User>(User.class));
    //返回list集合
    runner.query(sql,new BeanListHandler<User>(User.class))
    // 在dbutils时候,有接口ResultSetHandler
    
    //dbutils提供了针对不同的结果实现类
    //2,在jdbcTemplate实现查询,有接口RowMapper
    //jdbcTemplate针对这个接口没有提供实现类,得到不同的类型数据需要自己进行数据封装

    2.查询的具体实现

    第一个 查询返回某一个值

    1.queryForObjectString sqlClass<T>required

    原始JDBC代码:

    public void testJDBC() {
    Connection conn = null;
    PreparedStatement psmt = null;
    ResultSet rs = null;
    try {
    Class.forName("com.mysql.jdbc.Driver");
    // 创建连接
    conn = (Connection) DriverManager.getConnection("jdbc:mysql:///hibernate","root","1234");
    String sql = "select * from test where username=?";
     
    psmt = (PreparedStatement) conn.prepareStatement(sql);
    psmt.setString(1, "rose");
    rs = psmt.executeQuery();
    // 遍历结果集 while (rs.next()) { String username = rs.getString("username"); String password = rs.getString("password"); User user=new User(); user.setUsername(username); user.setPassword(password); System.out.println(user); } } catch (Exception e) { e.printStackTrace(); } finally { try { rs.close(); psmt.close(); conn.close(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }

    第二个 查询返回某一个对象

     

    第一个接口是SQL语句,

    第二个接口是RowMapper,是一个接口,类似于dbutils里面接口

     

    第三个参数是一个可变参数,这里的MyRowMapper要自己写

    class MyRowMapper implements RowMapper<User> {
        @Override
        public User mapRow(ResultSet rs, int num) throws SQLException {
        // 1.从结果集里面把数据得到
        String username = rs.getString("username");
        String password = rs.getString("password");
    
        // 2.把得到的数据封装到对象里面
        User user = new User();
        user.setUsername(username);
        user.setPassword(password);
        return user;
        }
    }

    第三个 查询返回某一个集合

     

    spring配置连接池

    配置c3p0连接池

    第一步:导入jar

     

    第二步 创建spring的配置文件,配置连接池

     

    jdbcTemplate里面注入dataSource属性值

     

    2.dao使用jdbcTemplate

    1)创建servicedao,配置servicedao对象,在service注入dao对象

     

    2)创建jdbcTemplate对象,把模板对象注入到dao里面去

     

    3)在jdbcTemplate里面注入DataSource属性,因为源代码里面有这个dataSource

    spring事务管理

    事务概念

    1.什么事务

    2.事务特性

    3.不考虑隔离性产生读问题

    多个事务之间不会产生影响

    4.解决读问题

    1)设置隔离级别

    spring事务管理api

    1.spring事务管理两种方式

    第一种:编程式事务管理(不用)

    第二种:声明式事务管理

    1)基于xml配置文件实现

    2)基于注解实现

    2.spring事务管理api介绍

     

    1spring针对不同的dao层框架,提供接口不同的实现表

     

    2)首先配置事务的管理器

    搭建转账环境

    1.创建数据库表,添加数据

     

    转账,小王少一千,小马多一千

    2.创建servicedao类,完成注入操作

     

    1service层又叫业务逻辑层

    2dao层,单纯的数据库操作层,在dao层不添加业务

     

    3)需求,小王转账1000给小马,

    -小王少一千,小马多一千

     

    3.产生问题:如果中途出现异常,一个少了一千,一个没有增加

    4.解决问题

    1)添加一个事务,回滚

    声明事务管理(xml配置)

    1.配置文件方式使用aop思想

    第一步:配置事务管理器

     

    第二步:配置事务增强

     

    第三步:配置切面

     

    声明事务管理(注解)

    第一步:配置事务管理器

     

    第二步:配置事务注解

     

    第三步:在要使用事务的方法所在类上面添加注解

     

  • 相关阅读:
    C++学习 之 继承(笔记)
    C++学习 之 类中的特殊函数和this指针(笔记)
    C++学习 之 类的声明及成员的访问(笔记)
    C++学习 之 指针及动态内存分配(笔记)
    C++学习 之 函数的重载及内联(笔记)
    C++学习 之 控制程序流程 (笔记)
    pkg-config too old的解决方法
    编译中出现的undefined reference to XXX
    sourceInsight下标题栏显示文件完整路径
    linux下 sleep() 与 usleep()
  • 原文地址:https://www.cnblogs.com/yq12138/p/7210242.html
Copyright © 2011-2022 走看看