在当今这个信息爆炸的时代,数据的有效管理变得越来越重要。数据库作为应用程序中最核心的部分之一,离不开高效和稳定的数据库连接池来确保性能。那么,如何在众多技术选项中寻找那个最适合我们的方案呢?本文将会带大家深入浅出地了解数据库连接池的奥秘并一探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片段的抽取与引用