JDBC第二次学习笔记

三层架构

什么是三层

1.表示层:
命名:XXXView
职责:收集用户的数据和需求,展示数据

2.业务逻辑层
命名:XXXServiceImpl
职责:数据加工处理,调用DAO完成业务实现,控制事务

3.数据访问层
命名:XXXDaoImpl
职责:向业务层提供数据,将业务层加工的数据同步到数据库

在这里插入图片描述
在这边值得注意的是如果我的业务升级是的功能更完善,代码更简洁,我的业务逻辑层,数据访问层需要新建立一个,但是如果新建立的业务逻辑层,数据访问层的方法名和之前不同,那么就需要很多地方将方法名更改为现在的名字,这样的操作很繁琐,所以我们需要使用到接口进行规范,不管是第几个版本更新,你的方法名,数据类型定义都一样,就不需要进行大量的修改了,只需要在测试时更改为跟新后的类名即可。

Dao定义接口

在Dao中实现业务的各种操作,增删改查,这样业务层中直接调用Dao层的代码进行编写,一般Dao层都需要继承一个接口进行规范,在测试运行时可通过接口的引用创建Dao操作对象。

Service定义接口

在service层中主要是实现对业务的各种条件的实现,service层也需要继承一个接口进行规范。

三层结构项目的搭建

程序设计时考虑易修改,易扩展,,为Service层和Dao层设计接口,,便于未来更换实现类。

需要创建 实体类进行数据库的初始化数据库连接,关闭,回滚的封装类各项操作的DaoImpl类和它的接口业务的编写和它的接口propert类进行跨平台编写日期转换的封装类一些特殊需求的类最后的测试类

DaoUtils

在Dao层,对数据库的增删改查操作存在代码沉冗,可对其进行抽取封装DaoUtils工具类复用。

commsUpdate

	公共处理增删改的方法
	sql语句,参数列表
	@param sql 执行sql语句
	@param args 参数列表,为占位符赋值
	@return
public int commonsUpdate(String sql,Object... args);后面是传入的数组
public int insert(Person person) {
        String sql="insert into Person(name,age,bornDate,email,address)values(?,?,?,?,?);";
        Object[] args={person.getName(),person.getAge(),DateUtils.utilToSql(person.getBornDate()),person.getEmail(),person.getAddress()};
        return daoUtils.commonsUpdate(sql,args);

DaoUtils的查询需要进行对象的回调,在查询所有的时候需要对进行泛型规范,因为你不能确定查询的数据类型是什么。反正好难,我也看不懂,懵逼的一批。

  public Person select(int id) {
        String sql="select * from Person where id=?;";
        List<Person>list=daoUtils.commonsSelect(sql,new PersonRowMapper(),id);
        if(!list.isEmpty())
        {
            return  list.get(0);
        }
        return null;
    }

Druid连接池

在程序初始化时,预先创建指定数量的的数据库连接对象存储在池中。当需要连接数
据库时,从连接池中取出现有连接;使用完毕,也不会进行关闭,而是返回池中,实
现复用,节约资源

Druid连接池使用步骤

*创建database.properties配置文件
*引入druid-1.1.5.jar文件

database.properties配置文件

driver=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://localhost:3306/companydb?characterEncoding=utf-8&serverTimezone=UTC
username=root
password=131556
#初始化连接
initialSize=10
#最大连接数量
maxActive=30
#最小空闲数量
maxIdle=5
#超时等待时间
maxWait=3000

连接池工具类

public class Dbutils {
    //声明连接池对象
    private static DruidDataSource ds;

    static{

        Properties properties=new Properties();
        InputStream is =Dbutils.class.getResourceAsStream("/database.properties");
        try {
            properties.load(is);
            //创建连接池
            try {
                ds=(DruidDataSource) DruidDataSourceFactory.createDataSource(properties);
            } catch (Exception e) {
                e.printStackTrace();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

Apache的Dbutils使用

commons Dbutils是Apache组织提供的一个对JDBC进行简单封装的开源工具类库
,使用它能简化JDBC应用程序开发。同时,不会影响程序的性能。

Dbutils简介
* Dbutils是java编程中数据库操作实用小工具,小巧,简单,实用。
* 对于数据表的查询操作,可以把结果转换为List,Array,Set,等集合,便于操作。
* 对于数据表的DML操作,也变得很简单(只需要写SQL语句)
Dbutils主要包括

	ResultSetHandler接口:转换类型接口
		BeanHandler类:实现类,一条记录转换为对象
		BeanListHandler类:实现类,把多条记录转换为List集合
		ScalarHandler类:实现类,适合一行一列数据
	QueryRunner:执行sql语句的类
		增,删,改:update()
		查询:query()

Dbutils使用步骤

	导入jar包:
		mysql连接jar包
		druid-1.1.5.jar
		database.proterties配置文件
		comms-dbutils-1.6-jar

反正导入这些包,连接,关闭,删除,更新什么的可以直接通过包里面的类调用,不需要从头开始编写,方便了许多。
Apache的新增(更新,删除类似)

 public int insert(User user) {
        Object[] params={user.getId(),user.getUsername(),user.getPassword(),user.getPhone()};
        try {
            int result=queryRunner.update("insert into `user`(id,username,password,phone)values(?,?,?,?);",params);
            return result;
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return 0;
    }

Apache的查询

#单个查询
  public User select(int id) {
        try {
            User user= queryRunner.query("select * from `user`where id=?",new BeanHandler<User>(User.class),id);
            return user;
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return null;
    }



#所有查询
  public List<User> selectAll() {

        try {
            List<User>list=queryRunner.query("select * from `user`",new BeanListHandler<User>(User.class));
            return list;
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return null;
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值