Spring(6): 数据库连接
来源:互联网 发布:深圳车险理赔数据 编辑:程序博客网 时间:2024/06/05 19:07
1.概念
Spring JDBC 是 Spring 所提供的持久层技术,以更直接、更简洁的方式使用 JDBC API。
不同形式的数据源配置:
(1)Spring 自带的数据源
依赖包:import org.springframework.jdbc.datasource.DriverManagerDataSource;
@Beanpublic DriverManagerDataSource dataSource() { DriverManagerDataSource ds = new DriverManagerDataSource(); ds.setDriverClassName(env.getProperty("spring.datasource.driver-class-name")); ds.setUrl(env.getProperty("spring.datasource.url")); ds.setUsername(env.getProperty("spring.datasource.username")); ds.setPassword(env.getProperty("spring.datasource.password")); return ds;}
(2)数据源连接池
依赖包:import org.apache.tomcat.jdbc.pool.DataSource;
@Bean(destroyMethod = "close")public DataSource dataSource() { DataSource ds = new DataSource(); ds.setDriverClassName(env.getProperty("spring.datasource.driver-class-name")); ds.setUrl(env.getProperty("spring.datasource.url")); ds.setUsername(env.getProperty("spring.datasource.username")); ds.setPassword(env.getProperty("spring.datasource.password")); return ds;}
说明:
设定 destroyMethod = “close” 属性,以使 Spring 容器关闭时,数据源能够正常关闭。
2.使用 JDBC 连接数据库
2.1 Java 配置
@Configurationpublic class JdbcConfig { @Autowired public Environment env; @Bean(destroyMethod = "close") public DataSource dataSource() { DataSource ds = new DataSource(); ds.setDriverClassName(env.getProperty("spring.datasource.driver-class-name")); ds.setUrl(env.getProperty("spring.datasource.url")); ds.setUsername(env.getProperty("spring.datasource.username")); ds.setPassword(env.getProperty("spring.datasource.password")); return ds; } @Bean public JdbcTemplate jdbcTemplate() { JdbcTemplate jt = new JdbcTemplate(); jt.setDataSource(dataSource()); return jt; } @Bean public ForumDao forumDao() { return new ForumDao(); }}
2.2 XML 配置
在 Spring 配置文件中配置 DAO 的 4 个步骤:
(1)定义 DataSource
(2)定义 JdbcTemplate
(3)声明一个抽象的 ,以便所有 DAO 复用配置 JdbcTemplate 属性的配置。
(4)配置具体的 DAO。
<!--扫描包以注册注解声明的Bean--><context:component-scan base-package="com.chen.jdbc"/><context:property-placeholder location="classpath:jdbc.properties"/><!--配置数据源--><bean id="dataSource" class="org.apache.tomcat.jdbc.pool.DataSource" destroy-method="close" p:defaultAutoCommit="false" p:driverClassName="${jdbc.driverClassName}" p:url="${jdbc.url}" p:username="${jdbc.username}" p:password="${jdbc.password}"/><!--声明JdbcTemplateBean--><bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate" p:dataSource-ref="dataSource"/><bean id="forumDao" class="com.chen.jdbc.dao.ForumDao"/>
使用 JdbcTemplate 对数据进行 CURD 操作。
2.3 更改数据代码
@Repositorypublic class ForumDao { private JdbcTemplate jdbcTemplate; @Autowired public void setJdbcTemplate(JdbcTemplate jdbcTemplate) { this.jdbcTemplate = jdbcTemplate; } public void addForum(Forum forum) { String sql = " INSERT INTO t_forum(forum_name, forum_desc) VALUES (?,?) "; Object[] params = new Object[]{forum.getForumName(), forum.getForumDesc()}; jdbcTemplate.update(sql, params); }}
2.4 查询数据代码
public Forum findByForumName(final String forumName) { String sql = " SELECT * FROM t_forum WHERE forum_name = ? "; final Forum forum = new Forum(); jdbcTemplate.query(sql, new Object[]{forumName}, new RowCallbackHandler() { @Override public void processRow(ResultSet rs) throws SQLException { forum.setForumId(rs.getInt("forum_id")); forum.setForumName(forumName); forum.setForumDesc(rs.getString("forum_desc")); } }); return forum;}
2.5 查询单值数据代码
public int getForumNum() { String sql = " SELECT count(*) FROM t_forum "; return jdbcTemplate.queryForObject(sql, Integer.class);}
3.使用 JPA 连接数据库
3.1 Domain实体类
@Entity@Table(name = "t_customer")public class Customer { @Id @GeneratedValue(strategy = GenerationType.AUTO) private Long id; private String firstName; private String lastName; protected Customer() { } public Customer(String firstName, String lastName) { this.firstName = firstName; this.lastName = lastName; } @Override public String toString() { return String.format("Customer[id=%d, firstName='%s', lastName='%s']", id, firstName, lastName); }}
3.2 Dao接口(继承JpaRepository)
public interface CustomerRepository extends CrudRepository<Customer, Long> { List<Customer> findByLastName(String lastName);}
3.3 Application应用
@SpringBootApplicationpublic class CustomerApp { private static final Logger log = LoggerFactory.getLogger(CustomerApp.class); public static void main(String[] args) { SpringApplication.run(CustomerApp.class); } @Bean public CommandLineRunner demo(CustomerRepository repository) { return (args) -> { // save a couple of customers repository.save(new Customer("Jack", "Bauer")); repository.save(new Customer("Kim", "Bauer")); repository.save(new Customer("David", "Palmer")); // fetch all customers log.info("Customers found with findAll():"); log.info("-------------------------------"); for (Customer customer : repository.findAll()) { log.info(customer.toString()); } log.info(""); // fetch an individual customer by ID Customer customer = repository.findOne(1L); log.info("Customer found with findOne(1L):"); log.info("--------------------------------"); log.info(customer.toString()); log.info(""); // fetch customers by last name log.info("Customer found with findByLastName('Bauer'):"); log.info("--------------------------------------------"); for (Customer bauer : repository.findByLastName("Bauer")) { log.info(bauer.toString()); } log.info(""); }; }}
源代码:
https://github.com/leifchen/hello-spring
代码包:com.chen.jdbc
阅读全文
0 0
- Spring(6): 数据库连接
- spring boot(6) 使用数据库连接池druid
- Spring事务管理与数据库连接
- Spring 数据库连接配置
- Spring 数据库连接配置
- spring 配置数据库连接池
- Spring 数据库连接配置
- spring配置数据库连接池
- Spring,hibernate数据库连接配置
- Spring事务管理与数据库连接
- Spring 数据库连接配置
- Spring 数据库连接整理
- Spring 数据库连接整理
- Spring 数据库连接配置
- Spring 配置 druid数据库连接
- Spring简单与数据库连接
- Spring 测试数据库连接
- 关于Spring数据库连接
- lintcode/leetcode由易至难第8题:Reverse String
- JavaScript基础知识(一)
- 学习计划
- Linux中线程的概念及创建应用
- const用法汇总
- Spring(6): 数据库连接
- BigInteger in Java
- 4-1 二分查找 (20分)
- 垂直居中的三种方法及其优缺点
- 交换两个变量的值,不使用第三个变量方法
- 操作系统刷题(七)
- TCP通信
- LeetCode题解–207. Course Schedule
- Kotlin -- 基本类型