美文网首页JAVAEE
JAVAEE框架学习——Spring——整合JDBC aop中的

JAVAEE框架学习——Spring——整合JDBC aop中的

作者: So_ProbuING | 来源:发表于2018-06-13 17:39 被阅读11次

    Spring整合JDBC

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

    JDBCTemplate => JDBC模板对象
    与DBUtils中的QueryRunner非常相似

     //准备连接池
            ComboPooledDataSource dataSource = new ComboPooledDataSource();
            dataSource.setDriverClass("com.mysql.jdbc.Driver");
            dataSource.setJdbcUrl("jdbc:mysql://103.249.130.173:3306/hibernate_crm?useUnicode=true&characterEncoding=UTF8");
            dataSource.setUser("appUser");
            dataSource.setPassword("AA1122BB");
            //创建JDBC模板对象
            JdbcTemplate jt = new JdbcTemplate();
            jt.setDataSource(dataSource);
            //书写sql语句并执行
            String sql = "insert into t_user values(null,'rose')";
            jt.update(sql);
    

    Spring整合Dao 数据库

    步骤

    1 导包

    • 4+2 spring包
    • spring-test、spring-aop、junit4类库
    • c3p0连接池 JDBC驱动
    • spring-jdbc spring-tx事务

    2 准备数据库

    数据库

    书写Dao

    public interface TUserDao {
        //增
        void save(TUser user);
        //删除
        void delete(Integer id);
        //改
        void update(TUser user);
        //查
        TUser getById(Integer id);
    
        int getTotalCount();
    
        List<TUser> getAllTUser();
    }
    

    书写实现类impl

    public class TUserDaoImpl implements TUserDao {
        private JdbcTemplate jt;
    
        @Override
        public void save(TUser user) {
            String sql = "insert into t_user values(null,?)";
            jt.update(sql, user.getName());
        }
    
        @Override
        public void delete(Integer id) {
            String sql = "delete from t_user where id = ?";
            jt.update(sql, id);
        }
    
        @Override
        public void update(TUser user) {
            String sql = "update t_user set name = ? where id =?";
            jt.update(sql, user.getName(), user.getId());
        }
    
        @Override
        public TUser getById(Integer id) {
            String sql = "select * from t_user where id = ?";
            TUser tUser = jt.queryForObject(sql, new RowMapper<TUser>() {
                @Override
                public TUser mapRow(ResultSet resultSet, int i) throws SQLException {
                    TUser tUser = new TUser();
    
                    tUser.setId(resultSet.getInt("id"));
                    tUser.setName(resultSet.getString("name"));
                    return tUser;
                }
            }, id);
            return tUser;
        }
    
        @Override
        public int getTotalCount() {
            String sql = "select count(*) from t_user";
            Integer count = jt.queryForObject(sql, Integer.class);
            return count;
        }
    
        @Override
        public List<TUser> getAllTUser() {
            String sql = "select * from t_user";
            List<TUser> query = jt.query(sql, new RowMapper<TUser>() {
                @Override
                public TUser mapRow(ResultSet resultSet, int i) throws SQLException {
                    TUser tUser = new TUser();
    
                    tUser.setId(resultSet.getInt("id"));
                    tUser.setName(resultSet.getString("name"));
                    return tUser;
                }
            });
            return query;
        }
    
        public JdbcTemplate getJt() {
            return jt;
        }
    
        public void setJt(JdbcTemplate jt) {
            this.jt = jt;
        }
    }
    

    实现配置

    <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.xsd">
        <!--配置目标对象-->
        <bean name="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
            <property name="jdbcUrl"
                      value="jdbc:mysql://103.249.130.173:3306/hibernate_crm?useUnicode=true&amp;characterEncoding=UTF8"></property>
            <property name="driverClass" value="com.mysql.jdbc.Driver"></property>
            <property name="user" value="appUser"></property>
            <property name="password" value="AA1122BB"></property>
        </bean>
        <!--jdbcTemplate放入Spring容器-->
        <bean name="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
            <property name="dataSource" ref="dataSource"></property>
        </bean>
        <!--将UserDao放入Spring容器-->
        <bean name="userDao" class="cn.probuing.dao.TUserDaoImpl">
            <property name="jt" ref="jdbcTemplate"/>
        </bean>
    </beans>
    

    进阶内容

    JDBCDaoSupport

    JDBCDapSupport根据连接池创建JDBC模板
    不需要手动准备JDBC模板,从父类方法中获得即可


    JDBCSupport

    继承JDBCDaoSupport后,需要直接注入连接池就可以了

      <!--将UserDao放入Spring容器-->
        <bean name="userDao" class="cn.probuing.dao.TUserDaoImpl">
            <!--<property name="jt" ref="jdbcTemplate"/>-->
            <property name="dataSource" ref="dataSource"/>
        </bean>
    

    读取外部的Properties

    • 编写.properties文件

    为防止properties key键冲突 需要添加前缀 例如 test.key jdbc.key

    jdbc.jdbcUrl=jdbc:mysql://xxxxxxxxxx;characterEncoding=UTF8
    jdbc.driverClass=com.mysql.jdbc.Driver
    jdbc.user=xxxxx
    jdbc.password=xxxxxx
    
    • 配置指定读取spring db.properties配置


      配置读取指定配置
    • 配置读取配置中的值作为配置中的值


      图片.png

    Spring中aop事务

    Spring封装了事务管理的代码

    • 打开事务
    • 提交事务
    • 回滚事务

    事务操作对象

    因为在不同平台,操作事务的代码各不相同,所以Spring提供了一个接口

    • PlatformTransactionManager 接口
      • JDBC平台 DataSourceTransactionManager
      • HibernateTransitionManager
        **在Spring中玩事务管理,最为核心的对象就是TransactionManager对象

    Spring管理事务的属性介绍

    事务的隔离级别

    是否只读

    事务的传播行为

    事务传播行为

    Spring管理事物方式

    编码式

    将核心事务管理器配置到Spring容器

    配置核心事务管理器

    配置TransactionTemplate模板

    配置TransactionTemplate模板.png

    将事务模板注入Service

    将事务模板注入Service.png

    在Service中调用模板

    Service中调用模板

    aop xml配置方式

    导包

    aop
    aspect
    aop联盟
    weaving织入包
    

    导入新的约束(tx)

    图片.png

    beans: 最基本
    context:读取properties配置
    aop:配置aop
    tx:配置事务通知

    配置通知

    图片.png

    配置将通知织入目标

    通知织入目标

    注解配置

    导包

    aop
    aspect
    aop联盟
    weaving织入包
    

    导入新的约束(tx)

    图片.png

    开启注解管理事务

    开启注解管理事务

    使用注解

    图片.png 图片.png

    相关文章

      网友评论

        本文标题:JAVAEE框架学习——Spring——整合JDBC aop中的

        本文链接:https://www.haomeiwen.com/subject/mrnceftx.html