Java基础入门day69

day69

mybatis

开发步骤

查询
  1. 前期准备:数据库表结构和表数据准备

    mysql> select * from user;
    +-----+----------+----------+-------+-------+---------+
    | uid | username | password | email | phone | address |
    +-----+----------+----------+-------+-------+---------+
    |   1 | admin    | 123456   | NULL  | NULL  | sushe   |
    |   2 | user     | 123456   | NULL  | NULL  | sushe   |
    |   3 | zhangsan | 654321   | NULL  | NULL  | sushe   |
    |   4 | lisi     | 654321   | NULL  | NULL  | sushe   |
    |   5 | wangwu   | 654321   | NULL  | NULL  | sushe   |
    |   6 | zhaoliu  | 654321   | NULL  | NULL  | sushe   |
    |   7 | sunqi    | 654321   | NULL  | NULL  | sushe   |
    |   8 | zhouba   | 654321   | NULL  | NULL  | sushe   |
    |   9 | zhoubapi | 654321   | NULL  | NULL  | sushe   |
    +-----+----------+----------+-------+-------+---------+
    9 rows in set (0.00 sec)
  2. 配置pom.xml依赖文件

    <dependencies><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version><scope>test</scope></dependency>
    ​<dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.4.6</version></dependency>
    ​<dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.46</version></dependency>
    ​<dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.16</version><scope>provided</scope></dependency>
    </dependencies>
  3. 新增pojo类

    package com.saas.pojo;
    ​
    import lombok.Data;
    ​
    @Data
    public class User {
    ​private int uid     ;private String username;private String password;private String email   ;private String phone   ;private String address ;
    }
  4. 新增测试类

    package com.saas.dao;
    ​
    import com.saas.pojo.User;
    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 java.io.IOException;
    import java.io.InputStream;
    import java.util.List;
    ​
    public class TestUserDao {
    ​@Testpublic void testGetAllUsers(){String conf = "mybatis-config.xml";
    ​try {InputStream is = Resources.getResourceAsStream(conf);
    ​SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is);
    ​SqlSession session = factory.openSession();
    ​List<User> list = session.selectList("com.saas.dao.UserMapper.getAllUsers");
    ​for (User u : list) {System.out.println(u);}
    ​session.close();} catch (IOException e) {throw new RuntimeException(e);}}
    }
  5. mybatis-config.xml

    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""https://mybatis.org/dtd/mybatis-3-config.dtd">
    <configuration><environments default="development"><environment id="development"><transactionManager type="JDBC"/><dataSource type="POOLED"><property name="driver" value="com.mysql.jdbc.Driver"/><property name="url" value="jdbc:mysql://localhost:3306/saas?useSSL=false"/><property name="username" value="root"/><property name="password" value="Abc@1234"/></dataSource></environment></environments><mappers><mapper resource="com/saas/dao/UserMapper.xml"/></mappers>
    </configuration>
  6. UserMapper.xml

    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""https://mybatis.org/dtd/mybatis-3-mapper.dtd">
    <mapper namespace="com.saas.dao.UserMapper"><select id="getAllUsers" resultType="com.saas.pojo.User">select * from user</select>
    </mapper>
  7. 展示运行结果

    User(uid=1, username=admin, password=123456, email=null, phone=null, address=sushe)
    User(uid=2, username=user, password=123456, email=null, phone=null, address=sushe)
    User(uid=3, username=zhangsan, password=654321, email=null, phone=null, address=sushe)
    User(uid=4, username=lisi, password=654321, email=null, phone=null, address=sushe)
    User(uid=5, username=wangwu, password=654321, email=null, phone=null, address=sushe)
    User(uid=6, username=zhaoliu, password=654321, email=null, phone=null, address=sushe)
    User(uid=7, username=sunqi, password=654321, email=null, phone=null, address=sushe)
    User(uid=8, username=zhouba, password=654321, email=null, phone=null, address=sushe)
    User(uid=9, username=zhoubapi, password=654321, email=null, phone=null, address=sushe)

以上得到最后的查询结果

注意:

使用mybatis,其核心是SqlSession对象

SqlSession对象使用SqlSessionFactory获取

SqlSessionFactory通过SqlSessionFactoryBuilder获取

SqlSessionFactoryBuilder需要读取mybatis的核心配置文件

从mybaits3开始,官方建议使用namespace,最终在进行crud功能时所需要的statement是namespace+id

所以要求在整个项目中,namespace+id必须唯一

