JavaWeb基础第三章(MyBatis的应用,基础操作与动态SQL)

简介: JavaWeb基础第三章(MyBatis的应用,基础操作与动态SQL)

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


相关文章
|
2天前
|
SQL XML 数据库
后端数据库开发高级之通过在xml文件中映射实现动态SQL
后端数据库开发高级之通过在xml文件中映射实现动态SQL
9 3
|
2天前
|
SQL XML Java
后端数据库开发JDBC编程Mybatis之用基于XML文件的方式映射SQL语句实操
后端数据库开发JDBC编程Mybatis之用基于XML文件的方式映射SQL语句实操
18 3
|
2天前
|
SQL Java 数据库连接
2万字实操案例之在Springboot框架下基于注解用Mybatis开发实现基础操作MySQL之预编译SQL主键返回增删改查
2万字实操案例之在Springboot框架下基于注解用Mybatis开发实现基础操作MySQL之预编译SQL主键返回增删改查
13 2
|
1天前
|
SQL Java 数据库连接
Mybatis日志SQL解析
Mybatis日志SQL解析
6 0
|
2天前
|
SQL Java 数据库连接
Mybatis动态SQL语句总结
Mybatis动态SQL语句总结
|
5天前
|
SQL Java 数据库连接
【MyBatis】MyBatis操作数据库(二):动态SQL、#{}与${}的区别
【MyBatis】MyBatis操作数据库(二):动态SQL、#{}与${}的区别
12 0
|
8天前
|
SQL IDE Java
Java连接SQL Server数据库的详细操作流程
Java连接SQL Server数据库的详细操作流程
|
16天前
|
SQL DataWorks NoSQL
DataWorks产品使用合集之如何将SQL Server中的数据转存到MongoDB
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
244 1
|
1月前
|
SQL API 流计算
实时计算 Flink版产品使用合集之在Mac M1下的Docker环境中开启SQL Server代理的操作步骤是什么
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
162 1
|
9天前
|
SQL 存储 关系型数据库
关系型数据库中的SQL Server
【6月更文挑战第11天】
44 3