maven搭建mybatis实现增删改查

2023-05-16

第一章框架的概述
1三层结构
mvc web开发 使用mvc架构模式       m:数据   v;视图   c:控制器
c控制器:接收请求   调用service对象     显示请求的处理信息   当前的servlet作为控制器
v:视图现在使用jsp   html   css   js显示请求的处理结果   把m中的数据取出来
m:来自数据库mysql中   来自文件   来自网络
mvc作用:(1)实现解耦合
(2)让mvc各司其职
(3)使系统扩展更好    更容易维护
三层架构
1界面层:接受用户请求 调用service显示请求的处理结果 包含jsp html servlet等对象
2业务逻辑层 处理业务逻辑 使用算法处理数据 把数据返回给界面层 对应的service包 和包中的很多的XXXService类例如 StudentService
3持久层 (数据库访问)访问数据库 或者读取文件 访问网络 获取数据 对应的包是dao dao包中很多的StudentDao,OrderDao ,ShopDao等等

三层架构请求的处理流程
用户发起————————》界面层————————》业务逻辑层——————》持久层——————》数据库

为什么使用三层架构
1结构清晰 耦合度底 各层分层明确
2可维护性搞 可扩展性搞
3有利于标准化
4开打人员可以只关注整个结构中某一层的功能实现
5有利于各层逻辑的复用

4.三层架构模式和框架
每层对应着一个框架
1界面层SpringMVC
2业务层Spring
3持久层MyBatis

5框架
1什么是框架(framework)
框架就是一个软件,完成了部分的功能 软件中的类和类方法的调用已经规定好了。通过这些可以完成某些功能。框架看做是模板。
框架是可以升级改造的 框架是安全的。
框架是对某一方面有用的,不是全能的。

6框架解决的问题
1框架实现技术的整合。

7jdbc访问数据库的优缺点
优点
1直观 好理解
缺点:
1创建很多对象Connection,Statement,ResultSet
2注册驱动
3执行sql语句
4把ResultSet转为Student,List集合
5关闭资源
6sql语句和业务逻辑代码混在一起

8MyBatista框架
什么是MyBatis:是一个持久层框架 原名 为ibatis 2013改名为MyBatis。Mybatis可以操作数据库对数据执行增删改查。
看作是一个高级的JDBC能解决JDBC的缺点
Mybatis能做什么?
1注册驱动
2能够去创建JDBC中的Connection Statement Result
3执行sql语句 得到ResultSet
4处理Reslut 把记录集中的数据转化为java对象,同时还能把Java对象放入到List集合中
5关闭资源
6实现sql语句和java代码的解耦合
第2章MyBatis入门
2.1第一个例子
实现步骤
0创建student表(id,name,email,age)

1新建maven项目

2修改pom.xml
1)加入依赖mybatis依赖,mysql驱动,junit
mybatis依赖

 <!-- mybatis依赖-->
    <dependency>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis</artifactId>
      <version>3.5.1</version>
    </dependency>
    

mysql依赖

<!--      mysql依赖-->
    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>5.1.9</version>
    </dependency>
    <dependency>

2)在加入资源库插件
3创建实体类Student。定义属性,属性名和列名一致

public class Student {
    private  Integer id;
    private  String name;
    private  String email;
    private Integer age;

    

    public Student(Integer id, String name, String email, Integer age) {
        this.id = id;
        this.name = name;
        this.email = email;
        this.age = age;
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "学生实体的信息{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", email='" + email + '\'' +
                ", age=" + age +
                '}';
    }
}

4创建Dao接口,定义操作数据库的方法

5创建xml文件(mapper)写sql语句
这里在resources中创建了一个StudentDao.xml文件

