Mybatis学习笔记(一)

2023-11-18

MyBatis学习笔记

1.Mybatis 开源免费框架,以前叫ibatis,2010年在google code,2013年迁移到git tub。

2.作用:数据访问层框架。

2.1底层是对jdbc的封装。

3.mybatis优点:使用mybatis时不用编写实现类,只需要写需要执行的sql

一.环境搭建

1.导入jar包

asm-3.3.1.jar

cglib-2.2.2.jar

commons-logging-1.1.1.jar

javassist-3.11.0.GA.jar

log4j-1.2.16.jar

mybatis-3.2.2.jar

mysql-connector-java-5.0.3-bin.jar

slf4j-api-1.6.2.jar

slf4j-log4j12-1.6.2.jar

cglib依赖的包,动态代理包,日志包,字节码解析包也是cglib依赖的包,日志包,mybatis核心包,日志包,日志包。

二,在src下新建全局配置文件(编写jdbc)xml

2.1没有名称和地址要求

2.2在全局配置文件中引入DTD或schemal

	2.2.1如果导入dtd后没有提示

要windows-->preferences-->XML-->xml catalog-->add本地的dtd文件

2.3文件内容

<?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>
<!-- default引用environment的id,当前所使用的环境 -->
	<environments default="default">
		<!-- 声明可以使用的环境 -->
		<environment id="default">
			<!-- 使用原生jdbc事务 -->
			<transactionManager type="JDBC"></transactionManager>
			<dataSource type="POOLED">
				<property name="driver" value="com.mysql.jdbc.Driver"/>
				<property name="url" value="jdbc:mysql://localhost:3306/test"/>
				<property name="username" value="root"/>
				<property name="password" value="root"/>
			</dataSource>
		</environment>
	</environments>
	<mappers>
	<mapper resource="com/test/mapper/FlowersMapper.xml"/>
	</mappers>
</configuration>

三.新建以mapper结尾的包,在包下新建:实体类名+Mapper.xml

3.1文件作用:用来编写需要执行的sql命令

3.2把xml文件理解成实现类

3.3xml文件内容

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
	PUBLIC ".//mtbatis.org//DTD Mapper 3.0//EN"
	"http://mybatis.org/dtd/mybatis_3_mapper.dtd" >
	<!-- namespace:理解成实现类的全路径(包名+类名) -->
<mapper namespace="a.b">
	<!-- id:方法名
		parameterType:返回值类型 
		如果方法返回值时list,在resultType中写list的泛型,因为mybatis对jdbc封装,一行一行读取数据-->
	<select id="selAll" parameterType="" resultType="com.test.pojo.Flowers">
	select * from flowers
	</select>
</mapper>

四,测试结果,这个只在测试mybatis中单独使用,在框架整合时不适用。

package com.test.sessiontest;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
import javax.annotation.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import com.test.pojo.Flowers;
public class Test {
	public static void main(String[] args) throws Exception {
		InputStream in = org.apache.ibatis.io.Resources.getResourceAsStream("mybatis.xml");
		//使用工厂设计模式
		SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in);
		//生产sqlSession
		SqlSession session = factory.openSession();
		List<Flowers> list = session.selectList("a.b.selAll");
		for (Flowers flowers : list) {
			System.out.println(flowers.toString());
		}
		session.close();
	}
}

五,环境搭建讲解

5.1<transactionManager> type属性可取值

	5.1.1  JDBC,事务管理使用JDBC原生事务管理方式

	5.1.2   MANAGED把事务管理转交给其他容器,原生jdbc事务setAutoMapping(false)

5.2<dataSourse> type属性

	5.2.1 POOLED 使用数据库连接池

	5.2.2  UNPOOLED 不适用数据库连接池

	5.2.3  JNDI :java命名目录接口技术

六.数据库连接池

1.在内存中开辟一块空间,存放多个数据库连接对象。

2.jdbc Tomcat Pool 直接由tomcat产生数据库连接池

3.图示

	3.1  active状态:当前连接对象被应用程序使用中

	3.2 idle空闲状态:等待应用程序使用

4.使用数据库连接池目的

	4.1 在高频率访问数据库时,使用数据库连接池可以降低服务器系统压力,提升程序运行效率。

	小项目不适用数据库连接池。

5.实现jdbc tomcat Pool的步骤

	5.1在web项目的META_INF下面存放context.xml 并配置

