JAVAEE,手动连接数据库,期中考试流程备份

1 使用Spring JDBC访问数据库

  1. database模块是为了连接数据库,所以在database的pom文件里添加数据库操作的依赖包(从上到下依次数据库连接池,mysql驱动,springJDBC)
<dependencies>
        <!-- https://mvnrepository.com/artifact/commons-dbcp/commons-dbcp -->
        <dependency>
            <groupId>commons-dbcp</groupId>
            <artifactId>commons-dbcp</artifactId>
            <version>1.4</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.45</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.springframework/spring-jdbc -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>${spring.version}</version>
        </dependency>

    </dependencies>

2介绍右边idea里集成的前端工具

1)(点击右边的database)

2) 使用

1 +->数据源 ->Mysql
2 起名字 之后链接到自己已有的数据库上
3 检查mysql连接驱动程序
{
	class :  com.mysql.jdbc.Driver
	Driver files : MySQL Connect/J ver.5.1.45
}
如果显示invalid timezone 把time什么的utf改成GMD
1 在右边数据库表右键SQL Genrator生成sql脚本
2 在resources处新建文件命名javaee.sql(javaee为数据库名称),保存sql语句
  越来越多业务,每创建一个表都在这里保存一下

3完成DAO模式

1)把上节课写的补充完整,具体做法新建pagage DAO和Model和Bus,把book放到model里

2)数据库配置信息新加到resources里,命名mysql.properties,

driverClassName = com.mysql.jdbc.Driver
mysql.url = jdbc:mysql://localhost:3306/table
mysql.userName = root
mysql.password = 123456

3)在database-context.xml文件配置数据库连接

加载文件

<!--加载数据库访问配置-->
<context:property-placeholder location="mysql.properties"/>
<!--配置数据源-->
<!--引用后应该javaee.sql所有变量都被引用过,都变蓝-->
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
      destroy-method="close"
      p:driverClassName="${driverClassName}"
      p:url="${mysql.url}"
      p:username="${mysql.userName}"
      p:password="${mysql.password}"/>
<!--先声明数据源,然后再配置如下,说明要去这个数据源找,所以配置jdbc模板之前要先设置数据源-->
<bean id="jdbcTemlate" class="org.springframework.jdbc.core.JdbcTemplate"
          p:dataSource-ref="dataSource"/>

至此spring访问数据库的大环境搭好了

4完整实现·DAO

1)再DAO包下定义接口,定义所有增删改查功能

package org.example.DAO;

import org.example.Model.Book;


import java.util.List;

public interface BookDAO {
    void insertBook(Book book);
    void modifyBook(Book book);
    List<Book> queryAll();
    void insertAll(List<Book> bookList);

    void deleteBook(Book book);
    void deleteAll(List<Book> bookList);
    void deleteById(String id);
    Book queryOneBook(Book book);
    Book queryOneBookById(String id);
}

2)使用接口-抽象-实现模式,所以先在DAO建立接口实现类AbstractBookDAO 继承接口BookDAO

在这个抽象类定义所有增删改查所共用的一些对象,然后给出所有增删改查的默认实现

package org.example.DAO;

import org.example.Model.Book;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;

import javax.annotation.Resource;
import java.util.List;

public class AbstractBookDAO implements BookDAO{
    List<Book>books;
    JdbcTemplate jdbcTemplate;

    @Resource(name="list")
    public void setBooks(List<Book> books) {
        this.books = books;
    }

    @Autowired
    public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
        this.jdbcTemplate = jdbcTemplate;
    }

    @Override
    public void insertBook(Book book) {

    }

    @Override
    public void modifyBook(Book book) {

    }

    @Override
    public List<Book> queryAll() {
        return null;
    }

    @Override
    public void insertAll(List<Book> bookList) {

    }

    @Override
    public void deleteBook(Book book) {

    }

    @Override
    public void deleteAll(List<Book> bookList) {

    }

    @Override
    public void deleteById(String id) {

    }

    @Override
    public Book queryOneBook(Book book) {
        return null;
    }

    @Override
    public Book queryOneBookById(String id) {
        return null;
    }
}

jdbc已经在xml里配置过了,可以在抽象类中直接装配@Autowired

list还得去配置文件里说明一下,然后才可以@Resource(name = “list”)

<!--配置集合对象-->

<bean id="list" class="java.util.ArrayList" scope="prototype"/>

然后自动生成接口方法

DAO设计完成

下来写具体实现类

DAO下新建class

package org.example.DAO;

import org.example.Model.Book;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.RowMapper;

import java.util.List;

public class BookDAOImpl extends AbstractBookDAO{
    @Override
    public void insertBook(Book book) {
        super.insertBook(book);
        String INSERT_BOOK="INSERT INTO book(isdn,name,price) VALUES(?,?,?)";
        Object[]args={book.getIsdn(),book.getName(),book.getPrice()};
        jdbcTemplate.update(INSERT_BOOK,args);
        //完成插入数据库的操作
    }

    @Override
    public void modifyBook(Book book) {
        super.modifyBook(book);
        String MODIFY_BOOK="update book set price=? where isdn=?";
        Object []args={book.getPrice(),book.getIsdn()};
        jdbcTemplate.update(MODIFY_BOOK,args);
    }

    @Override
    public List<Book> queryAll() {
        String  QUERY_ALL_BOOK="select * from book";
        RowMapper<Book> rowMapper=new BeanPropertyRowMapper<~>(Book.class);
        books = jdbcTemplate.query(QUERY_ALL_BOOK,rowMapper);
        return books;
    }
}

完成jdbc的装配,下来该业务了

5Business业务

1)新建类,命名SaleService

2)创建一个对象BookDAO bookDAO,自动生成set方法

3)接口实现类建立联系,所以在BookDAOImpl里public类外@Repository(value= “bookDaoImpl”),即把实现类声明成组件,并取个名字

@Repository(value = "bookDaoImpl")
//不要忘了!!,写到BookDAOImpl类外

4)自动装配@Autowired 并说明哪个实现类@Quakifier(value = “bookDaoImpl”),完成接口和实现类的装配

package org.example.Bussiness;

import org.example.DAO.BookDAO;
import org.example.Model.Book;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;

import java.util.List;

public class SaleService {
    BookDAO bookDAO;
    @Autowired
    @Qualifier(value = "bookDaoImpl")
    public void setBookDAO(BookDAO bookDAO) {
        this.bookDAO = bookDAO;
    }
    public void insert(Book book){
        bookDAO.insertBook(book);
    }
    public void onSale(float sale){
        List<Book>bookList=bookDAO.queryAll();
        for(Book b:bookList){
            b.setPrice(b.getPrice()*sale);
            bookDAO.modifyBook(b);
        }
    }
}

6单元测试

1)回到beantest,实现大甩卖业务,所以SaleService service;同时加上注解@Autowired

2)提示报错,说不能实现自动装配,在SaleService类前加上注解@Service实现注解

3)写插入单元测试函数

	@Test
    public void insert(){
        book.setIsdn("007");
        book.setPrice((float) 4.32);
        book.setName("美术");
        service.insert(book);
    }

4)右键运行,应该显示一个pass,且数据库中有这条数据

5)测试大甩卖

@Test
    public void onSale(){
        service.onSale(0.5f);//5折
    }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值