背景
前のJdbcTemplateは、我々は、関連するBeanの構成は、XMLや注釈によって達成されている変更検索操作へのデータベースの追加および削除の次のインスタンスを完了しました。
JdbcTemplateは、クラスの名前、JdbcTemplateよりもエレガントを使用してパラメータを渡して、この記事の下で、我々はNamedParameterJdbcTemplateの使用を実証し、位置のプレースホルダパラメータによって渡されます。そして、この記事では、我々は、関連するBeanを構成するJavaConfigを使用し、あなたはJavaConfigのシンプルかつ強力なキャラクターを体験することができます。
コンフィギュレーション・クラスのNamedParameterJdbcTemplateソースと設定データ
私たちは、アセンブリおよび方法JavaConfig BeanConfigコードによって設定データソースを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<String, Object> 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<String, Object> map = new HashMap<>();
map.put("id", id);
namedTemplate.update("delete from blog where id =:id", map);
}
/**
* 更新
*/
public void update(BlogDo blog) {
Map<String, Object> 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<String, Object> map = new HashMap<>();
map.put("id", id);
return namedTemplate.queryForObject("select * from blog where id=:id", map, new RowMapper<BlogDo>() {
@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<BlogDo> getList() {
return namedTemplate.query("select * from blog", new RowMapper<BlogDo>() {
@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は、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の方法よりも良いはずです、私は喉を感じました...