活用JUnit的生命周期
package com.saas.dao;
​
import org.junit.*;
​
public class TestJUnit {
​@BeforeClasspublic static void beforeClass(){System.out.println("this is beforeClass");}
​@AfterClasspublic static void afterClass(){System.out.println("this is afterClass");}
​@Beforepublic void setup(){System.out.println("this is setup");}
​@Afterpublic void tearDown(){System.out.println("this is tearDown");}
​@Testpublic void test01(){System.out.println("this is test01");}@Testpublic void test02(){System.out.println("this is test02");}@Testpublic void test03(){System.out.println("this is test03");}
}

执行结果:

this is beforeClass
this is setup
this is test01
this is tearDown
this is setup
this is test02
this is tearDown
this is setup
this is test03
this is tearDown
this is afterClass

通过以上的运行结果发现

这个@BeforeClass注解对应的方法,不管有几个测试方法,都在开头只执行一次

这个@AfterClass注解对应的方法,不管有几个测试方法,都在最后只执行一次

这个@Before注解对应的方法,有几个测试方法,在每个测试方法之前都执行一次

这个@After注解对应的方法,有几个测试方法,在每个测试方法之后都执行一次

package com.saas.dao;import com.saas.pojo.User;
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.After;
import org.junit.Before;
import org.junit.Test;import java.io.IOException;
import java.io.InputStream;
import java.util.HashMap;
import java.util.List;
import java.util.Map;public class TestUserDao02 {SqlSession session;@Beforepublic void setup(){String conf = "mybatis-config.xml";try {InputStream is = Resources.getResourceAsStream(conf);SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is);session = factory.openSession();}catch (IOException e) {throw new RuntimeException(e);}}@Afterpublic void tearDown(){if (session != null){session.close();session = null;}}@Testpublic void testGetAllUsers(){List<User> list = session.selectList("com.saas.dao.UserMapper.getAllUsers");for (User u : list) {System.out.println(u);}}@Testpublic void testGetUserByUid(){User user = session.selectOne("com.saas.dao.UserMapper.getUserByUid", 9);System.out.println(user);}@Testpublic void testGetUsersByPage(){Map<String, Integer> map = new HashMap<>();map.put("start", 6);map.put("size", 3);List<User> list = session.selectList("com.saas.dao.UserMapper.getUsersByPage", map);for (User u : list) {System.out.println(u);}}
}
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.saas.dao.UserMapper"><select id="getAllUsers" resultType="com.saas.pojo.User">select * from user</select><select id="getUserByUid" resultType="com.saas.pojo.User">select * from user where uid = #{abc}</select><select id="getUsersByPage" resultType="com.saas.pojo.User">select * from user limit #{start},#{size}</select>
</mapper>

在整个项目中所有的namespace+id应该唯一

增删改操作
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.saas.dao.UserMapper"><select id="getAllUsers" resultType="com.saas.pojo.User">select * from user</select><select id="getUserByUid" resultType="com.saas.pojo.User">select * from user where uid = #{abc}</select><select id="getUsersByPage" resultType="com.saas.pojo.User">select * from user limit #{start},#{size}</select><insert id="saveUser">insert into user(username,password,email,phone,address) values(#{username},#{password},#{email},#{phone},#{address})</insert><update id="updateUser">update user set username=#{username},password=#{password},email=#{email},phone=#{phone},address=#{address} where uid=#{uid}</update>
</mapper>
package com.saas.dao;import com.saas.pojo.User;
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.After;
import org.junit.Before;
import org.junit.Test;import java.io.IOException;
import java.io.InputStream;
import java.util.HashMap;
import java.util.List;
import java.util.Map;public class TestUserDao02 {SqlSession session;@Beforepublic void setup(){String conf = "mybatis-config.xml";try {InputStream is = Resources.getResourceAsStream(conf);SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is);session = factory.openSession();}catch (IOException e) {throw new RuntimeException(e);}}@Afterpublic void tearDown(){if (session != null){session.close();session = null;}}@Testpublic void testGetAllUsers(){List<User> list = session.selectList("com.saas.dao.UserMapper.getAllUsers");for (User u : list) {System.out.println(u);}}@Testpublic void testGetUserByUid(){User user = session.selectOne("com.saas.dao.UserMapper.getUserByUid", 9);System.out.println(user);}@Testpublic void testGetUsersByPage(){Map<String, Integer> map = new HashMap<>();map.put("start", 6);map.put("size", 3);List<User> list = session.selectList("com.saas.dao.UserMapper.getUsersByPage", map);for (User u : list) {System.out.println(u);}}@Testpublic void testSaveUser(){User user = new User();user.setUsername("test");user.setPassword("123456");user.setEmail("test@163.com");user.setPhone("123456789");user.setAddress("test");int result = session.insert("com.saas.dao.UserMapper.saveUser", user);System.out.println(result > 0);}@Testpublic void testUpdateUser(){User user = new User();user.setUid(9);user.setUsername("test09");user.setPassword("123456");user.setEmail("test@163.com");user.setPhone("123456789");user.setAddress("test");int result = session.update("com.saas.dao.UserMapper.updateUser", user);System.out.println(result > 0);session.commit();}
}