<?xml version="1.0" encoding="UTF-8"?>
<Context>
    <Resource
    driverClassName="com.mysql.jdbc.Driver"
    url ="jdbc:mysql://localhost:3306/test"
    username="root"
    password="root"
    maxActive="50"
    maxIdle="20"
    name="test"
    auth="Container"
    maxWait="10000"
    type="javax.sql.DataSourse"
    />
</Context>

5.2 把项目发布导tomcat中,数据库连接池产生了

七.可以在java中使用jndi获取数据库连接池中对象

7.1Context:上下文接口context.xml对象文件类型

7.2代码:

Context cont = new InitialContext();
			DataSource ds = (DataSource) cont.lookup("java:comp/env/test");
			Connection conn = ds.getConnection();

 7.3当关闭连接对象时,是把连接对象归还给连接池,把状态改为idle空闲

八.三种查询方式

8.1,selectList()返回值为List<resultType属性控制>,适用于查询结果都需要遍历的需求。

8.2,selectOne()返回值Object,适用于返回值只是变量的一条数据。

8.3,selectMap()返回值map,适用于需求需要再查询结果中通过某列的值取到这行数据的需求。

8.4,Map<key,resultType控制>

	

package com.test.sessiontest;

import java.io.InputStream;
import java.util.List;
import java.util.Map;

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

import com.test.pojo.Flower;

public class Test {
	public static void main(String[] args) throws Exception{
		InputStream in = org.apache.ibatis.io.Resources.getResourceAsStream("mybatis.xml");
		//使用工厂设计模式
		SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in);
		//生产sqlSession
		SqlSession session = factory.openSession();
		List<Flower> list = session.selectList("a.b.selAll");
		for (Flower flower : list) {
			System.out.println(flower.toString());
		}
		int count = session.selectOne("a.b.selOne");
		System.out.println(count);
		Map<Object, Object> map = session.selectMap("a.b.c", "name");
		System.out.println(map);
		session.close();
	}
		
	
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Mybatis学习笔记(一) 的相关文章

  • Java 的 RSA 算法库 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我想为我的应用程序提供基于 RSA 算法的简单许可机制 有免费的 RSA 库吗 只需使用javax crypto and java sec
  • Junit4 + Spring 2.5:断言抛出“NoClassDefFoundError”

    我一直在使用 Spring 在 Junit4 中编写测试代码 并且得到了这个有趣的行为 如果我的测试像这样通过 那么一切都很好 Test public void truthTest assertTrue true Ok 但是 如果我的测试失
  • 将 Spring 的 @Scheduled 注解与特定执行器一起使用

    如何告诉我的 Spring 计划方法使用特定的执行器运行 例如 这是我的 spring 调度程序方法之一 Scheduled fixedRate 1000 public void scheduleJobs doThese 这是我的 Java
  • 范围内的春季活动可能吗?

    Spring 事件机制支持发布应用程序事件并通过 Spring 组件监听这些事件 EventListener注解 但是 我在 中找不到有关在特定范围内发送事件的任何信息文档 https docs spring io spring docs
  • 合并两个 Jasper 报告

    我有一个带有下拉菜单的网络应用程序 用户可以从中选择报告可视化的类型 报告 1 报告 2 报告 3 等 根据所选的报告 Jasper 报告将在服务器上编译并以 PDF 格式的弹出窗口打开 在服务器端 我使用下面的代码以单独的方法实现每个报告
  • 什么 RoundingMode 常量 100% 与 Math.round 一样工作?

    我的意思是有没有舍入模式 https docs oracle com javase 8 docs api java math RoundingMode html常数准确地描述了什么Math round arg 做 据我所知 Math rou
  • 颜色资源 ID 返回错误值

    我试图在 onCreate 期间以编程方式从颜色资源设置文本颜色 但得到了一些奇怪的结果 我在 res colors xml 中定义了一个颜色资源
  • Java中如何存储profile?

    我仍在学习 Java 的诀窍 如果有一个明显的答案 我很抱歉 我有一个占用大量内存的程序 我想找到一种方法来减少其使用 但是在阅读了许多 SO 问题后 我认为在开始优化它之前我需要证明问题出在哪里 这就是我所做的 我在程序的开头添加了一个断
  • 异步方法的默认 EJB 事务模式?

    当我有一个 AsynchronousEJB 中的方法 并且我没有指定 TransactionAttribute 那么容器到底是如何处理事务边界的呢 显然 它不能使用调用线程的事务 那么它是做什么的呢 同样的问题 但涉及由 TimerServ
  • 负字符值JAVA

    为什么会出现以下情况 char p 0 p System out println p result 65535 为什么不给出编译错误或运行时异常 我预计它是因为字符不能为负数 相反 它从颠倒开始倒数 提前致谢 为什么不给出编译错误或运行时异
  • 用于查看算法花费多长时间的计时器表示我的二分搜索比线性搜索花费的时间更长

    这是要点课程https gist github com 2605302 https gist github com 2605302 我已经用不同的文件对其进行了多次测试 即使二分搜索进行的比较较少 所花费的时间也总是更多 出了什么问题 pu
  • 为什么Java不支持C中的clrscr这样的函数?

    我有一个问题 对很多人来说可能听起来很愚蠢 但我不能停下来把它发布在这里 因为在互联网上找不到任何东西 为什么java没有我们在C中使用的clrscr之类的函数 如果我创建了一个基于用户输入反复迭代的 java 控制台应用程序 然后如果我想
  • JPanel 上的圆形边框

    我这里得到的是一个带有圆形边框的 JPanel 其设置如下 panel setBorder new LineBorder PanelColor 5 true 问题是 在每个角上都有 2 条从外角到内角的对角不透明线 即边框的长度 边界后面的
  • Gradle:找不到受信任的证书

    我正在尝试使用 Gradle 在 Ubuntu 服务器上构建我的 Android 项目 在我的 Windows 10 PC 上使用 Android Studio 构建工作正常 但使用 gradlew build or gradlew cle
  • 使用 int 作为 java.util.Dictionary 的类型参数

    当我尝试这样声明字典时 private Dictionary
  • 使用三十、LocalDate 获取每月的第一天和最后一天

    我有一个 LocalDate 需要获取该月的第一天和最后一天 我怎么做 eg 13 2 2014我需要得到1 2 2014 and 28 2 2014 in 本地日期 https docs oracle com javase 8 docs
  • Java ReentrantReadWriteLocks - 如何在读锁中安全地获取写锁?

    我现在在我的代码中使用可重入读写锁 http java sun com javase 6 docs api java util concurrent locks ReentrantReadWriteLock html同步对树状结构的访问 这
  • 如何使用 NetBeans 导入 Jackson Core JacksonFactory?

    请参阅固定导入声明的链接问题 我将在尝试 Netbeans 后更新这个问题 下面使用 Netbeans 一切应该建立 https github com NICKSAUNDERS sheets 然而 这个问题是针对 Netbeans 的 寻找
  • 在调用超类型构造函数之前无法引用“X”,其中 x 是最终变量

    考虑以下 Java 类声明 public class Test private final int defaultValue 10 private int var public Test this defaultValue lt Compi
  • 整个程序可以是不可变的吗? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我熟悉不可变性并且可以设计不可变类 但我主要拥有学术知识 缺乏实践经验 请参考上面的链接图片 尚不允许嵌入 从下往上看 学生需要新地址

