自定义数据库连接池&&MyBatis框架入门

自定义数据库连接池

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介绍

  1. ORM概念:Object Relational Mapping 对应关系映射

    java语言是面向对象的,mysql是关系型数据库,两者需要有一个映射机制,这个映射机制称为ORM。由框架自动去完成的。

  2. mybatis的两种映射方式

    1. 通过XML的配置文件
    2. 通过注解

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

猜你喜欢

转载自blog.csdn.net/weixin_42478562/article/details/106844189
今日推荐