<?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="com.gjx.dao.StudentDao">
    <!--    <select id="selectBlog" resultType="Blog">-->
    <!--    select * from Blog where id = #{id}-->
    <!--  </select>-->
    <!--    查询一个学生Student
        <select>:表示查询操作,里面是select语句
        id:要执行的sql语句的唯一标识,是一个自定义字符串
        推荐使用dao接口中的方法名称
        resultType:告诉mybatis,执行sql语句,把数据赋值给那个类型的java对象。
        resultType的值现在使用的java对象的全限定名称
    -->
    <select id="selectStudentById" resultType="com.gjx.domain.Student">
        select id,name,email,age from student where id=1001
    </select>
    <insert id="addStuent">
        insert into student values (1009,"asd","sss",12),(1023,"aa0","ddd",12)
    </insert>
    <update id="updateStudent">
        update student set name ="hh",email="1111",age=12 where id=1001
</update>
    <delete id="deleteStudent">
        delete from student where id=1001
    </delete>
</mapper>
        <!--
            1.约束文件
             "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
            用来定义和限制当前文件中可以使用的标签和属性,以及标签出现的顺序
            2.mapper是根标签
            namespace:命名空间  必须有值不能为空。唯一值
            推荐使用Dao是接口的全限定名称
            作用:参与识别sql语句的作用
            3.在mapper中可以写  insert  update  delete    select等标签

        -->

mybatis框架推荐把sql语句和java代码分开 mapper文件:定义和dao接口在同一个目录,一个表一个mapper文件。 6创建mybatis的主配置文件(xml文件):有一个,放在resources目录下 1)定义创建连接实例的数据源(DataSource)对象 2)指定其他mapper文件的位置
<?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>
<!--设置日志-->
    <settings>
        <setting name="logImpl" value="STDOUT_LOGGING"/>
    </settings>
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <!--            配置数据源:创建Connection对象-->
            <dataSource type="POOLED">
                <!--                driver:驱动的内容-->
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <!--                连接数据库的url-->
                <property name="url"
                          value="jdbc:mysql://localhost:3306/springdb?useUnicode=true&amp;charaterEncoding=utf-8"/>
                <property name="username" value="root"/>
                <property name="password" value=""/>
            </dataSource>
        </environment>
    </environments>
    <!--    指定其他mapper文件的位置:
        其他mapper文件目的是找到其他文件的sql语句
-->
    <mappers>
        <!--        使用mapper的resource属性指定mapper文件的路径
                    这个路径是从target/classes路径开启的
                    使用注意:
                    resource=“mapper”文件的路径,使用/分割路径
                    一个mapper resource指定一个mapper文件
        -->
        <mapper resource="StudentDao.xml"/>
        <!--     举列子
        <mapper resource="com/gjx/dao/UserDao.xml"/>
        <mapper resource="com/gjx/dao/orderDao.xml"/>
        -->
    </mappers>
</configuration>

7创建测试的内容
使用main方法,测试mybatis访问数据库
也可以使用junit访问数据库

package com.gjx;

import com.gjx.domain.Student;
import com.sun.javaws.IconUtil;
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 org.junit.Test;

import javax.annotation.Resource;
import javax.imageio.stream.ImageInputStream;
import java.io.IOException;
import java.io.InputStream;

public class MyTest {
    //测试mybatis测试sql语句
    @Test
    public void testSelectStudentById() throws IOException {
        //调用mybatis某个对象的方法,执行mapper文件中的sql语句
        //mybatis核心类:SqlSessionFactory

        //1定义mybatis主配置文件的位置,从类路径开始的相对路径
        String config="mybatis.xml";
        //2读取配置文件。使用mybatis框架中的Resource类
        InputStream inputStream=Resources.getResourceAsStream(config);
        //3创建SqlSessionFactory对象,使用SqlSessionFactoryBuild类
        SqlSessionFactory factory=new SqlSessionFactoryBuilder().build(inputStream);
        //4获取SqlSession对象
        SqlSession session=factory.openSession();
        //5指定要执行的sql语句的id、


        //查询
        //sql语句的id等于namespace加上点再加上<select> <update>  <insert>  <delete>标签id属性值
        //String sqlid="com.gjx.dao.StudentDao"+"."+"selectStudentById";
        //通过SqlSession的方法,执行sql语句
        //Student student=session.selectOne(sqlid);
       // System.out.println("使用mybatis查询一个学生"+student);
        //7关闭SqlSession



        //添加
        //int insert = session.insert("com.gjx.dao.StudentDao.addStuent");
        //System.out.println(insert);
        //session.commit();
        //session.close();


        //修改
        //int insert=session.update("com.gjx.dao.StudentDao.updateStudent");
        //System.out.println(insert);
        //session.commit();
        //session.close();




        //删除
        int insert=session.delete("com.gjx.dao.StudentDao.deleteStudent");
        System.out.println(insert);
        session.commit();
        session.close();
    }
}

