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片段的抽取与引用


相关文章
|
SQL Java 数据库连接
【YashanDB知识库】解决mybatis的mapper文件sql语句结尾加分号";"报错
【YashanDB知识库】解决mybatis的mapper文件sql语句结尾加分号";"报错
|
SQL XML Java
菜鸟之路Day35一一Mybatis之XML映射与动态SQL
本文介绍了MyBatis框架中XML映射与动态SQL的使用方法,作者通过实例详细解析了XML映射文件的配置规范,包括namespace、id和resultType的设置。文章还对比了注解与XML映射的优缺点,强调复杂SQL更适合XML方式。在动态SQL部分,重点讲解了`&lt;if&gt;`、`&lt;where&gt;`、`&lt;set&gt;`、`&lt;foreach&gt;`等标签的应用场景,如条件查询、动态更新和批量删除,并通过代码示例展示了其灵活性与实用性。最后,通过`&lt;sql&gt;`和`&lt;include&gt;`实现代码复用,优化维护效率。
1442 5
|
SQL Java 数据库
解决Java Spring Boot应用中MyBatis-Plus查询问题的策略。
保持技能更新是侦探的重要素质。定期回顾最佳实践和新技术。比如,定期查看MyBatis-Plus的更新和社区的最佳做法,这样才能不断提升查询效率和性能。
892 1
|
SQL Oracle 关系型数据库
解决大小写、保留字与特殊字符问题!Oracle双引号在SQL中的特殊应用
在Oracle数据库开发中,双引号的使用是一个重要但易被忽视的细节。本文全面解析了双引号在SQL中的特殊应用场景,包括解决标识符与保留字冲突、强制保留大小写、支持特殊字符和数字开头标识符等。同时提供了最佳实践建议,帮助开发者规避常见错误,提高代码可维护性和效率。
778 6
|
SQL Java 数据库连接
【YashanDB 知识库】解决 mybatis 的 mapper 文件 sql 语句结尾加分号";"报错
【YashanDB 知识库】解决 mybatis 的 mapper 文件 sql 语句结尾加分号";"报错
|
SQL 缓存 Java
框架源码私享笔记(02)Mybatis核心框架原理 | 一条SQL透析核心组件功能特性
本文详细解构了MyBatis的工作机制,包括解析配置、创建连接、执行SQL、结果封装和关闭连接等步骤。文章还介绍了MyBatis的五大核心功能特性:支持动态SQL、缓存机制(一级和二级缓存)、插件扩展、延迟加载和SQL注解,帮助读者深入了解其高效灵活的设计理念。
|
SQL Java 数据库连接
【潜意识Java】深入理解MyBatis,从基础到高级的深度细节应用
本文详细介绍了MyBatis,一个轻量级的Java持久化框架。内容涵盖MyBatis的基本概念、配置与环境搭建、基础操作(如创建实体类、Mapper接口及映射文件)以及CRUD操作的实现。此外,还深入探讨了高级特性,包括动态SQL和缓存机制。通过代码示例,帮助开发者更好地掌握MyBatis的使用技巧,提升数据库操作效率。总结部分强调了MyBatis的优势及其在实际开发中的应用价值。
687 1
|
SQL XML Java
六、MyBatis特殊的SQL:模糊查询、动态设置表名、校验名称唯一性
六、MyBatis特殊的SQL:模糊查询、动态设置表名、校验名称唯一性
574 0
|
SQL Java 数据库连接
canal-starter 监听解析 storeValue 不一样,同样的sql 一个在mybatis执行 一个在数据库操作,导致解析不出正确对象
canal-starter 监听解析 storeValue 不一样,同样的sql 一个在mybatis执行 一个在数据库操作,导致解析不出正确对象
|
关系型数据库 MySQL 网络安全
5-10Can't connect to MySQL server on 'sh-cynosl-grp-fcs50xoa.sql.tencentcdb.com' (110)")
5-10Can't connect to MySQL server on 'sh-cynosl-grp-fcs50xoa.sql.tencentcdb.com' (110)")