Acesso à Banco de Dados
- Banco de dados e JDBC
- Configurando a conexão ao banco de dados
- Criando o banco de dados e as tabelas
- Alterando a classe DAO
- Testando o projeto
Banco de dados e JDBC
Antes de passar adiante, leia o excelente material da Caelum, sobre banco de dados e JDBC.
Para entender melhor, tente praticar!!!
Configurando a conexão ao banco de dados
Driver JDBC do SQL Server
- Baixe a biblioteca em http://central.maven.org/maven2/com/microsoft/sqlserver/mssql-jdbc/6.4.0.jre8/mssql-jdbc-6.4.0.jre8.jar
- Dentro do NetBeans, selecione o menu Ferramentas > Bibliotecas.
- Na janela que aparece, clique em Nova Biblioteca....
- Escreva para o nome da biblioteca “Driver JDBC do SQL Server” e clique em OK.
- Na tela que aparece, clique em Adicionar JAR/Pasta..., escolha o arquivo baixado e depois clique em OK.
Fazendo o driver como dependência do projeto
- No projeto NetBeans, clique no botão direito em Bibliotecas, no menu, selecione Adicionar Biblioteca....
- Na janela que aparece, escolha “Driver JDBC do SQL Server” e finalize.
NOTA: é preciso adicionar a biblioteca em todos os projetos que forem usar o SQL Server.
Na configuração do Spring
Essa configuração está sendo aplicada ao código feito no exercício 4
@Configuration
@EnableWebMvc
@ComponentScan(basePackages = {"primavera.dao", "primavera.controller"})
public class AppConfig {
@Bean
public ViewResolver jspViewResolver() {
InternalResourceViewResolver resolver = new InternalResourceViewResolver();
resolver.setViewClass(JstlView.class);
resolver.setPrefix("/WEB-INF/jsp/");
resolver.setSuffix(".jsp");
return resolver;
}
@Bean
public MessageSource messageSource() {
ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource();
messageSource.setBasename("classpath:/messages");
messageSource.setDefaultEncoding("UTF-8");
messageSource.setUseCodeAsDefaultMessage(true);
return messageSource;
}
@Bean
public DataSource dataSource() {
DriverManagerDataSource ds = new DriverManagerDataSource();
ds.setDriverClassName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
ds.setUrl("jdbc:sqlserver://localhost;databaseName=PJW");
ds.setUsername("sa");
ds.setPassword("123456");
return ds;
}
@Bean
public JdbcTemplate jdbcTemplate(DataSource dataSource) {
return new JdbcTemplate(dataSource);
}
}
Criando o banco de dados e as tabelas
CREATE DATABASE PJW;
USE PJW;
CREATE TABLE Cars (
id INT IDENTITY PRIMARY KEY,
name VARCHAR(50),
price REAL,
color VARCHAR(15)
);
INSERT INTO Cars (name, price, color)
VALUES
('Mercedes SL', 123400, '#674EA7'),
('BMW M6 Coupé', 125000, '#0000FF'),
('Audi R8', 136100, '#FF0000');
Alterando a classe DAO
Aos poucos, vamos converter a classe DAO para acessar banco de dados, primeiramente, vamos desabilitar todos os métodos lançando uma exceção que indica que o código não está pronto:
@Repository
public class CarDao {
@Autowired
private JdbcTemplate jdbcTemplate;
private static final RowMapper<Car> ROW_MAPPER = BeanPropertyRowMapper.newInstance(Car.class);
public void add(Car car) {
throw new UnsupportedOperationException();
}
public Car get(long id) {
throw new UnsupportedOperationException();
}
public void edit(Car car) {
throw new UnsupportedOperationException();
}
public void delete(long id) {
throw new UnsupportedOperationException();
}
public List<Car> findAll() {
throw new UnsupportedOperationException();
}
}
Listando todos os carros
public void delete(long id) {
throw new UnsupportedOperationException();
}
public List<Car> findAll() {
String sql = "SELECT * FROM Cars";
List<Car> cars = jdbcTemplate.query(sql, ROW_MAPPER);
return cars;
}
}
Obtendo um carro
@Repository
public class CarDao {
@Autowired
private JdbcTemplate jdbcTemplate;
private static final RowMapper<Car> ROW_MAPPER = BeanPropertyRowMapper.newInstance(Car.class);
public void add(Car car) {
throw new UnsupportedOperationException();
}
public Car get(long id) {
String sql = "SELECT * FROM Cars WHERE id=?";
Car car = jdbcTemplate.queryForObject(sql, ROW_MAPPER, id);
return car;
}
Excluindo um carro
public void edit(Car car) {
throw new UnsupportedOperationException();
}
public void delete(long id) {
String sql = "DELETE FROM Cars WHERE id=?";
int rows = jdbcTemplate.update(sql, id);
if (rows == 0) {
throw new IllegalArgumentException("Carro não encontrado: " + id);
}
}
public List<Car> findAll() {
Editando um carro
public Car get(long id) {
String sql = "SELECT * FROM Cars WHERE id=?";
Car car = jdbcTemplate.queryForObject(sql, ROW_MAPPER, id);
return car;
}
public void edit(Car car) {
String sql = "UPDATE Cars SET name=?, price=?, color=? WHERE id=?";
int rows = jdbcTemplate.update(sql, car.getName(), car.getPrice(), car.getColor(), car.getId());
if (rows == 0) {
throw new IllegalArgumentException("Carro não encontrado: " + car.getId());
}
}
public void delete(long id) {
Adicionando um carro
@Repository
public class CarDao {
@Autowired
private JdbcTemplate jdbcTemplate;
private static final RowMapper<Car> ROW_MAPPER = BeanPropertyRowMapper.newInstance(Car.class);
public void add(Car car) {
String sql = "INSERT INTO Cars (name, price, color) values (?, ?, ?);";
jdbcTemplate.update(sql, car.getName(), car.getPrice(), car.getColor());
}
public Car get(long id) {
Testando o projeto
Adicione linhas à tabela com o SQL Server Management Studio e veja os dados aparecerem na aplicação e, faça o contrário, utilize as funções de cadastro, alteração ou exclusão de carro e veja o banco ser modificado.
Refletindo sobre MVC
Como a aplicação foi desenvolvida utilizando as melhores práticas, fizemos a alteração na camada Model, tornando os dados dos carros persistentes sem precisar alterar nada nas camadas View e Controller.