自定义数据库连接池
1.导入jar包
2.实现DataSource接口,这是JDBC定义的规范
3.定义list集合,用来存放连接对象
public class MyDataSoource01 implements DataSource {
private List<Connection> datasources;
4.在构造方法中初始化datasources,并默认创建十个连接存入集合
public MyDataSoource01() {
//在构造方法中初始化datasources,并默认创建是个连接存入集合
datasources=new ArrayList<>();
//创建10个连接对象存入datasource
for (int i = 0; i < 10; i++) {
Connection connection= JDBCUtils.getConnection();
datasources.add(connection);
}
}+7e3e
5.重写getConnection方法
public Connection getConnection() throws SQLException {
Connection connection=null;
if(datasources.size()>0){
//获取连接
connection = datasources.get(0);
//将获取的连接暂时从连接池移出
datasources.remove(connection);
}
return connection;
}
5.创建测试方法,代码
public class Demo01 {
public static void main(String[] args) throws Exception{
//从创建自定义连接池
MyDataSoource01 myDataSoource01 = new MyDataSoource01();
//打印连接池数量
System.out.println(myDataSoource01.getSize());
//获取连接并打印
/*Connection connection = myDataSoource01.getConnection();
System.out.println(connection);
System.out.println(myDataSoource01.getSize());//9
connection.close();
System.out.println(myDataSoource01.getSize());//9*/
//循环获取10次连接,最后打印数量
for (int i = 1; i <= 10; i++) {
Connection con = myDataSoource01.getConnection();
System.out.println("第"+i+"个连接:"+con);
}
System.out.println(myDataSoource01.getSize());
}
}
归还数据库连接
1.装饰者设计模式
作用:不改变原有类的基础下增强原有类的功能
2.适配器设计模式
个人理解:我们需要一个已经实现了功能的类,和一个没有实现功能的类,然后做一个目标接口
目标接口(我们想要什么类型)
已存在实现()
适配(实现目标接口,继承已有实现)
4.动态代理方式
Jdk通过Proxy来支持动态代理,使用方法newProxyInstanceof来创建Proxy类,实现它的invoke方法,在调用代理对象中的每一个方法时,在代码内部,都是直接调用了InvocationHandler的invoke方法,而invoke方法根据代理类传递给自己的method参数来区分是什么方法。
框架的介绍
1.什么是框架
程序开发中的框架往往是对常见功能的封装,程序框架理解为基础或者机械标准件。
例如:你要造一辆马车,在没有框架的情况下,你需要自己去伐木,去把木头做成木板,木棍,然后组成轮子,门,等部件,然后组装起来。
但如果你用了框架,就相当于你有现成的轮子,门等部件,你只需要组装一下就可以了。
一个框架是一组可复用的设计构件。
框架(Framework)是整个或者部分系统的可重用设计,是JavaEE底层技术的封装。
框架是可以被开发者定制的应用骨架。
框架是一个半成品,软件是成品。我们在它的基础上开发出成品。
框架解决的问题
解决了技术通用的问题
在JavaEE体系中,有着各种各样的技术。不同的软件企业,根据自身的业务需求选择不同的技术,容易造成应用依赖技术,增加了项目开发实现的复杂性和技术风险性。企业项目中应该将应用的设计与实现技术解耦。
提升了开发效率
企业项目中使用框架,只需要专注实现业务需求。使用框架的方便性,提升了开发效率。
提升了系统稳定性
一个成熟的框架,经过了在众多企业项目中的验证使用,稳定性有保障。
ORM介绍
-
ORM概念:Object Relational Mapping 对应关系映射
java语言是面向对象的,mysql是关系型数据库,两者需要有一个映射机制,这个映射机制称为ORM。由框架自动去完成的。
-
mybatis的两种映射方式
- 通过XML的配置文件
- 通过注解
MyBatis 快速入门
MyBatis是一个优秀的基于java的持久层框架,它内部封装了JDBC,使开发者只需要关注SQL语句本身,而不需要花费精力去处理加载驱动、创建连接、创建执行者等复杂的操作。
1.导入jar包
2.编写映射配置文件
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="StudentMapper">
<select id="selectAll" resultType="student">
SELECT * FROM student
</select>
<select id="selectById" resultType="student" parameterType="int">
SELECT * FROM student WHERE sid = #{id}
</select>
<insert id="insert" parameterType="student">
INSERT INTO student VALUES (#{sid},#{name},#{age},#{birthday})
</insert>
<update id="update" parameterType="student">
UPDATE student SET name=#{name},age=#{age},birthday=#{birthday} WHERE sid=#{sid}
</update>
<delete id="delete" parameterType="int">
DELETE FROM student WHERE sid=#{sid}
</delete>
</mapper>
3.编写核心配置文件
<?xml version="1.0" encoding="UTF-8" ?>
<!--MyBatils的DTD约束-->
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
<!--configuration 核心根标签-->
<configuration>
<!--引入配置文件信息,resource代表路径-->
<properties resource="jdbc.properties"/>
<settings>
<setting name="logImpl" value="log4j"/>
</settings>
<!--起别名-->
<typeAliases>
<typeAlias type="com.itheima01.bean.Student" alias="student"/>
<!--<package name="com.itheima01.bean"/>-->
</typeAliases>
<!--environments 配置数据库环境,环境可以有多个,default属性指定默认使用哪个-->
<environments default="mysql">
<!--enviroment配置数据库环境 id属性唯一-->
<environment id="mysql">
<!--transactionMapper事务管理-->
<transactionManager type="JDBC"></transactionManager>
<!--dataSource数据源信息-->
<dataSource type="POOLED">
<!--获取数据库连接的配置信息-->
<property name="driver" value="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
</dataSource>
</environment>
</environments>
<!--引入映射配置文件-->
<mappers>
<!--引入指定的映射配置文件-->
<mapper resource="StudentMapper.xml"/>
</mappers>
</configuration>
4.使用相应的API来完成编码
其他增删改查功能与下相同,只需修改方法名和传入参数等
@Test
public void selectById() throws Exception{
//1.加载核心配置文件
InputStream is = Resources.getResourceAsStream("MyBatisConfig.xml");
//2.获取SqlSession工厂对象
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);
//3.通过工厂对象获取SqlSession对象
SqlSession sqlSession = sqlSessionFactory.openSession();
//4.执行映射配置文件中的sql语句,并接收结果
Student stu = sqlSession.selectOne("StudentMapper.selectById", 1);
//5.处理结果
System.out.println(stu);
//6.释放资源
sqlSession.close();
is.close();
}