spring免配置使用JdbcTemplate操作

2020-11-19 14:45:28 浏览数 (1)

使用Spring-jdbc包自带的jdbcTemplate我们可以直接进行数据库操作(不使用持久层框架),使我们的应用程序更加灵活,但是使用Spring框架的时候难免要使用配置文件,

但是有些场景我们可能不需要那么重的配置。举例:我们的通用模块中可能要做到管控dubbo服务访问权限,而权限列表就放在mysql表中,那么我们可能在通用模块中需要操作数据库查询,但是用到查询的地方特别少,这时候我们加上spring配置,是有点浪费的。那么我们可不可以不使用配置去获得数据库连接或者jdbcTemplate去查询数据?当然是可以的,不过我们自己实现的话,首先比较困难,另外是没必要。我们此处使用最简化的方式实现这个功能:

一、新建maven项目&添加最简依赖

新建一个maven项目,在pom文件中添加以下依赖

<!-- 数据库连接驱动 -->

<dependency>

<groupId>mysql</groupId>

<artifactId>mysql-connector-java</artifactId>

<version>5.1.41</version>

</dependency>

<!-- spring中jdbc相关操作依赖包 -->

<dependency>

<groupId>org.springframework</groupId>

<artifactId>spring-jdbc</artifactId>

<version>4.3.7.RELEASE</version>

</dependency>

<!-- 连接池依赖 -->

<dependency>

<groupId>com.alibaba</groupId>

<artifactId>druid</artifactId>

<version>1.1.2</version>

</dependency>

二、添加属性文件

在src/main/resources下添加jdbc.properties

文件内容配置如下:

属性文件中字段名命名有规则,参考下一步

三、新建工具类

既然是工具类,我们尽量定义成abstract或者final类型,可以选择让调用方式继承或者直接调用静态方法,尽量不允许new新对象,代码实现如下:

/**

* 简化数据源配置类

*

* @author Typhoon

* @date 2017-08-22 11:27 Tuesday

* @since V1.3.1

*/

public class DataSourceUtils {

public static Properties p = null;

public static String confile = "jdbc.properties";

static {

p = new Properties();

InputStream inputStream = null;

try {

inputStream = DataSourceUtils.class.getClassLoader().getResourceAsStream("jdbc.properties");

inputStream = new BufferedInputStream(inputStream);

p.load(inputStream);

} catch (Exception e) {

e.printStackTrace();

} finally {

try {

if (inputStream != null) {

inputStream.close();

}

} catch (IOException e) {

e.printStackTrace();

}

}

}

/**

*获取数据源,私有方法不对外暴露

*/

private static DataSource getDataSource() {

try {

return DruidDataSourceFactory.createDataSource(p);

} catch (Exception e) {

e.printStackTrace();

}

return null;

}

/**

*获取JdbcTemplate(使用getDataSource()获取获取源)

*/

public static JdbcTemplate getJdbcTemplate() {

DataSource dataSource = getDataSource();

JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);

return jdbcTemplate;

}

/**

*获取NamedParameterJdbcTemplate

* 在某些场景下比JdbcTemplate使用起来方便

*/

public static NamedParameterJdbcTemplate getNamedJdbcTemplate() {

DataSource dataSource = getDataSource();

NamedParameterJdbcTemplate namedJdbcTemplate = new NamedParameterJdbcTemplate(dataSource);

return namedJdbcTemplate;

}

}

这里边最重要的一段代码是:

这里将从jdbc.properties读取的数据传给DruidDataSourceFactory去创建连接,进入源码中可以看到:

到这里我们就发现此处会将从jdbc.properties读取的属性赋值给该类中的字段,所以上一步中我们定义的jdbc.properties属性文件的字段要和DruidDataSourceFactory中定义的保持一致.

然后我们就可以使用getJdbcTemplate()和getNamedJdbcTemplate()获取jdbc操作工具,然后我们就可以直接去执行sql操作了

四、新建Dao

新建UserDao,并使用上边定义的工具类注入JdbcTemplate

/**

* 用户操作dao

*

* @author Typhoon

* @date 2017-08-22 15:32 Tuesday

* @since V1.3.1

*/

public class UserDao {

/**

* 获取jdbcTemplate

*/

private JdbcTemplate jdbcTemplate = DataSourceUtils.getJdbcTemplate();

/**

* 查询列表

*

* @return

*/

public List<User> queryAll() {

return jdbcTemplate.query(" select * from User ", BeanPropertyRowMapper.newInstance(User.class), new Object[] {});

}

}

题外话: spring3.x版本使用ParameterizedBeanPropertyRowMapper做数据映射,spring4.x取消了该类,可以使用替代类BeanPropertyRowMapper做数据映射

五、模拟调用方并测试

新建测试类模拟Dao调用方,并测试JdbcTemplate是否访问数据库成功且正确返回数据

/**

* 模拟调用方

*

* @author Typhoon

* @date 2017-08-22 15:34 Tuesday

* @since V1.3.1

*/

public class Consumer {

public static void main(String[] args) {

UserDao userDao = new UserDao();

List<User> list = userDao.queryAll();

for(User u : list) {

System.out.println(u);

}

}

}

使用java Application方式运行上述代码,可以看到如下结果:

可见我们已经基于免Spring配置的方式实现的通过jdbcTemplate与数据库交互.

总结

在一些通用模块中数据库交互比较少的场景下,可以使用这种免配置方式替代繁重的配置文件方式实现数据库访问.

  • 优点:免配置,使用方便.
  • 缺点:不适合比较繁杂的数据交互比较多的场景

ps:原创不易,多多支持!

0 人点赞