javaconfig配置mysql_Spring大神之路(29)–使用NamedParameterJdbcTemplate完成数据库操作(JavaConfig配置)...

背景

上一篇我们完成了JdbcTemplate下数据库增删改查操作的实例,其中相关bean的配置是通过xml和注解实现的。

JdbcTemplate是按占位符的位置传递参数,本篇我们演示下NamedParameterJdbcTemplate的使用,该类时使用名称传递参数的,比JdbcTemplate更加优雅。然后本篇我们使用JavaConfig来配置相关的bean,可以体会JavaConfig简洁且强大的特质。

在配置类中配置数据源和namedParameterJdbcTemplate

我们在BeanConfig中通过JavaConfig方式配置数据源和namedParameterJdbcTemplate组件,代码如下:

package org.maoge.nameddemo;

import javax.sql.DataSource;

import org.springframework.context.annotation.Bean;

import org.springframework.context.annotation.Configuration;

import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;

import com.alibaba.druid.pool.DruidDataSource;

@Configuration // 配置类

public class BeanConfig {

// 配置数据源

@Bean

public DataSource dataSource() {

DruidDataSource dataSource = new DruidDataSource();

dataSource.setDriverClassName("com.mysql.jdbc.Driver");

dataSource.setUrl("jdbc:mysql://127.0.0.1:3306/myblog?useUnicode=true&characterEncoding=utf-8");

dataSource.setUsername("root");

dataSource.setPassword("XXX");

return dataSource;

}

// 配置namedParameterJdbcTemplate组件

@Bean

public NamedParameterJdbcTemplate namedParameterJdbcTemplate() {

NamedParameterJdbcTemplate template=new NamedParameterJdbcTemplate(dataSource());//注入dataSource

return template;

}

}

实现数据库操作组件BlogDao

数据对象不用改变:

package org.maoge.nameddemo;

/**

* @theme 数据对象--博客

* @author maoge

* @date 2020-01-27

*/

public class BlogDo {

private Long id;

private String title;

private String author;

private String content;

// 省略get get

}

数据操作组件相比于JdbcTemplate有所变化,主要就是传参上从按位置传参改为按名称传参,具体如下,可以看出除了传参基本没有变化。另外注意我们并未在该类中使用注解,因为后续我们直接通过JavaConfig将其配置为bean。

package org.maoge.nameddemo;

import java.sql.ResultSet;

import java.sql.SQLException;

import java.util.HashMap;

import java.util.List;

import java.util.Map;

import org.springframework.jdbc.core.RowMapper;

import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;

/**

* @theme DAO--博客

* @author maoge

* @date 2020-01-29

*/

public class BlogDao {

public NamedParameterJdbcTemplate getNamedTemplate() {

return namedTemplate;

}

public void setNamedTemplate(NamedParameterJdbcTemplate namedTemplate) {

this.namedTemplate = namedTemplate;

}

private NamedParameterJdbcTemplate namedTemplate;

/**

* 新增

*/

public void insert(BlogDo blog) {

Map map = new HashMap<>();

map.put("author", blog.getAuthor());

map.put("content", blog.getContent());

map.put("title", blog.getTitle());

// 注意使用:xxx占位

namedTemplate.update("insert into blog(author,content,title)values(:author,:content,:title)", map);

}

/**

* 删除

*/

public void delete(Long id) {

Map map = new HashMap<>();

map.put("id", id);

namedTemplate.update("delete from blog where id =:id", map);

}

/**

* 更新

*/

public void update(BlogDo blog) {

Map map = new HashMap<>();

map.put("author", blog.getAuthor());

map.put("content", blog.getContent());

map.put("title", blog.getTitle());

map.put("id", blog.getId());

namedTemplate.update("update blog set author=:author,content=:content,title=:title where id=:id", map);

}

/**

* 按id查询

*/

public BlogDo getById(Long id) {

Map map = new HashMap<>();

map.put("id", id);

return namedTemplate.queryForObject("select * from blog where id=:id", map, new RowMapper() {

@Override

public BlogDo mapRow(ResultSet rs, int rowNum) throws SQLException {

BlogDo blog = new BlogDo();

blog.setAuthor(rs.getString("author"));

blog.setContent(rs.getString("content"));

blog.setId(rs.getLong("id"));

blog.setTitle(rs.getString("title"));

return blog;

}

});

}

/**

* 查询列表

*/

public List getList() {

return namedTemplate.query("select * from blog", new RowMapper() {

@Override

public BlogDo mapRow(ResultSet rs, int rowNum) throws SQLException {

BlogDo blog = new BlogDo();

blog.setAuthor(rs.getString("author"));

blog.setContent(rs.getString("content"));

blog.setId(rs.getLong("id"));

blog.setTitle(rs.getString("title"));

return blog;

}

});

}

}

将BlogDao注册为bean

此处通过JavaConfig将BlogDao注册为bean,同时将namedParameterJdbcTemplate注入,修改后代码如下:

package org.maoge.nameddemo;

import javax.sql.DataSource;

import org.springframework.context.annotation.Bean;

import org.springframework.context.annotation.Configuration;

import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;

import com.alibaba.druid.pool.DruidDataSource;

@Configuration // 配置类

public class BeanConfig {

// 配置数据源

@Bean

public DataSource dataSource() {

DruidDataSource dataSource = new DruidDataSource();

dataSource.setDriverClassName("com.mysql.jdbc.Driver");

dataSource.setUrl("jdbc:mysql://127.0.0.1:3306/myblog?useUnicode=true&characterEncoding=utf-8");

dataSource.setUsername("root");

dataSource.setPassword("Easy@0122");

return dataSource;

}

// 配置namedParameterJdbcTemplate组件

@Bean

public NamedParameterJdbcTemplate namedParameterJdbcTemplate() {

NamedParameterJdbcTemplate template=new NamedParameterJdbcTemplate(dataSource());//注入dataSource

return template;

}

//为BlogDao注册bean

@Bean

public BlogDao blogDao() {

BlogDao blogDao=new BlogDao();

blogDao.setNamedTemplate(namedParameterJdbcTemplate());//注入namedParameterJdbcTemplate

return blogDao;

}

}

测试

除了构建容器的类不一样,其他部分都一样:

package org.maoge.nameddemo;

import java.sql.SQLException;

import org.springframework.context.annotation.AnnotationConfigApplicationContext;

public class Main {

public static void main(String[] args) throws SQLException {

// 获取容器

AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(BeanConfig.class);

// 获取blogDao组件

BlogDao blogDao = context.getBean("blogDao", BlogDao.class);

BlogDo blog = new BlogDo();

blog.setAuthor("猫哥");

blog.setTitle("测试博客");

blog.setContent("非常完美吭");

// 测试插入

blogDao.insert(blog);

// 测试获取1个

System.out.println(blogDao.getById(2L));

// 测试获取列表

System.out.println(blogDao.getList().size());

blog.setId(3L);

blog.setContent("非常完美吭XX");

// 修改

blogDao.update(blog);

// 删除

blogDao.delete(4L);

}

}

总结

NamedParameterJdbcTemplate是比JdbcTemplate更好的操作数据库的方式。

JavaConfig应该是比xml和注解更好的配置bean的方式,我觉着…

原创文章,作者:9IM,如若转载,请注明出处:https://www.9im.cn/1174.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值