美文网首页Spring
Spring整合JDBC

Spring整合JDBC

作者: 神豪VS勇士赢 | 来源:发表于2018-08-04 21:58 被阅读32次

    使用DRUID,是阿里巴巴开源平台上一个数据库连接池实现,它结合了C3P0、DBCP等DB池的优点,同时加入了监控。

    整合步骤
    第一步:创建web项目,导入依赖


    image.png image.png image.png

    第二步:开发表对应的实体类
    public class User {
    private Integer id;
    private String name;
    private Integer age;

    public User() {
    }
    
    public void setId(Integer id) {
        this.id = id;
    }
    
    public void setName(String name) {
        this.name = name;
    }
    
    public void setAge(Integer age) {
        this.age = age;
    }
    
    public Integer getId() {
        return id;
    }
    
    public String getName() {
        return name;
    }
    
    public Integer getAge() {
        return age;
    }
    
    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
    

    }

    第三步:开发DAO接口和实现类

    @Repository("UserDaoImpl")
    public class UserDaoImpl extends JdbcDaoSupport implements UserDao {

    @Override
    public void addUser(User user) {
        String sql="INSERT  INTO  testinstall (name,age) VALUES (?,?)";
        getJdbcTemplate().update(sql,user.getName(),user.getAge());
    }
    
    @Override
    public void deleteUser(User user) {
        String sql="DELETE  FROM  testinstall WHERE  id =?";
        getJdbcTemplate().update(sql,user.getId());
    }
    
    @Override
    public void updateUser(User user) {
        String sql="UPDATE testinstall SET name = ? ,age=? WHERE  id =?";
        getJdbcTemplate().update(sql,user.getName(),user.getAge(),user.getId());
    }
    
    @Override
    public User queryUser(final User user) {
        String sql="SELECT  * FROM testinstall WHERE  id=? ";
       User user1  = getJdbcTemplate().queryForObject(sql, new RowMapper<User>() {
            @Override
            public User mapRow(ResultSet rs, int rowNum) throws SQLException {
                User user1 = new User();
                String name = rs.getString("name");
                int age = rs.getInt("age");
                user1.setId(user.getId());
                user1.setName(name);
                user1.setAge(age);
                return user1;
            }
        }, user.getId());
        return user1;
    }
    
    @Override
    public List<User> queryAll() {
        String sql="SELECT  * FROM  testinstall ";
        List<User> query = getJdbcTemplate().query(sql, new RowMapper<User>() {
            @Override
            public User mapRow(ResultSet rs, int rowNum) throws SQLException {
                User user = new User();
                int id = rs.getInt("id");
                String name = rs.getString("name");
                int age = rs.getInt("age");
                user.setId(id);
                user.setName(name);
                user.setAge(age);
                return user;
            }
        });
        return query;
    }
    

    }

    开发DAO实现类:
    继承JdbcDaoSupport
    getJdbcTemplate()得到JdbcTemplate(需要注入)

    第四步:配置整合
    需要把模板类对象赋值给持久层的DAO

    <context:component-scan base-package="com.zyh.*"></context:component-scan>
    <context:property-placeholder  location="classpath:db.properties"></context:property-placeholder>
    
    <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
        <property name="driverClassName" value="${myDriverClass}" ></property>
        <property name="url" value="${myUrl}"></property>
        <property name="username" value="${myUsername}"></property>
        <property name="password" value="${myPassword}"></property>
        <property name="maxWait" value="3000"></property>
        <property name="maxActive" value="100"></property>
        <!--Druid监控-->
        <property name="filters" value="wall,stat"/>
    </bean>
    
    <!--创建 JDBCTemplate对象 -->
    <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
        <property name="dataSource" ref="dataSource"></property>
    </bean>
    
    <bean id="UserDaoImpl" class="com.zyh.dao.impl.UserDaoImpl">
        <property name="jdbcTemplate" ref="jdbcTemplate"></property>
    </bean>
    

    测试方法如下所示:
    public class TestUserService {
    @Qualifier("UserServiceImpl")
    @Autowired
    private UserServiceImpl userService;
    @Test
    public void testUserServiceImplQueryAll(){
    List<User> users = userService.queryAll();
    for (User user : users) {
    Log.info(user);
    }
    }
    }

    观察输出如下所示:


    image.png

    修改配置文件如下所示:
    <bean id="UserDaoImpl" class="com.zyh.dao.impl.UserDaoImpl">
    <property name="dataSource" ref="dataSource"></property>
    </bean>

    我们修改了数据库的配置文件 直接抽取出来了db.properties 文件


    image.png

    这个是 DruidDatasource的源码 :

    第一个配置文件就是依赖下面的源码进行配置的


    image.png

    第二个配置文件就是依赖下面的源码进行配置的


    image.png

    注意点: 注意此属性 设置最大等待时间 3000毫秒
    <property name="maxWait" value="3000"></property>

    如果获取失败,可以快速抛异常,避免占用。
    开发环境建议设置maxWait=3000(开发环境原因链接本来就慢)
    我们在线上配置的时候 ,此属性可以设置的低一些 比如 300毫秒, 可以对于高并发起到一定的作用。

    相关文章

      网友评论

        本文标题:Spring整合JDBC

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