文章目录
在当今这个信息爆炸的时代,数据的有效管理变得越来越重要。数据库作为应用程序中最核心的部分之一,离不开高效和稳定的数据库连接池来确保性能。那么,如何在众多技术选项中寻找那个最适合我们的方案呢?本文将会带大家深入浅出地了解数据库连接池的奥秘并一探Druid数据库连接池的深度集成。同时,我们也会探讨如何借助Lombok这一神器来让我们的Java代码更加精简高效。除此之外,本文还将涵盖MyBatis的基础操作和动态SQL的应用,通过一系列实例,帮助大家快速掌握其精髓。一起来探索这些工具如何帮助我们在编码世界中游刃有余吧!
一、数据据连接池
数据库连接池是个容器,负责分配、管理数据库连接(Connection)
它允许应用程序重复使用一个现有的数据库连接,而不是再重新建立一个
释放空闲时间超过最大空闲时间的连接,来避免因为没有释放连接而引起的数据库连接遗漏
好处:
减少资源重用
提升系统响应速度
避免数据库连接遗漏
切换Druid数据库连接池
官方地址:https://github.com/alibaba/druid/tree/master/druid-spring-boot-starter
pom.xml 包中加入以下代码
**pom.xml**
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.2.8</version>
</dependency>
或者连接数据库时加上.druid
二、lombok
Lombok是一个实用的Java类库,能通过注解的形式自动生成构造器、getter/setter、equals、hashcode、toString等方法,并可以自动化生成日志变量,简化java开发、提高效率。
pom.xml 包中加入以下代码
**pom.xml**
<!--lombok-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
User包便可简化成如下代码
package com.itheima.pojo;
import lombok.*;
import org.apache.ibatis.annotations.Select;
//@Getter
//@Setter
//@ToString
//@EqualsAndHashCode
//以上四向可用@Data代替
@Data
@NoArgsConstructor
@AllArgsConstructor
public class User {
private Integer id;
private String name;
private Short age;
private Short gender;
private String phone;
注:本文中所用的项目与上一篇创建:JavaWeb基础第二章(Maven项目与MyBatis 的快速入门与配置)
三、Mybatis基础操作—准备
四、Mybatis基础操作—删除
接口方法
@Delete("delete from emp where id = #{id}")
public void delete(Integer id);
测试方法
@Autowired
private EmpMapper empMapper;
@Test
public void testDelete(){
empMapper.delete(15);
System.out.println("删除成功");
}
日志输出
性能更高
更安全(防止SQL注入)
五、Mybatis基础操作—插入
接口方法
@Insert("insert into emp(username, name, gender, image, job, entrydate, dept_id, create_time, update_time) " + "values(#{username}, #{name}, #{gender}, #{image}, #{job}, #{entrydate}, #{deptId}, #{createTime}, #{updateTime})")public void insert(Emp emp);
测试方法
@Test
public void tsetInsert(){
//构造函数
Emp emp = new Emp();
emp.setUsername("张三");
emp.setName("张三");
emp.setImage("123");
emp.setGender((short)1);
emp.setJob((short)1);
emp.setEntrydate(LocalDate.of(2022,1,1));
emp.setCreateTime(LocalDateTime.now());
emp.setUpdateTime(LocalDateTime.now());
emp.setDeptId(16);
System.out.println("添加成功");
}
六、Mybatis基础操作—更新
接口方法
@Update("update emp set username=#{username}, name=#{name}, gender=#{gender}, image=#{image}, job=#{job}, entrydate=#{entrydate}, dept_id=#{deptId}, update_time=#{updateTime} where id=#{id}")
public void update(Emp emp);
测试方法
@Test
public void tsetupdate(){
//构造函数
Emp emp = new Emp();
emp.setUsername("张三");
emp.setName("张三");
emp.setImage("123");
emp.setGender((short)1);
emp.setJob((short)1);
emp.setEntrydate(LocalDate.of(2022,1,1));
emp.setCreateTime(LocalDateTime.now());
emp.setUpdateTime(LocalDateTime.now());
emp.setDeptId(16);
System.out.println("更新成功");
七、Mybatis基础操作—查询
接口方法
@Select("select * from emp where id = #{id}")
public Emp getById(Integer id);
测试方法
@Autowired
private EmpMapper empMapper;
@Test
public void testSelect(){
empMapper.delete(15);
System.out.println("查询成功");
}
八、XML映射文件
使用Mybatis的注解,主要是来完成一些简单的增删改查功能。如果需要实现复杂的SQL功能,建议使用XML来配置映射语句。
官网:https://mybatis.net.cn/getting-started.html
探究已映射的 SQL 语句
<?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="org.mybatis.example.BlogMapper">
<select id="selectBlog" resultType="Blog">
select * from Blog where id = #{id}
</select>
</mapper>
九、MyBatis的动态SQL
十、MyBatis的动态SQL---- if,where,set
案例
代码如下(示例):
<!-- 动态更新员工-->
<update id="update2">
update emp
<set>
<if test="username != null">username = #{username},</if>
<if test="name != null">name = #{name},</if>
<if test="gender != null">gender = #{gender},</if>
<if test="image != null">image = #{image},</if>
<if test="job != null">job = #{job},</if>
<if test="entrydate != null">entrydate = #{entrydate},</if>
<if test="deptId != null">dept_id = #{deptId},</if>
<if test="updateTime != null">update_time = #{updateTime}</if>
</set>
where id = #{id}
</update>
**注意:**动态地在行首插入 SET 关键字,并会删掉额外的逗号。(用在update语句中)
十一、MyBatis的动态SQL---- foreach
foreach常用于批量管理
<!--批量删除员工 (18,19,20)-->
<!--
collection: 遍历的集合
item: 遍历出来的元素
separator: 分隔符
open: 遍历开始前拼接的SQL片段
close: 遍历结束后拼接的SQL片段
-->
<delete id="deleteByIds">
delete from emp where id in
<foreach collection="ids" item="id" separator="," open="(" close=")">
#{id}
</foreach>
</delete>
十二、MyBatis的动态SQL---- sql-include
常用于sql片段的抽取与引用
<sql id="commonSelect">
select id, username, password, name, gender, image, job, entrydate, dept_id, create_time, update_time
from emp
</sql>
<!--resultType: 单条记录封装的类型-->
<select id="list" resultType="com.itheima.pojo.Emp">
<include refid="commonSelect"/>
<where>
<if test="name != null">
name like concat('%', #{name}, '%')
</if>
<if test="gender != null">
and gender = #{gender}
</if>
<if test="begin != null and end != null">
and entrydate between #{begin} and #{end}
</if>
</where>
order by update_time desc
</select>