随机推荐

  • java中string与json互相转化

    在Java中socket传输数据时 数据类型往往比较难选择 可能要考虑带宽 跨语言 版本的兼容等问题 比较常见的做法有两种 一是把对象包装成JSON字符串传输 二是采用java对象的序列化和反序列化 随着Google工具protoBuf的开
  • 数据结构实验1-顺序表-各种操作

    要求 创建两个顺序表实现两个顺序表的合并以及扩容 以及单个顺序表的查找 插入 删除 排序 清空 销毁 查找前驱以及后继等等 有错会继续改的 以及程序的完备性 健壮性 可读性等等 经过这次实验感觉我写的最多的不是程序而是告诉程序执行者下一步该
  • C语言程序设计(张玉生)第四章课后习题编程(分支结构程序设计)

    1 编写程序 输入一个整数 判断它是奇数还是偶数 并输出判断结果 include
  • [学习笔记] EL 使用EL表达式获得作用域属性

    采用EL表达式 对于属性的访问的隐含访问顺序是 pageContext httpServletRequest HttpSession ServletContext 通过以下实例 来说明 servlet scopeVar java impor
  • ADS系列 - RLC器件滤波器设计教程1

    相关文章 ADS SystemVue 文章集合页 ADS系列 定向耦合器设计教程1 ADS系列 混频器设计 混频器原理介绍及仿真1 ADS系列 低噪声放大器 LNA 模型下载安装及 LNA仿真设计 Keysight的 SystemVue 介
  • Spring+Redis 存入Key Value 乱码前缀

    今天试着在项目中读写redis对象 发现全是乱码 如下图所示 而后在网上找了些资料 才知道是序列化问题 目前已解决谨此记录 以防再犯 ApplicationContext context new ClassPathXmlApplicatio
  • 机房软件管理服务器及系统软件,高校机房软件自动化部署管理系统的设计及实现...

    摘要 随着我国高等学校计算机教育的飞速发展 计算机作为一种重要的信息化工具受到越来越大的重视 计算机在各个学科中也发挥着越来越重要的作用 现在计算机在高校中是公共必修课 而且开设了更多的计算机应用专业课 高等院校计算机机房的规模也越来越大
  • 使用WireShark协议分析仪来分析ICMP与FTP协议

    这是网络第2次试验 wireshark分析仪网站 http www wireshark org 了解ICMP协议 ICMP Internet Control Message Protocol 网际报文控制协议 是Internet协议族的核心
  • python中 r什么意思_python中w、r指的是什么意思

    python中w r指的是什么意思 发布时间 2020 11 20 10 54 44 来源 亿速云 阅读 100 作者 小新 这篇文章将为大家详细讲解有关python中w r指的是什么意思 小编觉得挺实用的 因此分享给大家做个参考 希望大家
  • Ubuntu安装GMP库、PBC library

    历时一周终于安装完成 期间犯了太多错误 都是一点一点查的 Pbc library 库的安装依赖于如下四个文件 GMP Library M4 flex bison 其中在Linux系统中 M4 flex bison 均可以通过 apt get
  • 为什么Precision高Recall就低——F1 score

    梳理一下公式 sensitivity recall Precision和Recall虽然从计算公式来看并没有什么必然的相关性关系 但是 在大规模数据集合中 这2个指标往往是相互制约的 理想情况下做到两个指标都高当然最好 但一般情况下 Pre
  • 什么是护网(HVV)?需要什么技能?

    HVV介绍 1 什么是护网 护网的定义是以国家组织组织事业单位 国企单位 名企单位等开展攻防两方的网络安全演习 进攻方一个月内采取不限方式对防守方展开进攻 不管任何手段只要攻破防守方的网络并且留下标记即成功 直接冲到防守方的办公大楼 然后物
  • git软件代码提交详解

    git提交代码流程 git提交代码时 不能把代码直接提交到master分支 需要切换到一个子分支 然后把要提交的代码上传到子分支 然后将子分支合并到master分支上 提交步骤 1 创建并切换到子分支 git checkout b 子分支名
  • Linux软硬链接的区别

    1 概念 软链接 软链接又叫符号链接 这个文件包含了另一个文件的路径名 可以是任意文件或目录 可以链接不同文件系统的文件 硬链接 就是一个文件的一个或多个文件名 硬链接就是让多个不在或者同在一个目录下的文件名 同时能够修改同一个文件 其中一
  • 16.odoo入门——初探后台启动过程(三)

    第16天 终于周五 迎来难得的双休 上次说到 运行如下代码 rc odoo service server start preload preload stop stop 又调用了odoo service server py下的start函数
  • ssh命令,key认证

    1 sshd简介 当主机中开启openssh服务 那么就对外开放了远程连接的接口 openssh服务的服务端 开元的远程连接 sshd secure shell 服务端软件 对外开放一个接口 让别人通过其他途径连接可以通过网络在主机中开机s
  • Jean-Pierre Merlet 教授的并联机器人研究

    Jean Pierre Merlet是法国国家信息与自动化研究所 INRIA 的高级科研人员 严格来说不是教授 其著作 Parallel Robots 是并联机器人领域的经典教材 自1986年在巴黎第六大学获得博士学位后 他长期从事并联机器
  • SHA-3算法学习笔记——day1_算法简介。

    由于种种原因 对kyber算法的学习需要终止一阶段呜呜呜 现阶段学习SHA 3杂凑算法 SHA 3算法的优化等问题后续不知道还要不要学习 先学该算法的基本结构吧 SHA 3算法是一种杂凑算法 其涉及到的数学专业知识不多 结构也相对简单 轮运
  • WIN10局域网共享方法

    1 控制面板 网络和 Internet 网络和共享中心 高级共享设置 打开启动网络发现 启动文件共享和打印机共享 2 win r运行gpedit msc 打开本地组策略编辑器 找到 计算机配置 管理模板 网络 Lanman工作站 启动不安全
  • Mybatis学习笔记(一)

    MyBatis学习笔记 1 Mybatis 开源免费框架 以前叫ibatis 2010年在google code 2013年迁移到git tub 2 作用 数据访问层框架 2 1底层是对jdbc的封装 3 mybatis优点 使用mybat