注意:

mybatis默认事务是开启状态,进行任何的增删改操作结束后,事务默认是不提交的。

所以有两种方式解决:

  • 在SqlSessionFactory对象的openSession方法中传递一个autocommit为true的值,让每次增删改之后,默认自动提交

  • openSession方法不传递参数,默认为false,是不自动提交,可以在做完增删改之后,进行手动提交,SqlSession对象的commit方法,完成手动提交功能

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

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

相关文章

2、广告-参与者

程序化广告生态系统中的参与者主要分为五大类&#xff1a;需求方、需求方服务、流量供应方、流量方服务以及广告服务与数据管理相关平台和企业。以下是每个角色的详细描述&#xff0c;以及中文名词与其对应的英文名词。 一、需求方&#xff08;Demand Side&#xff09; 效果类…

视频文件太大怎么压缩?十大视频压缩软件可解决您的问题

您是否已经受够了无法上传视频文件&#xff0c;因为它们太大了&#xff1f;如果您正在积极寻找免费下载的视频压缩软件&#xff0c;下面概述了目前在线提供的 10 个功能更强大的软件。 我们建议您在决定下载之前先通读一下这个简短的介绍。我们不希望您随意点击一个选项&#…

2024年JCR分区,将发生重大变化

科睿唯安官方微信发布消息&#xff0c;指出今年的期刊排名及相应JCR分区将发生重大变化。 原文比较长&#xff0c;不熟悉相关规则的朋友也不太容易读懂。因此&#xff0c;我们今天做一个详细的解读。 首先明确几个基本概念&#xff1a; &#xff08;1&#xff09;2024年发布2…

基于PHP+MySql的留言管理系统的设计与实现

功能概述 网页留言板管理系统&#xff0c;用户层面分为普通用户和管理员&#xff0c;并设权限&#xff08;即后台留言管理系统普通用户不能访问&#xff0c;别人的留言自己不可以修改删除&#xff0c;未登录不能使用留言功能&#xff09;&#xff0c;功能包括用户登录注册、留…

阿里云+Halo个人博客搭建

前言 本文将介绍使用阿里云Halo搭建一个个人网站&#xff0c;过程极其简单&#xff0c;不需要什么计算机基础&#xff0c;操作电脑跟着步骤做就行。 在开始之前&#xff0c;还需要做一些前置准备 购买好服务器&#xff0c;本文使用阿里云&#xff0c;系统选择CentOS 7.6 64位…

Ollama:一个在本地部署、运行LLM大型语言模型的工具

Ollama部署、运行大型语言模型 概述 Ollama是一个专为在本地机器上便捷部署和运行大型语言模型&#xff08;LLM&#xff09;而设计的工具。 官方网站&#xff1a;https://ollama.com/ Github&#xff1a;https://github.com/ollama/ollama 安装 Ollama支持macOS、Linux和Win…

【MOS管线性区如何让调整】

1.怎样设定管子的Vdsat大小&#xff1f; 各管的Vdsat完全决定于管子的偏置栅压Vg而不用去考虑Vs&#xff0c;由于Vgs决定电流Id而反过来偏置电流Id决定Vgs&#xff0c;确定的电流偏置下Vs会自动跟随Vg而得到合适的Vgs&#xff0c;连接于同一个Vg栅压偏置的各管会有同样大小的Vd…

[吃瓜教程]南瓜书第3章对数几率回归

第三章 对数几率回归 3.1 算法原理 对数几率回归&#xff08;Logistic Regression&#xff09;是一种统计方法&#xff0c;主要用于二分类问题。它通过拟合一个对数几率函数&#xff08;logit function&#xff09;&#xff0c;即对数几率&#xff08;log-odds&#xff09;与…

构建基于LLM的高效知识库问答系统:MaxKB一站式开源解决方案探析

