Mybatis 框架搭建封装JDBC,实现sql语句

news2025/1/23 22:30:56

目录

1、maven新建一个工程​编辑

 2、添加POM.XML配置文件

3、创建实例包

 4、创建一个环境资源根目录

5、配置环境文件

6、创建接口,添加方法

7、编写sql语句

8、创建测试类

8.1 、定义工厂模式

8.2 、定义会话

8.3、定义对象

8.5、获取Builder建造工厂

8.6、通过建造工厂建造SqlSessionFactory

8.7、 创建Session会话

8.8、 获取Session会话的执行者

8.9、提交和释放资源 

9、通过mysbatis实现sql语句

9.1、insert:

9.2、update

9.3、 delete


1、maven新建一个工程

 2、添加POM.XML配置文件

	<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
			<version>8.0.29</version>
		</dependency>
		<dependency>
			<groupId>com.oracle.database.jdbc</groupId>
			<artifactId>ojdbc6</artifactId>
			<version>11.2.0.4</version>
		</dependency>
		<dependency>
			<groupId>org.mybatis</groupId>
			<artifactId>mybatis</artifactId>
			<version>3.2.2</version>
		</dependency>

3、创建实例包

 4、创建一个环境资源根目录

补充好mybatis-config.xml内容

<?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>
    <properties resource="database.properties"></properties>

    <typeAliases>
        <package name="nj.zb.kb21.pojo"/>
    </typeAliases>

    <environments default="mysqlDev">
        <environment id="mysqlDev">
            <transactionManager type="JDBC"></transactionManager>
            <dataSource type="POOLED">
                <property name="driver" value="${mysqldriver}"/>
                <property name="url" value="${mysqlurl}"/>
                <property name="username" value="${mysqluser}"/>
                <property name="password" value="${mysqlpwd}"/>

            </dataSource>
        </environment>
    </environments>


    <mappers>
        <mapper resource="nj/zb/kb21/dao/DogDao.xml"/>
        <mapper resource="nj/zb/kb21/dao/MasterDao.xml"/>
    </mappers>
</configuration>

创建一个xml文件,Mapper里面要添加进去,上面代码已经创了以下两个

<mapper resource="nj/zb/kb21/dao/DogDao.xml"/>
<mapper resource="nj/zb/kb21/dao/MasterDao.xml"/> 

5、配置环境文件

 只需添加以下内容,insert和update为后面接口实现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="nj.zb.kb21.dao.DogDao">

</mapper>

6、创建接口,添加方法

7、编写sql语句

以下图为表结构

insert 添加语句

  • 添加一个
