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;
}