【MyBtis】各种查询功能

news2024/11/19 10:20:12

目录

   【MyBtis】配置和映射

 11.1 示例:实现表数据的增、删、改、查

1.创建工程mybatis_DML demo

 2.创建数据库操作的工具类:DBOperatorMgr.java

3.创建映射接口

4.创建XML映射文件

5.测试


   【MyBtis】配置和映射

        MyBatis 的真正强大之外在于它的映射语句,这也是它的魅力所在。由于它的异常强大,映射器的XML文件就显得相对简单。如果将其与具有相同功能的 JDBC 代码进行对比,会立即发现其省掉了将近 95% 的代码。MyBatis 就是针对 SQL 构建的并且比普通的方法效果更好。        

      

        (1)实现表数据的增、删、改、查;

        (2)MyBatis主配置文件;

        (3)XML映射文件;

        (4)高级结果映射。

 11.1 示例:实现表数据的增、删、改、查

        1.创建工程mybatis_DML demo

        在 idea 中创建 Maven Project,如图11-1所示,“GroupID“ 选项中输入 “com.mialab” ,在 “ArtifactId” 选项输入“student”最终完成的 student 工程目录和 student 初始表数据如图11-1和图11-2所示。

        

                                                图11-1 mybatisDML_demo 工程目录结构

                                                        图11-2student表中的数据

        2.创建数据库操作的工具类:DBOperatorMgr.java

        在MyBatis 使用中,如果每个方法执行时都需要读取配置文件,并根据配置文件的信息构建SqlSessionFactory对象,然后创建SqlSession 对象,这会导致类大量的重复代码。为了简化开发,需要将重复代码封装到一个工具类中。如下:

public class DBOperatorMgr {
	static Logger logger = Logger.getLogger(DBOperatorMgr.class.getName());
	private static DBOperatorMgr dbMgr;
	private SqlSessionFactory sqlSessionFactory;

	private DBOperatorMgr() {
		String resource = "mybatis-config.xml";
		InputStream inputStream;

		try {
			inputStream = Resources.getResourceAsStream(resource);
			sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
		} catch (Exception e) {
			logger.error(e.toString());
		}
	}

	public static DBOperatorMgr getInstance() {
		if (dbMgr == null) {
			dbMgr = new DBOperatorMgr();
		}
		return dbMgr;
	}
	
	public SqlSessionFactory getSqlSessionFactory() {
		return sqlSessionFactory;
	}	
}

        3.创建映射接口

        

public interface StudentMapper {
	public Student getStudent(String sno);

	public int addStudent(Student student);

	public List<Student> getSudentAll();

	public int updateStudent(Student student);

	public int deleteStudent(String sno);
}

        4.创建XML映射文件

        在包com.mialab.mybatis_DML_demomapper 中创建 StudentMapper.xml文件。

