LomBok的使用,MyBatis的使用(增删改查)

news2025/1/10 20:58:34

Lombok是一个Java库,能自动插入编辑器并构建工具,简化Java开发。通过添加注解的方式,不需要 为类编写getter或equels方法,同时可以自动化日志变量。

结构

pom

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>org.example</groupId>
    <artifactId>day01</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.16</version>
        </dependency>
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.1</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.25</version>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>


    </dependencies>
</project>

核心配置文件

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <!-- 配置 mybatis的环境 -->
    <environments default="development">
        <!-- 配置环境 -->
        <environment id="development">
            <!-- 配置事务的类型 -->
            <transactionManager type="JDBC"></transactionManager>
            <!-- 配置连接数据库的信息:用的是数据源【连接池】-->
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
                <property name="url"
                          value="jdbc:mysql://localhost:3306/db_school"/>
                <property name="username" value="root"/>
                <property name="password" value="123456"/>
            </dataSource>
        </environment>
    </environments>
    <!-- 注册StudentDao接口映射文件位置 -->
    <mappers>
        <mapper resource="mapper/StudentMapper.xml"/>
    </mappers>
</configuration>

映射文件

<?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">
<!--namespace的值,就是该映射文件对应的接口-->
<mapper namespace="com.etime.dao.StudentDao">
    <!--id必须是接口中需要实现的方法的名字-->
    <!--resultType查询到的数据要封装成的类型-->
    <select id="getAllStudent" resultType="com.etime.pojo.Student">
        select * from tb_student;
    </select>

    <select id="getStudentBySid" parameterType="int" resultType="com.etime.pojo.Student">
        select * from tb_student where sid = #{sid};
    </select>

    <insert id="addStudent" parameterType="com.etime.pojo.Student">
        insert into tb_student(sname,sage,ssex,semail,sphoto) values (#{sname},#{sage},#{ssex},#{semail},#{sphoto})
    </insert>

    <delete id="delStudent" parameterType="com.etime.pojo.Student">
        delete from tb_student where sid = #{sid};
    </delete>

    <update id="editStudent" parameterType="com.etime.pojo.Student">
        update tb_student set sname=#{sname},sage=#{sage},ssex=#{ssex} where sid = #{sid}
    </update>

    <select id="getStudentCount" resultType="int">
        select count(*) from tb_student;
    </select>

    <select id="getStudentBySname" parameterType="String" resultType="com.etime.pojo.Student">
        select * from tb_student where sname like #{sname};
    </select>

    <select id="getCountBySname" parameterType="String" resultType="int">
        select count(*) from tb_student where sname like #{sname};
    </select>
</mapper>

工具类

package com.etime.utils;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import java.io.IOException;
import java.io.InputStream;

public class SqlSessionUtils {
    private static SqlSession sqlSession =  null;

    static {
        try {
            InputStream in = Resources.getResourceAsStream("config.xml");
            SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
            SqlSessionFactory factory = builder.build(in);
            sqlSession = factory.openSession();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public static SqlSession getSqlSession(){
        return sqlSession;
    }

    public static void closeSqlSession(SqlSession sqlSession){
        sqlSession.close();
    }
}

实体类

package com.etime.pojo;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@NoArgsConstructor
@AllArgsConstructor
public class Student {
    private int sid;
    private String sname;
    private int sage;
    private String ssex;
    private String semail;
    private String sphoto;
}

dao

package com.etime.dao;

import com.etime.pojo.Student;

import java.util.List;

public interface StudentDao {
    List<Student> getAllStudent();

    Student getStudentBySid(int sid);

    int addStudent(Student student);

    int delStudent(int sid);

    int editStudent(Student student);

    int getStudentCount();

    List<Student> getStudentBySname(String sname);

    int getCountBySname(String sname);
}

单元测试

package com.etime.text;

import com.etime.dao.StudentDao;
import com.etime.pojo.Student;
import com.etime.utils.SqlSessionUtils;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;

import java.util.List;

public class Text {
    //查询所有学生
    @Test
    public void to1(){
        SqlSession sqlSession = SqlSessionUtils.getSqlSession();
        StudentDao studentDao = sqlSession.getMapper(StudentDao.class);
        List<Student> list = studentDao.getAllStudent();
        list.forEach(System.out::println);
        SqlSessionUtils.closeSqlSession(sqlSession);
    }
    //根据主键查询
    @Test
    public void to2(){
        SqlSession sqlSession = SqlSessionUtils.getSqlSession();
        StudentDao studentDao = sqlSession.getMapper(StudentDao.class);
        Student student = studentDao.getStudentBySid(21);
        System.out.println(student);
        SqlSessionUtils.closeSqlSession(sqlSession);
    }
    //新增
    @Test
    public void to3(){
        SqlSession sqlSession = SqlSessionUtils.getSqlSession();
        StudentDao studentDao = sqlSession.getMapper(StudentDao.class);
        Student student = new Student(0, "mary", 21, "女", "mary@qq.com", "");
        int row = studentDao.addStudent(student);
        System.out.println(row);
        sqlSession.commit();
        SqlSessionUtils.closeSqlSession(sqlSession);
    }
    //根据主键删除
    @Test
    public void to4(){
        SqlSession sqlSession = SqlSessionUtils.getSqlSession();
        StudentDao studentDao = sqlSession.getMapper(StudentDao.class);
        int row = studentDao.delStudent(56);
        System.out.println(row);
        sqlSession.commit();
        SqlSessionUtils.closeSqlSession(sqlSession);
    }
    //修改
    @Test
    public void to5(){
        SqlSession sqlSession = SqlSessionUtils.getSqlSession();
        StudentDao studentDao = sqlSession.getMapper(StudentDao.class);
        int row = studentDao.editStudent(new Student(49, "mybatis", 21, "男", "", ""));
        System.out.println(row);
        sqlSession.commit();
        SqlSessionUtils.closeSqlSession(sqlSession);
    }
    //查询表中数据条数
    @Test
    public void to6(){
        SqlSession sqlSession = SqlSessionUtils.getSqlSession();
        StudentDao mapper = sqlSession.getMapper(StudentDao.class);
        int count = mapper.getStudentCount();
        System.out.println(count);
        SqlSessionUtils.closeSqlSession(sqlSession);
    }
    //根据表中某字符串列进行模糊查询
    @Test
    public void to7(){
        SqlSession sqlSession = SqlSessionUtils.getSqlSession();
        StudentDao studentDao = sqlSession.getMapper(StudentDao.class);
        String sname = "%建%";
        List<Student> list = studentDao.getStudentBySname(sname);
        list.forEach(System.out::println);
        SqlSessionUtils.closeSqlSession(sqlSession);
    }
    //根据姓名模糊查询数据条数
    @Test
    public void to8(){
        SqlSession sqlSession = SqlSessionUtils.getSqlSession();
        StudentDao studentDao = sqlSession.getMapper(StudentDao.class);
        int count = studentDao.getCountBySname("%建%");
        System.out.println(count);
        SqlSessionUtils.closeSqlSession(sqlSession);
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1068136.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

LLM - FastAPI 搭建简易问答 Server

目录 一.引言 二.辅助函数 1.黑名单 2.清除函数 三.模型函数 1.加载模型 2.生成配置 四.服务部署 1.post - predict 2.get - clean_cache 3.main - run_app 五.总结 一.引言 SFT workflow 微调工作流程 一文中我们介绍了模型微调从数据到最终应用的流程 FastAPI …

C语言 选择(分支)

if 语句&#xff08;分支语句/选择语句&#xff09; 结构&#xff1a; if ( expressio ) statement 如果对 expression 求值为真&#xff08;非0&#xff09;&#xff0c;则执行 statement &#xff1b;否则&#xff0c;跳过 statement 。与 while 循环一样&#xff0c…

推荐两款不错的打字练习网站~

前言 对于写论文或者编程工作&#xff0c; 打字是其中十分耗费体力的一环&#xff0c;如果学会了盲打&#xff0c;那么可以起到事倍功半的作用。为了提高工作效率&#xff0c;我特意在网路上搜寻了大量打字练习的网站&#xff0c;最终发现有两款打字网站十分不错&#xff0c;同…

论文阅读-- A simple transmit diversity technique for wireless communications

一种简单的无线通信发射分集技术 论文信息&#xff1a; Alamouti S M. A simple transmit diversity technique for wireless communications[J]. IEEE Journal on selected areas in communications, 1998, 16(8): 1451-1458. 创新性&#xff1a; 提出了一种新的发射分集方…

搭建环境遇到的坑

office2010装完没法激活&#xff0c;因为没有关闭杀毒软件和防火墙。AWTK designer编译时报这个错&#xff0c;scons按这个方法装之后就好了。 装AWTK designer后&#xff0c;打不开软件&#xff0c;总是闪退&#xff0c;装了VS后就打得开了装IAR时找不到ActivationInfo.txt&am…

abp中iquery类使用orderBy接口功能报错问题

在后端写排序时&#xff0c;当使用如下OrderBy(排序字段)时&#xff0c;只引用System.Linq时如下错误&#xff1a; 只是因为缺少一个引用&#xff1a;System.Linq.Dynamic.Core  在如下类文件中引用 System.Linq.Dynamic.Core  注意&#xff1a;切记不能删掉System.Linq的引…

STM32 CubeMX ADC采集(HAL库)

STM32 CubeMX ADC采集&#xff08;HAL库&#xff09; STM32 CubeMX STM32 CubeMX ADC采集&#xff08;HAL库&#xff09;ADC介绍ADC主要特征一、STM32 CubeMX设置二、代码部分三&#xff0c;单通道轮询采样速度总结 ADC介绍 12位ADC是一种逐次逼近型模拟数字转换器。它有多达1…

springboot整合rabbitmq入门(三)

在上一篇文章中介绍了rabbitmq的fanout模式。今天继续学习另一种模式——direct模式。这种模式是rabbitmq的最简单一种模式。 首先创建一个名为helloDirect1的对列 Configuration public class DirectRabbitConfig {Beanpublic Queue directA(){return new Queue("hell…

【翻译】NCLS: Neural Cross-Lingual Summarization

Abstract 跨语言摘要&#xff08;CLS&#xff09;是为不同语言的源文件生成特定语言摘要的任务。现有方法通常将此任务分为两个步骤&#xff1a;摘要和翻译&#xff0c;导致错误传播的问题。为了解决这个问题&#xff0c;我们首次提出了一种端到端的CLS框架&#xff0c;我们称…

淘宝商品销量数据接口,淘宝商品销量数据API接口

淘宝商品销量数据接口是淘宝开放平台提供的一种API接口&#xff0c;通过该接口&#xff0c;商家可以获取到淘宝平台上某一商品的销量数据&#xff0c;包括商品的总销量、近期销量、销售趋势等。 该接口的使用方法是&#xff0c;商家先注册淘宝开放平台账号&#xff0c;申请App…

体会jdk17对于空指针的增强

jdk17 // 可以清楚的看出来a.b.c.num中由于c是空指针&#xff0c;所以导致异常 jdk11 // 只报第6行空指针了&#xff0c;但是因为哪个变量&#xff0c;不知道

打exit_hook,如何找exit_hook的偏移

最近在打比赛的时候&#xff0c;一眼就知道咋做了&#xff0c;打exit_hook为one_gadget 但是泄露出libc之后&#xff0c;没法找到exit_hook的偏移&#xff0c;所以没能拿到一血。搜了好多&#xff0c; 总结大概就是exit_hook不是真实存在的&#xff0c;而是函数指针&#xff0c…

ansible - Role

1、简介&#xff1a; Ansible 中的角色&#xff08;Role&#xff09;是一种组织和封装Playbook的方法&#xff0c;用于管理和组织 Ansible代码。它可以将任务和配置逻辑模块化&#xff0c;以便在不同的Playbook中共享和重用。 2、通过 role 远程部署并配置 nginx (1) 准备目…

【FISCO-BCOS】十七、角色的权限控制

目录 一、角色定义 二、账户权限控制 1.委员新增、撤销与查询 2.委员权重修改 3.委员投票生效阈值修改 4. 运维新增、撤销与查询 一、角色定义 分为治理方、运维方、监管方和业务方。考虑到权责分离&#xff0c;治理方、运维方和开发方权责分离&#xff0c;角色互斥。 治理…

pytorch_神经网络构建2(数学原理)

文章目录 深层神经网络多分类深层网络反向传播算法优化算法动量算法Adam 算法 深层神经网络 分类基础理论: 交叉熵是信息论中用来衡量两个分布相似性的一种量化方式 之前讲述二分类的loss函数时我们使用公式-(y*log(y_)(1-y)*log(1-y_)进行概率计算 y表示真实值,y_表示预测值 …

MyBatisPlus(十五)分页查询

说明 MyBatisPlus 提供了分页查询的功能。 MyBatisPlus 的分页功能&#xff0c;是通过分页插件实现的。要使用分页功能&#xff0c;需要配置分页插件的拦截器。 MyBatisPlus 的分页功能&#xff0c;可以通过内置的API接口实现&#xff1b;也可以通过自定义的 mapper#method …

第七章 正交实验法用例评审bug管理流程

一、正交试验法 利用因果图来设计测试用例时,作为输入条件的原因与输出结果之间的因果关系,有时很难从软件需求规格说明中得到。往往因果关系非常庞大,以至于据此因果图得到的测试用例数目多的惊人,给软件测试带来沉重的负担,为了有效地合理地减少测试的工时与费用,可利…

合并不同门店数据-上下合并

项目背景&#xff1a;线下超市分店&#xff0c;统计产品的销售数量和销售额&#xff0c;并用透视表计算求和 merge()函数可以根据链接键横向连接两张不同表&#xff0c;concat()函数可以上下合并和左右合并2种不同的合并方式。merge()函数只能横向连接两张表&#xff0c;而con…

海信电视U8“死磕”技术,家庭影音娱乐的体验突围

最近《奥本海默》上映&#xff0c;导致我无心工作&#xff0c;沉迷抢票。因为北京能播放该片IMAX 1.43画幅的影院只有一家&#xff0c;场场爆满&#xff0c;一票难求。 这次经历也让我对科技产业多了一点思考。流媒体火爆之后&#xff0c;电影发烧友还是会去影院看电影&#xf…

企业信息查询平台:天眼销正式上线!

在团队的不断努力下&#xff0c;天眼销平台终于和大家见面了&#xff01;总所周知我们是一家数据服务提供商&#xff0c;作为西南数据交易所的数据提供商之一&#xff0c;之前主要是面向B端客户提供数据服务。现在&#xff0c;我们上线的天眼销&#xff08;tianyanxiao.)主要面…