@SpringBootApplication
public class DevopsApplication implements CommandLineRunner {
private static final Logger log = LoggerFactory.getLogger(DevopsApplication.class);
@Autowired
JdbcTemplate jdbcTemplate;
public static void main(String[] args) {
SpringApplication.run(DevopsApplication.class, args);
}
@Override
public void run(String... args) throws Exception {
log.info("run a select");
log.info("Querying for customer records where first_name = 'Josh':");
jdbcTemplate.query("select f.id from table1 f where f.problemno = ?", new Object[] { "MI-0003949" },
(rs, rowNum) -> new FiProblemEntity(Long.valueOf(rs.getLong("id")))
).forEach(fiProblem -> log.info(fiProblem.toString()));
}
}
Entity类FiProblemEntity.java:
public class FiProblemEntity {
private Long id;
public FiProblemEntity(long id) {
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
@Override
public String toString() {
return "DemoEntity{" +
"id=" + id +
'}';
}
}
使用Mybatis方式访问数据库:
依赖上面已经引入了。
只需要改两个地方:
首先加一个mapper接口:
@Mapper
public interface FiProblemMapper {
@Select("select f.id from gpis_fi_problem f where f.problemno = #{problemNo}")
FiProblemEntity selectFiProblemByProblemNo(@Param("problemNo") String problemNo);
}
然后修改启动类的测试内容:
@SpringBootApplication
public class DevopsApplication implements CommandLineRunner {
private static final Logger log = LoggerFactory.getLogger(DevopsApplication.class);
@Autowired
private FiProblemMapper fiProblemMapper;
public static void main(String[] args) {
SpringApplication.run(DevopsApplication.class, args);
}
@Override
public void run(String... args) throws Exception {
log.info("run a select");
FiProblemEntity fiProblemEntity = fiProblemMapper.selectFiProblemByProblemNo("MI-0003949");
log.info(fiProblemEntity.toString());
}
}
SpringDataJDBC和SpringJDBC是什么关系?
Spring本身对JDBC提供支持,可以引入spring-boot-starter-jdbc,使用JdbcTemplate或者ORM技术访问数据库。
SpringDataJDBC是Spring Data项目下的一个子项目,为访问关系型数据库提供更便捷的功能。可以通过引入spring-boot-starter-data-jdbc依赖使用SpringDataJDBC。只需要实现CrudRepository接口就可以完成基本的CURD操作,不需要写SQL语句,要写复杂的SQL语句,可以通过@Query注解来完成。
关系型数据库访问:
spring-data-jdbc learn 官方文档
官网demo
昨天折腾了好久,使用yml文件方式配置druid数据源总是配置失败。后来换成了.properties文件配置好了。
又因为需要使用数据库密码加密功能,采用javaconfig方式,调用init方法,才能使druid的configFilter生效。
但是配置好了后,使用JdbcTemplate执行了一个查询语句,返回id,oracle数据库是NUMBER类型,resultset使用long和bigdecimal都不能接收,内心有点崩溃。。
这个坑目前也不想踩了,意义不大,不能提高我的工作效率,还是用回Mybatis。
但是昨天一些项目搭建的内容记录一下:
首先pom文件中引入依赖:
引入parent
引入依赖:
application.properties配置文件:
配置类:
启动类:
Entity类FiProblemEntity.java:
使用Mybatis方式访问数据库:
依赖上面已经引入了。
只需要改两个地方:
首先加一个mapper接口:
然后修改启动类的测试内容:
运行之后,报FiProblemEntity构造函数无法匹配BigDecimal类型,说明和工具本身关系不是特别大,之前搜的都是JdbcTemplate访问oracle如何接收BigDecimal,因为当时也没有报异常,只是id接收的是null。
官网例子的坑
Google一下(还是要Google,百度垃圾),然后搜到了!Mybatis使用的时候要求模型类有一个无参构造器,把FiProblemEntity的有参构造器删除后,果然运行成功。
然后代码回退,测试了JdbcTemplate,无参构造器删除后,果然也可以了。不过后续还是用Mybatis,个人习惯问题。
有参构造器这个是官网例子啊,,,坑逼了。。。
总结:
1、使用Google,而不是百度!
2、使用熟悉的工具,况且Mybatis本身在ORM方面做得足够好,够用!JdbcTemplate运行的时候报错少,没有Mybatis好用。
最后提醒自己,不需要再在jdbc访问工具上面做过多尝试,这里不是重点,选Mybatis就OK了。有这些时间,用来继续研究consul多好。。。