当前位置: 主页 > JAVA语言

java使用连接池的好处-java线程池使用

发布时间:2023-04-13 09:14   浏览次数:次   作者:佚名

创建springboot工程

创建springboot工程,并导入 mybatis的起步依赖、mysql的驱动包。

java使用连接池的好处_java线程池使用_java线程池原理

java线程池原理_java线程池使用_java使用连接池的好处

配置MyBatis

在springboot项目中java使用连接池的好处,可以编写application.properties文件,配置数据库连接信息。我们要连接数据库,就需要配置数据库连接的基本信息,包括:driver-class-name、url 、username,password。

#驱动类名称
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
#数据库连接的url
spring.datasource.url=jdbc:mysql://localhost:3306/mybatis
#连接数据库的用户名
spring.datasource.username=root
#连接数据库的密码
spring.datasource.password=1234

编写SQL语句

在创建出来的springboot工程中,在引导类所在包下,在创建一个包 mapper。在mapper包下创建一个接口 UserMapperjava使用连接池的好处,这是一个持久层接口(Mybatis的持久层接口规范一般都叫 XxxMapper)。

java线程池原理_java线程池使用_java使用连接池的好处

UserMapper:

import com.itheima.pojo.User;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;
import java.util.List;
@Mapper
public interface UserMapper {
    
    //查询所有用户数据
    @Select("select id, name, age, gender, phone from user")
    public List list();
    
}

@Mapper注解:表示是mybatis中的Mapper接口

@Select注解:代表的就是select查询,用于书写select查询语句

该测试类在运行时,会自动通过引导类加载Spring的环境(IOC容器)。我们要测试那个bean对象,就可以直接通过@Autowired注解直接将其注入进行,然后就可以测试了。

测试类代码如下:

@SpringBootTest
public class MybatisQuickstartApplicationTests {
	
    @Autowired
    private UserMapper userMapper;
	
    @Test
    public void testList(){
        List userList = userMapper.list();
        for (User user : userList) {
            System.out.println(user);
        }
    }
}

数据库连接池 介绍

数据库连接池是个容器,负责分配、管理数据库连接(Connection)

允许应用程序重复使用一个现有的数据库连接,而不是再重新建立一个

释放空闲时间超过最大空闲时间的连接,来避免因为没有释放连接而引起的数据库连接遗漏

数据库连接池的好处:

资源重用

提升系统响应速度

避免数据库连接遗漏

产品

要怎么样实现数据库连接池呢?

常见的数据库连接池:

现在使用更多的是:Hikari、Druid (性能更优越)

java线程池原理_java线程池使用_java使用连接池的好处

如果我们想把默认的数据库连接池切换为Druid数据库连接池,只需要完成以下两步操作即可:

参考官方地址:druid/druid-spring-boot-starter at master · alibaba/druid · GitHub

在pom.xml文件中引入依赖


    
    com.alibaba
    druid-spring-boot-starter
    1.2.8

在application.properties中引入数据库连接配置

方式1:

spring.datasource.druid.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.druid.url=jdbc:mysql://localhost:3306/mybatis
spring.datasource.druid.username=root
spring.datasource.druid.password=1234

方式2:

spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/mybatis
spring.datasource.username=root
spring.datasource.password=1234

lombok 介绍

Lombok是一个实用的Java类库,可以通过简单的注解来简化和消除一些必须有但显得很臃肿的Java代码。

java使用连接池的好处_java线程池使用_java线程池原理

通过注解的形式自动生成构造器、getter/setter、equals、hashcode、toString等方法,并可以自动化生成日志变量,简化java开发、提高效率。

注解作用

@Getter/@Setter

为所有的属性提供get/set方法

@ToString

会给类自动生成易阅读的 toString 方法

@EqualsAndHashCode

根据类所拥有的非静态字段自动重写 equals 方法和 hashCode 方法

@Data

提供了更综合的生成代码功能(@Getter + @Setter + @ToString + @EqualsAndHashCode)

@NoArgsConstructor

实体类生成无参的构造器方法

@AllArgsConstructor

为实体类生成除了static修饰的字段之外带有各参数的构造器方法。

使用

第1步:在pom.xml文件中引入依赖



    org.projectlombok
    lombok

在实体类上添加了@Data注解,那么这个类在编译时期,就会生成getter/setter、equals、hashcode、toString等方法。

java线程池使用_java使用连接池的好处_java线程池原理

说明:@Data注解中不包含全参构造方法,通常在实体类上,还会添加上:全参构造、无参构造

import lombok.Data;
@Data //getter方法、setter方法、toString方法、hashCode方法、equals方法
@NoArgsConstructor //无参构造
@AllArgsConstructor//全参构造
public class User {
    private Integer id;
    private String name;
    private Short age;
    private Short gender;
    private String phone;
}

Lombok的注意事项:

java使用连接池的好处_java线程池原理_java线程池使用

MyBatis基础操作 日志输入

在Mybatis当中我们可以借助日志,查看到sql语句的执行、执行传递的参数以及执行结果。具体操作如下:

打开application.properties文件

开启mybatis的日志,并指定输出到控制台

#指定mybatis输出日志的位置, 输出控制台
mybatis.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl

数据封装

解决方案:

起别名

手动结果映射

开启驼峰命名

起别名:在SQL语句中,对不一样的列名起别名,别名和实体类属性名一样

@Select("select id, username, password, name, gender, image, job, entrydate, " +
        "dept_id AS deptId, create_time AS createTime, update_time AS updateTime " +
        "from emp " +
        "where id=#{id}")
public Emp getById(Integer id);

手动结果映射:通过 @Results及@Result 进行手动结果映射

@Results({@Result(column = "dept_id", property = "deptId"),
          @Result(column = "create_time", property = "createTime"),
          @Result(column = "update_time", property = "updateTime")})
@Select("select id, username, password, name, gender, image, job, entrydate, dept_id, create_time, update_time from emp where id=#{id}")
public Emp getById(Integer id);

开启驼峰命名(推荐):如果字段名与属性名符合驼峰命名规则,mybatis会自动通过驼峰命名规则映射

# 在application.properties中添加:
mybatis.configuration.map-underscore-to-camel-case=true

要使用驼峰命名前提是 实体类的属性 与 数据库表中的字段名严格遵守驼峰命名。

解决查询条件的SQL注入风险

@Mapper
public interface EmpMapper {
    @Select("select * from emp " +
            "where name like concat('%',#{name},'%') " +
            "and gender = #{gender} " +
            "and entrydate between #{begin} and #{end} " +
            "order by update_time desc")
    public List list(String name, Short gender, LocalDate begin, LocalDate end);
}