随着人工智能技术的飞速发展,尤其是大型语言模型(LLMs)的广泛应用,知识管理与交互进入了新的纪元。今天,我们将深入探讨一个创新的开源项目——MaxKB,这是一个集成了最新技术、旨在提供一站式解决方案的知识库问答系统。MaxKB以其开箱即用、高度可定制性以及对多种主流大…

python并发执行request请求

在Python中&#xff0c;我们可以使用requests库来发送HTTP请求&#xff0c;并使用threading、multiprocessing、asyncio&#xff08;配合aiohttp&#xff09;或concurrent.futures等库来并发执行这些请求。这里&#xff0c;我将为我们展示使用concurrent.futures.ThreadPoolExe…

淘宝店铺商家订单API-接入ERP,多平台订单同步的利器

淘宝开放平台给商家们提供了丰富的API&#xff0c;以方便大家扩展业务流程。但是需要调用这些API&#xff0c;商家们要提交资质审核&#xff0c;审核条件也是很严格的。第三方数据公司的存在可以为大家解决这个问题。 custom-自定义API操作 请求参数 请求参数&#xff1a;ap…

线上数据线下使用的数据处理方法:数据脱敏

在信息技术领域,敏感数据是指那些一旦被泄露或滥用,可能会对个人隐私、企业利益或国家安全造成严重影响的信息。这类数据通常包括但不限于: 个人信息:如姓名、身份证号、联系方式、住址等。 财务信息:如银行账户、信用卡号、交易记录等。 商业机密:如产品设计、市场策略、…

告别手机废片,这几款APP让你随手出大片

想象一下&#xff0c;你站在壮丽的风景前&#xff0c;满怀期待地按下手机相机的快门&#xff0c;但得到的照片却总与眼前美景有所差距。 是不是觉得手机的原生相机有时候并不那么“给力”&#xff1f; 今天&#xff0c;我们就来一起探讨一下手机原生相机的不足之处&#xff0c;…

web前端课程大作业-高校学生事务中心

文章目录 概述代码页面截图代码链接 概述 仿制高校的学生事务中心&#xff0c;一个登录和注册页面 代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" conten…

网约车停运损失费:1、事故经过

目录 &#x1f345;点击这里查看所有博文 随着自己工作的进行&#xff0c;接触到的技术栈也越来越多。给我一个很直观的感受就是&#xff0c;某一项技术/经验在刚开始接触的时候都记得很清楚。往往过了几个月都会忘记的差不多了&#xff0c;只有经常会用到的东西才有可能真正记…

用ChatGPT快速打造一个专业WordPress网站

作为一个使用HostEase多年的老用户&#xff0c;我想和大家分享一下如何利用HostEase和ChatGPT快速构建一个WordPress网站的经验。这不仅仅是一个简单的操作步骤&#xff0c;更是一次从零到有的实战经历。希望我的分享能给你们带来一些实用的帮助。 获取主机服务和域名 首先&a…

ModuleNotFoundError: No module named ‘gdal‘

第一步检查gdal包是否正确安装&#xff1a; conda list 已经安装显示如下 若查找不到&#xff1a;请按照此说明步骤进行安装&#xff1a;ModuleNotFoundError: No module named ‘osgeo‘_modulenotfounderror: no module named osgeo-CSDN博客 第二步&#xff1a;检查是否可以…

HistoQC|病理切片的质量控制工具

小罗碎碎念 这期推文介绍的内容&#xff0c;我相信研究病理组学的人&#xff0c;一定都非常熟悉——HistoQC——病理切片的质量控制。 之前写过Hover Net系列的推文&#xff0c;反响还可以&#xff0c;但是Hover Net是用于细胞核检测和分类的&#xff0c;直接从这里开始还不够系…

Win11:系统属性,由于启动计算机时出现了页面文件配置问题,Windows 在你的计算机上创建了一个临时页面文件。

Win11&#xff1a;系统属性&#xff0c;由于启动计算机时出现了页面文件配置问题&#xff0c;Windows 在你的计算机上创建了一个临时页面文件。所有磁盘驱动器的总页面文件大小可能稍大于你所指定的大小。确定。 解决方法&#xff1a;

说下IPython

IPython 是一个交互式计算环境&#xff0c;旨在增强 Python 编程体验。它提供了强大的工具和灵活的环境&#xff0c;支持科学计算、数据分析和开发工作。 1. IPython 的基本功能 **1.1. 交互式 Shell** IPython 提供了一个功能强大的交互式 shell&#xff0c;比标准的 Python…