Spring

Spring整合JDBC

2018-08-04  本文已影响32人  神豪VS勇士赢

使用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毫秒, 可以对于高并发起到一定的作用。

上一篇下一篇

猜你喜欢

热点阅读