<mapper namespace="com.mialab.mybatis_DML_demo.mapper.StudentMapper">
	<select id="getStudent" resultType="com.mialab.mybatis_DML_demo.domain.Student">
		select * from student where
		sno = #{sno}
	</select>
	<insert id="addStudent" parameterType="student">
		insert into
		student(sno,name,sex,age,dept_no)
		values(#{sno},#{name},#{sex},#{age},#{dept_no})
	</insert>

	<resultMap id="studentResultMap" type="student">
		<id property="sno" column="sno" />
		<result property="name" column="name" />
		<result property="sex" column="sex" />
		<result property="age" column="age" />
		<result property="dept_no" column="dept_no" />
	</resultMap>
	<select id="getSudentAll" resultMap="studentResultMap">
		select * from student
	</select>


	<update id="updateStudent" parameterType="student">
		update student set name
		= #{name}, sex = #{sex}, age = #{age}, dept_no = #{dept_no}
		where sno =
		#{sno}
	</update>

	<delete id="deleteStudent" parameterType="String">
		delete from student
		where sno = #{sno}
	</delete>

</mapper>

       

         5.测试

        如图11-1所示,在src/main/java 中创建 Package“com.mialab.mybatis_DML demo.main”。在此包中创建测试类DML_Mainjava,主要代码:

public class DML_Main {	
	
	public static void main(String[] args) {
		//testInsert();
		//testSelectAll();
		testSelect("20171509");
		//testUpdate();
//		testDelete("20171622");
	}	

	private static void testDelete(String sno) {
		Logger log = Logger.getLogger(DML_Main.class);
		SqlSession session = null;
		try {
			session = DBOperatorMgr.getInstance().getSqlSessionFactory().openSession();
			StudentMapper mapper = session.getMapper(StudentMapper.class);			
			mapper.deleteStudent(sno);			
			session.commit();
		} catch(Exception ex) {
			session.rollback();
			ex.printStackTrace();
		} finally {
			if (session != null) {
				session.close();
			}
		}		
	}

	private static void testSelectAll() {
		Logger log = Logger.getLogger(DML_Main.class);
		SqlSession session = null;
		try {
			session = DBOperatorMgr.getInstance().getSqlSessionFactory().openSession();
			StudentMapper mapper = session.getMapper(StudentMapper.class);
			List<Student> stu_list = mapper.getSudentAll();
			for(Student stu:stu_list) {
				//System.out.println(stu);
				log.info(stu);
			}
		} finally {
			if (session != null) {
				session.close();
			}
		}
	}

	private static void testInsert() {
		Logger log = Logger.getLogger(DML_Main.class);
		SqlSession session = null;
		try {
			session = DBOperatorMgr.getInstance().getSqlSessionFactory().openSession();
			StudentMapper mapper = session.getMapper(StudentMapper.class);
			Student student = new Student();
			student.setSno("20171622");
			student.setName("李白");
			student.setAge(88);
			student.setSex("男");
			student.setDept_no("2609");
			log.info(student);
			mapper.addStudent(student);
			session.commit();
		} catch(Exception ex) {
			session.rollback();
			ex.printStackTrace();
		} finally {
			if (session != null) {
				session.close();
			}
		}
	}

	private static void testSelect(String sno) {
		Logger log = Logger.getLogger(DML_Main.class);
		SqlSession session = null;
		try {
			session = DBOperatorMgr.getInstance().getSqlSessionFactory().openSession();
			StudentMapper mapper = session.getMapper(StudentMapper.class);
			Student student = mapper.getStudent(sno);
			//System.out.println(student);
			log.info(student);
		} finally {
			if (session != null) {
				session.close();
			}
		}		
	}
	
	private static void testUpdate() {
		Logger log = Logger.getLogger(DML_Main.class);
		SqlSession session = null;
		try {
			session = DBOperatorMgr.getInstance().getSqlSessionFactory().openSession();
			StudentMapper mapper = session.getMapper(StudentMapper.class);
			Student student = new Student();
			student.setSno("20171622");
			student.setName("苏东坡");
			student.setAge(68);
			student.setSex("女");
			student.setDept_no("2612");
			log.info(student);
			mapper.updateStudent(student);
			session.commit();
		} catch(Exception ex) {
			session.rollback();
			ex.printStackTrace();
		} finally {
			if (session != null) {
				session.close();
			}
		}
	}
}

        

        先测试 testSelectA11() 方法。如图 11-1 所示,右击comm.ialab.mybatis _DML_demo.main包中的DML_Main.java,在弹出的快捷菜单中选择“Run DML_Main.java”选项,在控制台中可以得到以下的结果:

        

 INFO [main] - Student [sno=20171508, name=李勇, sex=男, age=20, dept_no=2601]
 INFO [main] - Student [sno=20171509, name=刘娟, sex=女, age=19, dept_no=2602]
 INFO [main] - Student [sno=20171622, name=李白, sex=男, age=88, dept_no=2609]

        可分别对增、删、改、查的方法testInsert()、testUpdate()等进行测试。

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

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

相关文章

jest单元测试的代码覆盖率显示不出来

jest.config.js配置文件 const path require(path)// 添加 verbose: true, testURL: http://localhost/module.exports {verbose: true,testURL: http://localhost/,rootDir: path.resolve(__dirname, ../../),moduleFileExtensions: [js,json,vue],moduleNameMapper: {^/(…

Java基础篇_1.4——程序流程控制之选择结构if语句

程序流程控制 关于程序控制的关键字&#xff1a; 程序控制关键字breakdowhileforcontinueswitchcasedefaultreturninstanceofifelse 程序运行时的一个顺序&#xff0c;程序的结构分为&#xff1a;顺序结构、选择结构和循环结构。 顺序结构是指按照代码的书写顺序执行。选择结…

如何手动创建EFI引导分区?

EFI系统分区是数据存储设备上的分区&#xff0c;供遵循统一可扩展固件接口的计算机使用。当计算机启动时&#xff0c;UEFI固件加载存储在可扩展系统分区上的文件&#xff0c;以启动安装的操作系统和各种实用程序。在GPT磁盘上启动Windows时&#xff0c;必须有EFI系统分区。如果…

ClickHouse(九):Clickhouse表引擎 - Log系列表引擎

进入正文前&#xff0c;感谢宝子们订阅专题、点赞、评论、收藏&#xff01;关注IT贫道&#xff0c;获取高质量博客内容&#xff01; &#x1f3e1;个人主页&#xff1a;含各种IT体系技术&#xff0c;IT贫道_Apache Doris,Kerberos安全认证,大数据OLAP体系技术栈-CSDN博客 &…

SpringBoot引入MyBatisGenerator

1.引入插件 <plugin><groupId>org.mybatis.generator</groupId><artifactId>mybatis-generator-maven-plugin</artifactId><version>1.3.5</version><configuration><!--generator配置文件所在位置--><configuratio…

【echartsjs】js实现图表数据 跟动态数据联合展示 三个案例,附带源码

序幕&#xff1a; 所展示示例使用到多个js库&#xff0c;例如&#xff1a;jquery、echarts、liMarquee等等&#xff0c;我是下载到了本地&#xff0c;其他小伙伴记得自己下载相关js库&#xff0c;或者引用线上库 推荐一个获取线上资源网站&#xff1a;BootCDN - Bootstrap 中文…

fastadmin 权限管理栏目关闭了怎么恢复

目前能解决的方法就是直接url敲出来菜单配置&#xff1a;Internet Speed Test | Fast.com 然后再把这个隐藏显示出来

抄写Linux源码(Day7:读闪客文章第二回 “自己给自己挪个地儿”)

闪客文章地址&#xff1a;https://mp.weixin.qq.com/s?__bizMzk0MjE3NDE0Ng&mid2247499274&idx1&sn23885b5b1344a1425f5a971d06ad2e7d&chksmc2c584a7f5b20db1b0a75ea896e7218a9f8bcd006e68f53693bab240b13f9e2fb0ec0c9b9a6a&cur_album_id2123743679373688…

jmeter中json提取器,获取多个值,并通过beanshell组成数组

jmeter中json提取器介绍 特别说明&#xff1a;**Compute concatenation var(suffix_ALL)&#x1f617;*如果找到许多结果&#xff0c;则插件将使用’ &#xff0c; 分隔符将它们连接起来&#xff0c;并将其存储在名为 _ALL的var中 json提取器调试 在查看结果树中选择JSON Pat…

python——案例9:判断字符串的长度

案例8&#xff1a;设定列表&#xff1a;listl[0,1,2,3,4,5],求列表之和total0 list1[0,1,2,3,4,5] #列表lis1for ele in range(0,len(list1)):totaltotallist1[ele] print("列表中元素之和&#xff1a;",total) #输出结果

既要增长又要人效,零售人准备好接受老板的灵魂拷问了吗

增长对于零售行业尤其中小规模的玩家来说重要性不言而喻&#xff0c;而支撑持续增长的引擎之一就是对日常运营数据能随时进行快速、合理的解读&#xff0c;从而在瞬息万变的市场环境和有限的时间窗口内&#xff0c;根据指标背后折射的问题及时调整市场投放和客户关系维护等策略…

MySQL 极速安装使用与卸载

目录 mysql-5.6.51 极速安装使用与卸载 sqlyog工具 mysql简化 mysql-8.1.0下载配置 再完善 mysql-5.6.51 极速安装使用与卸载 mysql-8.1.0下载安装在后 mysql中国官网 MySQLhttps://www.mysql.com/cn/ 点击MySQL社区服务器 点击历史档案 下载完 解压 用管理员运行cmd&a…

原来这就是数组

原来这就是数组 数组的基本概念为什么使用数组数组的概念数组的特点数组如何初始化1.动态初始化2.静态初始化 数组的使用访问数组元素代码演示 遍历数组的几种方式1.直接打印&#xff08;不可取&#xff09;2.for循环打印&#xff08;如果有判断条件推荐&#xff09;3.转化为St…

stm32常见数据类型

stm32的数据类型的字节长度 s8 占用1个byte&#xff0c;数据范围 -2^7 到 (2^7-1) s16 占用2个byte&#xff0c;数据范围 -2^15 到 (2^15-1) s32 占用 4个byte&#xff0c;数据范围 -2^31 到 (231-1)231 2147483647 int64_t占用8个byte&#xff0c;数据范围 -2^63 到 (2^63-1)…

flutter:占位视图(骨架屏、shimmer)

前言 有时候打开美团&#xff0c;在刚加载数据时会显示一个占位视图&#xff0c;如下&#xff1a; 那么这个是如何实现的呢&#xff1f;我们可以使用shimmer来开发该功能 实现 官方文档 https://pub-web.flutter-io.cn/packages/shimmer 安装 flutter pub add shimmer示例…

渲染中回流与重绘讲解

浏览器的渲染过程 本文先从浏览器的渲染过程来讲解回流与重绘。 从上面这个图上&#xff0c;我们可以看到&#xff0c;浏览器渲染过程如下&#xff1a; 解析HTML&#xff0c;生成DOM树(DOM Tree)&#xff0c;解析CSS&#xff0c;生成CSS树(Style Rules)将DOM树和CSS树结合&am…

通过启动盘安装 SylixOS

通过启动盘安装 SylixOS 制作启动盘 将 U 盘插入电脑。 打开 RealEvo-IDE&#xff0c;并在菜单栏选择 Tools > RealEvo-SylixOS-Installer 启动安装工具。 设置启动盘各项参数&#xff0c;如下图红框所示。 单击一键安装 SylixOS。程序运行过程信息输出显示如下图所示。…

c语言~野指针

1、野指针&#xff0c;既没有初始化的指针&#xff0c;//如果没有给指针初始化&#xff0c;则指针p的内容为随机地址&#xff0c;会随机指向&#xff0c;故成为野指针&#xff0c;不可以操作野指针 #include "stdio.h" #include <stdlib.h>int main() {//1、野…

Nginx之正、反向代理

什么是代理 A同学在Ai大时代背景下开启他的创业之路&#xff0c;目前他遇到的最大的一个问题就是启动资金&#xff0c;于是他决定去找马云爸爸借钱&#xff0c;可想而知&#xff0c;最后碰一鼻子灰回来了&#xff0c;情急之下&#xff0c;他想到一个办法&#xff0c;找关系开后…

Ubuntu20.04之VNC的安装与使用

本教程适用于Ubuntu20.04及以下版本&#xff0c;Ubuntu22.04版本或有出入 更多更新的文章详见我的个人博客&#xff1a;【前往】 文章目录 1.安装图形桌面1.1选择安装gnome桌面1.2选择安装xface桌面 2.安装VNC-Server3.配置VCN-Server4.连接VNC5.设置VNC-Server为系统服务&…