<insert id="save">
        insert into dog(name, health, love, strain, lytm)
        values (#{name}, #{health}, #{love}, #{strain}, now())
    </insert>
  • 批量添加
  <sql id="tableName">dog</sql>
    <insert id="batchAdd">
        insert into
        <include refid="tableName"/>
        -- insert into dog(name,health,love,strain,lytm)
        values
        <foreach collection="list" item="dog" separator=",">
            (null,#{dog.name},#{dog.health},#{dog.love},#{dog.strain},now())
        </foreach>
    </insert>

update修改语句

  • 修改一个

 <update id="update">
        update dog
        set name=#{name},
            health=#{health}
        where id = #{id}
    </update>
  • 批量修改
    <update id="batchUpdate">

        <foreach collection="list" item="dog" separator=";">
            update
            <include refid="tableName"/>
            <set>
                <if test="dog.name!=null and dog.name!='' ">
                    name=#{dog.name},
                </if>
                <if test="dog.health!=null">
                    health=#{dog.health},
                </if>
                <if test="dog.love!=null">
                    love=#{dog.love},
                </if>
                <if test="dog.strain!=null and dog.strain!='' ">
                    strain=#{dog.strain},
                </if>
            </set>
            where id=#{dog.id}
        </foreach>
    </update>

delete删除语句

  • 删除一条
 <delete id="Delete">
        delete
        from dog
        where id = #{id}
    </delete>
  • 批量删除
<delete id="batchDelete">
        delete from dog where id in
        <foreach collection="list" item="id" open="(" close=")" separator=",">
            #{id}
        </foreach>
    </delete>

8、创建测试类

8.1 、定义工厂模式

 SqlSessionFactory sqlSessionFactory=null;

8.2 、定义会话

SqlSession sqlSession=null;

8.3、定义对象

DogDao dogDao=null;

8.4、加载mybatis-config.xml 配置文件

InputStream inputStream = DogTest.class.getClassLoader().getResourceAsStream("mybatis-config.xml");

8.5、获取Builder建造工厂

SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();

8.6、通过建造工厂建造SqlSessionFactory

sqlSessionFactory = builder.build(inputStream);

8.7、 创建Session会话

sqlSession = sqlSessionFactory.openSession();

8.8、 获取Session会话的执行者

dogDao = sqlSession.getMapper(DogDao.class);

8.9、提交和释放资源 

完整代码:

public class DogTest {
    //工厂模式
    SqlSessionFactory sqlSessionFactory=null;
    //定义会话
    SqlSession sqlSession=null;
    //定义DogDao对象
    DogDao dogDao=null;

    @Before
    public void init(){
        System.out.println("Start");

        //加载mybatis-config.xml 配置文件
        InputStream inputStream = DogTest.class.getClassLoader().getResourceAsStream("mybatis-config.xml");
        //获取Builder建造工厂
        SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
        //通过建造工厂建造SqlSessionFactory
        sqlSessionFactory = builder.build(inputStream);
        //创建Session会话
        sqlSession = sqlSessionFactory.openSession();
        //获取Session会话的执行者
        dogDao = sqlSession.getMapper(DogDao.class);
    }
}

  @After
    public void  down(){
        sqlSession.commit();
        sqlSession.close();
        System.out.println("Over");
    }

9、通过mysbatis实现sql语句

9.1、insert:

  • 新增一个:
  @Test
    public  void  testSaveDog(){
        Dog dog = new Dog();
        dog.setName("冰糖雪梨");
        dog.setHealth(100);
        dog.setLove(100);
        dog.setStrain("冰糖雪梨");
        dogDao.save(dog);
    }
  • 批量新增:
    @Test
    public void  testBatchAddDog(){
        List<Dog> dogs=new ArrayList<Dog>();
        Dog dog = new Dog("农夫山泉", 100, 100, "有点甜");
        Dog dog2 = new Dog("娃哈哈", 100, 100, "爱的供养");
        Dog dog3 = new Dog("百岁山", 98, 88, "水中贵族");
        Dog dog4 = new Dog("怡宝", 99, 99, "蒸馏水");
        dogs.add(dog);
        dogs.add(dog2);
        dogs.add(dog3);
        dogs.add(dog4);
        dogDao.batchAdd(dogs);
    }

9.2、update

  • 修改一个
    @Test
    public  void  testUpdateDog(){
        Dog dog = new Dog();
        dog.setId(19);
        dog.setName("冰糖葫芦");
        dog.setHealth(999);
        dogDao.update(dog);
    }
  • 批量修改
    @Test
    public void  testBatchUpdateDog(){
        List<Dog> dogs=new ArrayList<Dog>();
        Dog dog = new Dog(22,"农夫山泉", 100, 100, "有点甜a");
        Dog dog2 = new Dog(23,"娃哈哈", 10, 10, "爱的供养b");
        Dog dog3 = new Dog(24,"百岁山", "水中贵族c");
        Dog dog4 = new Dog(25,"怡宝", 9, 9, "蒸馏水d");
        dogs.add(dog);
        dogs.add(dog2);
        dogs.add(dog3);
        dogs.add(dog4);
        dogDao.batchUpdate(dogs);
    }

9.3、 delete

  • 删除一个
    @Test
    public  void  testDeleteDog(){
        Integer id=16;
        dogDao.Delete(id);
    }
  • 批量删除
    @Test
    public void  testBatchDeleteDog(){
        List<Integer> dogs=new ArrayList<>();
        dogs.add(17);
        dogs.add(18);
        dogs.add(20);
        dogDao.batchDelete(dogs);
    }

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

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

相关文章

LAB3 EIGRP1实验

1 实验拓扑&#xff1a; 2 实验要求&#xff1a; 1>.R1-R3环回口0:192.168.100.x/32。 2>.R1上采用手动汇总的命令&#xff0c;汇总4条环回口成一条。 3>.R1上下发一条默认路由。 4>.实现R1到R2的环回口路由非等价负载。 5>.as 90都使用eigrp认证。 6>…

css动画效果之transition

transition-property规定设置过渡效果的 CSS 属性的名称。属性名属性值none没有属性会获得过渡效果。all所有属性都将获得过渡效果。property定义应用过渡效果的 CSS 属性名称列表&#xff0c;列表以逗号分隔。使用方式transition-property: width,background;/* 多个效果可用逗…

设计模式之装饰模式

1.前言 装饰模式&#xff1a;动态的给一个类添加一些额外职责&#xff0c;就增加功能来说&#xff0c;装饰模式比生成子类更加灵活。 装饰模式属于结构型模式&#xff0c;它是作为现有的 类的⼀个包装&#xff0c;允许向⼀个现有的对象添加新的功能&#xff0c; 同时⼜不改变其…

Spring创建和使用 (存储和读取) -- 1

Spring创建和使用 存储和读取 -- 1一、创建 Spring 项目1.1 创建⼀个 Maven 项目1.2 添加 Spring 框架支持1.3 添加启动类二、存储 Bean 对象2.1 创建 Bean2.2 将 Bean 注册到容器三、获取并使用 Bean 对象3.1 创建 Spring 上下文3.2 获取指定的 Bean 对象3.3 使用 Bean四、总结…

数据结构-第六期——并查集(Python)

目录 认识并查集 经典应用: 应用场景 并查集的操作 初始化 代码实现 合并 代码实现 查找 代码实现 查找代码【图解】 有多少个集&#xff08;帮派&#xff09;? 复杂度 查询的优化:路径压缩 【代码】用递归实现 并查集:初始化、查找、合并代码 蓝桥杯…

ES6之Promise

Promise是异步操作的一种解决方案 // 1.认识Promisedocument.addEventListener(click,()>{console.log(这里是异步的);});console.log(这里是同步的); Promise一般用来解决层层嵌套的回调函数&#xff08;回调地狱&#xff09;的问题 <!DOCTYPE html> <html lan…

JVM垃圾回收机制、JVM垃圾回收算法、JVM CMS与G1垃圾收集,JVM内存模型

C C 需要自己回收垃圾 重复回收&#xff1a; 回收掉别人的东西 忘记回收&#xff1a; 内存泄漏 Java虚拟机做自动化回收 垃圾回收器 Root Searching&#xff08;根可达&#xff09; GC Algorithms(垃圾回收算法) Mark-Sweep(标记清除) 缺点&#xff1a;碎片化&#xff0c;一…

Lua C接口编程(一)

引言 skynet 和 openresty 都是深度使用lua的典范&#xff0c;学习lua不经要学会基本语法&#xff0c;还要学会C语言与Lua交互。lua的一大优点就是能和c/c无缝连接&#xff0c;而且可以在不需要重复编译c/c的情况下可以修改lua文件并且起作用&#xff0c;当我们的项目文件很大…

【面试题】做了一份前端面试复习计划,保熟~

大厂面试题分享 面试题库前端面试题库 &#xff08;面试必备&#xff09; 推荐&#xff1a;★★★★★地址&#xff1a;前端面试题库前言以前我看到面试贴就直接刷掉的&#xff0c;从不会多看一眼&#xff0c;直到去年 9 月份我开始准备面试时&#xff0c;才发现很多面试经验贴…

Kubernetes(k8s) 笔记总结(二)

提示&#xff1a;针对kubernetes的工作均衡学习。 文章目录1. Kubernetes 创建资源方式2. Kubernetes 操作NameSpace3. Kubernetes的 Pod应用3.1 Pod的 解释3.2 通过命令行来创建一个pod3.3 配置文件方式创建一个Pod3.4 dashboard 可视化操作Pod3.5 针对Pod的一些细节操作3.6 P…

如何评估PMO (项目管理办公室)的实施效果?

使用有效的组织战略、方法和技术&#xff0c;可以成功启动并制度化企业范围的PMO (项目管理办公室)。 一个企业范围内的PMO可以使用成熟的技术启动。 但你应该开发和使用适当的评估工具&#xff0c;以确定你的PMO实施的项目管理过程的有效性。这些工具可以包括正式的管理评估…

黑马学ElasticSearch(四)

目录&#xff1a; &#xff08;1&#xff09;RestClient操作文档-新建文档 &#xff08;2&#xff09;RestClient操作文档-查询文档 &#xff08;3&#xff09;RestClient操作文档-更新文档 &#xff08;4&#xff09;RestClient操作文档-删除文档 &#xff08;5&#xff…

包管理工具详解npm 、 yarn 、 cnpm 、 npx 、 pnpm

1、包管理工具npm &#xff08;1&#xff09;包管理工具npm&#xff1a; Node Package Manager&#xff0c;也就是Node包管理器&#xff1b;但是目前已经不仅仅是Node包管理器了&#xff0c;在前端项目中我们也在使用它来管理依赖的包&#xff1b;比如vue、vue-router、vuex、…

数据分析-深度学习 Day4

本专栏主本专栏主要介绍和讲解李宏毅老师最新2021春季机器学习课程相关内容&#xff0c;如有记录错误&#xff0c;或理解不对&#xff0c;欢迎留言批评指正...youtube课程地址&#xff1a;&#xff08;实时更新&#xff09;ML 2021 Springspeech.ee.ntu.edu.tw/~hylee/ml/2021-…

sxs卡数据怎么恢复?分享三种恢复方案

说起sxs卡&#xff0c;你们是否有所了解呢&#xff1f;sxs卡具有很好的传输性能&#xff0c;能够存储照片和视频数据&#xff0c;主要被放置在索尼XDCAM EX型摄像机上。而在使用sxs卡设备过程中&#xff0c;难免和其他设备一样&#xff0c;容易出现数据丢失情况。而如果丢失的是…

在虚拟机上安装win11

虚拟机版本呢vmware16win11镜像&#xff1a;zh-cn_windows_11_business_editions_version_22h2_updated_dec_2022_x64_dvd_0b26ca48.isoPE镜像&#xff1a;EasyU_v3.7.iso 通过优启通工具制作两个光驱&#xff0c;第一个选pe的iso&#xff0c;第二个选win11的iso点击开启虚拟机…

(day5) 自学Java——ArrayList集合

目录 1. ArrayList 2.集合练习 (1)添加字符串和整数&#xff0c;并遍历 (2)添加学生对象并遍历 (3)查找用户是否存在 (4)返回多个数据 1. ArrayList 数组有个致命的弱点&#xff0c;那就是创建时需要指定其长度&#xff0c;并且在使用时长度不可改变。 在Java教程中知道…

[ 数据结构 ] 图(Graph)--------深度优先、广度优先遍历

0 基本介绍 为什么要有图? 无论是线性表还是树结构,局限于表示一个直接前驱和一个直接后继的关系(一对一/一对多),当我们需要表示多对多的关系时&#xff0c; 这里我们就用到了图 节点间的连接成为边,节点称为顶点,一个顶点到另一个顶点所经过的边叫路径,边有方向的叫有向图,…

js逆向-某动网演出数据获取

声明 本文仅供学习参考&#xff0c;如有侵权可私信本人删除&#xff0c;请勿用于其他途径&#xff0c;违者后果自负&#xff01; 如果觉得文章对你有所帮助&#xff0c;可以给博主点击关注和收藏哦&#xff01; 前言 目标网站&#xff1a;aHR0cHM6Ly93d3cuc2hvd3N0YXJ0LmNv…

如何远程连接Linux系统服务器

Linux服务器远程连接方法这里给大家普及一下Linux服务器&#xff0c;是一台安装Ubuntu系统的工作站。这类服务器大部分用于程序员开发编程使用&#xff0c;说简单点就是拿来敲代码的。通常需要借助远程连接工具来连接Linux远程服务器&#xff0c;如xshell&#xff1b;putty&…