注意
增删改都需要手动提交

 session.commit();
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

maven搭建mybatis实现增删改查 的相关文章

  • Mysql的七种join

    对于SQL的Join xff0c 在学习起来可能是比较乱的 我们知道 xff0c SQL的Join语法有很多inner的 xff0c 有outer的 xff0c 有left的 xff0c 有时候 xff0c 对于Select出来的结果集是什
  • shell脚本实现自动保留最近n次备份记录

    贴个广告 楼主的博客已全部搬迁至自己的博客 xff0c 感兴趣的小伙伴请移步haifeiWu与他朋友们的博客专栏 项目中出现的问题 某天上午服务器出现卡顿特别严重 xff0c 页面加载速度奇慢 xff0c 并且某些页面刷新出现404的问题
  • Java实现终止线程池中正在运行的定时任务

    贴个广告 楼主的博客已全部搬迁至自己的博客 xff0c 感兴趣的小伙伴请移步haifeiWu与他朋友们的博客专栏 源于开发 最近项目中遇到了一个新的需求 xff0c 就是实现一个可以动态添加定时任务的功能 说到这里 xff0c 有人可能会说
  • TCP 粘包问题浅析及其解决方案

    最近一直在做中间件相关的东西 xff0c 所以接触到的各种协议比较多 xff0c 总的来说有TCP xff0c UDP xff0c HTTP等各种网络传输协议 xff0c 因此楼主想先从协议最基本的TCP粘包问题搞起 xff0c 把计算机网
  • Redis协议规范(译文)

    原文地址 xff1a haifeiWu的博客 博客地址 xff1a www hchstudio cn 欢迎转载 xff0c 转载请注明作者及出处 xff0c 谢谢 xff01 Redis客户端使用名为RESP xff08 Redis序列化协
  • Netty 源码中对 Redis 协议的实现

    原文地址 xff1a haifeiWu的博客 博客地址 xff1a www hchstudio cn 欢迎转载 xff0c 转载请注明作者及出处 xff0c 谢谢 xff01 近期一直在做网络协议相关的工作 xff0c 所以博客也就与之相关
  • 高性能无锁队列 Disruptor 初体验

    原文地址 xff1a haifeiWu和他朋友们的博客 博客地址 xff1a www hchstudio cn 欢迎转载 xff0c 转载请注明作者及出处 xff0c 谢谢 xff01 最近一直在研究队列的一些问题 xff0c 今天楼主要分
  • MYSQL快速导入大量数据 - LOAD DATA INFILE

    问题背景 xff1a 在做性能测试时 xff0c 通常需要根据业务模型在数据库中预置大量数据 我一开始的做法是使用python生成INSERT INTO语句的SQL脚本后 xff0c 再导入对应数据库 使用中会发现速度很慢 xff0c 10
  • Postman使用教程 - 导入请求(Import)

    Postman是一个有着图形化界面的API请求模拟平台 xff0c 在构造请求时最常见的莫过于手动在对应的输入框中填入相应的内容 xff1a 根据被测HTTP请求的Method URL Headers Request Params Body
  • Daily Cost 介绍

    Daily Cost是我为了学习前后端开发的产出成果 从应用名可以看出是一个记账本应用 xff0c 主要参考了鲨鱼记账 xff0c 我从中挑选了一部分核心功能来自己开发实现 1 功能模块 作为一个正经的记账本应用 xff0c 肯定要能满足用
  • zabbix5.4 如何配置报警一次

    如果小伙伴们在认真跟着大叔配置zabbix的话 xff0c 相信你现在已经至少配置好了自己的邮件报警了 可是你可能正在和我一样陷入到一个新的烦恼之中 xff0c 那就是zabbix 邮件轰炸机 xff08 呵呵 xff0c 暂时这么叫吧 x
  • Docker安装使用MySQL8

    1 下载image span class token function docker span pull mysql 也可以指定版本 xff1a docker pull mysql 5 7 xff0c 未指定时为latest 2 查看下载到
  • 使用colima替代docker-desktop

    本文使用操作系统为Mac OS 彻底和docker desktop说再见 brew uninstall docker cask cd rm rf docker 安装 brew update brew install docker colim
  • mfc 获取网卡名字

    void CGetSysInfo GetInterFaceName CString amp InterfaceName int pNum POSITION pos 61 Interfaces FindIndex pNum if pos 61
  • 关于.net连接数据获取数据失败的原因

    1 问题情景 报错提示 System InvalidCastException 类型的异常在 Oracle ManagedDataAccess dll 中发生 xff0c 但未在用户代码中进行处理 其他信息 指定的转换无效 sql语句执行正
  • 服务启动时报错:1053服务没有及时响应启动或控制请求

    问题 xff1a 替换dll文件后 xff0c 自定义服务启动时报错 xff1a 1053服务没有及时响应启动或控制请求 排查原因 xff1a 可能是程序启动缺少某些dll文件 解决方案 xff1a 1 使用depends依赖工具查看新增的
  • mysql4.0 新建用户报错ERROR 1064语法错误

    mysql4 0 新建用户执行 xff1a create user 39 test1 39 64 39 localhost 39 identified by 39 123456 39 报错ERROR 1064语法错误 百度查询报错无果 xf
  • mysql4报错:ERROR 1133: Can‘t find any matching row in the user table

    mysql4新建用户后修改密码报错 xff1a ERROR 1133 Can 39 t find any matching row in the user table 查看mysql user表中是否存在ttt0405 64 localho
  • ERROR 1 (HY000): Can‘t create/write to file ‘D:\data_3306\Temp\#sql590_1_2.MYI‘

    mysql在查询表结构 xff08 比如desc table1 xff09 xff0c 报错 xff1a ERROR 1 HY000 Can 39 t create write to file 39 D data 3306 Temp sql
  • 本地 IDEA 卡死了!我把它跑在 Linux 服务器上!

    引言 2021年底 xff0c JetBrains 推出了 Jetbrains Gateway 工具 xff0c 这是一款远程开发 Client 并且支持了 JetBrains 全家桶 xff0c 通过 Jetbrains Gateway

随机推荐

  • centos7中puppeteer的相关错误处理

    1 error while loading shared libraries libatk bridge 2 0 so 0 解决 xff1a yum install at spi2 atk y 2 error while loading s
  • zabbix 5.4 自定义模板

    如果你是使用zabbix的新手的话 xff0c 并不建议去自定义一套模板 xff0c 因为zabbix自带的模板就已经能够实现80 多的应用场景了 如果你对zabbix已经有了比较深刻的理解 xff0c 感觉系统自带的一些模板里有太多你用不
  • SpringBoot出现找不到或无法加载主类解决办法

    启动SpringBoot项目时 xff0c 出现了找不到或无法加载主类的提示 xff0c 解决的方法有两种情况 1 程序主入口的目录位置不正确 需要确定程序主入口的Application类是否和其余的文件在同一目录结构 如果不一致 xff0
  • Golang中interface类型转string类型

    Golang中interface类型转string类型 Strval 获取变量的字符串值 浮点型 3 0将会转换成字符串3 34 3 34 非数值或字符类型的变量将会被转换成JSON格式字符串 func Strval value inter
  • unsigned char与char 转换

    方法一 xff1a 不转换为char xff0c 转换为QString类型 xff1a span class hljs keyword unsigned span span class hljs keyword char span code
  • MariaDB 源码编译安装

    1 安装编译所需软件包 yum y install bison bison devel zlib devel libcurl devel libarchive devel boost devel gcc gcc c 43 43 cmake
  • 导入maven工程报错,Discover and map Eclipse plugins to Maven plugin goal executions.

    setup maven plugin connection discover and map eclipse plugins to maven plugin goal executions 问题 xff1a maven 缺包 解决 xff1
  • Notepad++ "TAB转为空格" 或者 “空格转TAB"

    今天提交代码 xff0c 老大review后 xff0c 要求将所有缩进 xff0c 默认的TAB改为 4个空格 xff0c 记录下操作步骤 xff1a 1 设置 按下图配置即可 设置 gt 34 首选项 gt 34 语言 gt 勾选 替换
  • java 实现布隆数

    package test import java util Arrays import java util BitSet import java util concurrent atomic AtomicInteger 64 author
  • influxdb 数据库安装和简单使用

    1 wget https dl influxdata com influxdb releases influxdb 1 8 4 x86 64 rpm 或者从 influxdb 1 8 4 x86 64 rpm 其它文档类资源 CSDN下载
  • 请求参数和应答数据统一加解密

    一 xff0c 针对请求参数和应答数据都是json格式时 xff0c 可以通过 xff0c 下面的方式 xff0c 进行统一的的加解密 1 设置配置文件 64 Bean public MappingJackson2HttpMessageCo
  • java 验证字符串是否为int,double 类型的数据

    import java util regex Matcher import java util regex Pattern 数据类型验证 64 author dell public class DataValidate 判断 String
  • zabbix 5.4 agent主动模式下`ZBX`图标显示灰色的处理

    通过前面的实际操作练习 xff0c 相信大家对zabbix已经有了比较深入的认识了 我们已经知道zabbix客户端分为 主动 和 被动 两种模式 xff0c 所谓主动模式就是客户端主动上报自身的监控数据 xff0c 而被动模式是服务端主动向
  • 解决mybatis 数据库date 与 java 中Date类型映射

    使用mybatis 从数据库中查询出date 类型字段 xff0c 在java 类型中只看到了日期 xff0c 没有看到时分秒 xff0c 从数据库中是可以看到时分秒的 后来发现是mybatis 映射数据类型的原因 xff1a 如 xff1
  • jwt 生成token 和解析token

    lt jjwt version gt 0 6 0 lt jjwt version gt lt fastjson version gt 1 2 16 lt fastjson version gt lt dependency gt lt gro
  • Linux下使用grep,tail 查看查找日志

    有时候日志文件比较大 xff0c 有几G 无法使用工具打开文件 xff0c 这个时候就需要使用命令来查找错误信息 一 tail 命令 例如查看 catalina out 后50行日志 color 61 darkred tail 50f ca
  • 解决redisCluster 连接失败的问题

    使用redis3 2 8 建立集群后 xff0c 发现在连接redis 经常报连接失败 但是单独连接某个节点时 xff0c 是不会报错的 xff0c 经过分析终于发现了原因 原因是这样的 xff1a 我在建立集群的时候配置文件redis c
  • Thymeleaf select 使用 和多select 级联选择

    1 使用select 并且回绑数据 页面 xff1a 状态 xff1a lt select name 61 34 status 34 th field 61 34 status 34 id 61 34 idstatus 34 class 6
  • 防止 XML外部实体注入

    方式一 DocumentBuilderFactory dbf 61 DocumentBuilderFactory newInstance 这是优先选择 如果不允许DTDs doctypes 几乎可以阻止所有的XML实体攻击 String F
  • maven搭建mybatis实现增删改查

    第一章框架的概述 1三层结构 mvc web开发 使用mvc架构模式 m 数据 v 视图 c 控制器 c控制器 xff1a 接收请求 调用service对象 显示请求的处理信息 当前的servlet作为控制器 v 视图现在使用jsp htm