==>>MyBatis中文网
<mybatis.version>3.4.1</mybatis.version>
<mysql.version>5.1.47</mysql.version>
<!-- mybatis begin -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>${mybatis.version}</version>
</dependency>
<!-- mybatis end -->
<!-- mysql begin -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${mysql.version}</version>
</dependency>
<!-- mysql end -->
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/animedb?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2b8
username=root
password=root
数据配置信息可以直接在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="jdbc.properties"></properties>
<typeAliases>
<!-- 给所有的实体类 批量取别名 -->
<package name="com.kgc.mybatis.bean"/>
</typeAliases>
<!-- 是指数据库配置环境,可以直接写值也可以引入外部配置文件 -->
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
</dataSource>
</environment>
</environments>
<mappers>
<package name="com.kgc.mybatis.mapper"/>
</mappers>
</configuration>
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">
<!--
SQl语句映射文件:
namespace :名称空间
1.单独使用SqlSession的方法,可以随意的定义,仅限于全限定名的方式,指定sql语句唯一标识字符串使用
2.再面向接口开发时,不可以随便写了,必须时某个接口的全类名(全路径名:包名+类名)
-->
<!-- <mapper namespace="huayu"> 随意定义命名空间 -->
<mapper namespace="com.kgc.mybatis.mapper.AnimeMapper"> <!-- 接口开发 -->
<!--
select标签:查询标签
id属性:select标签的唯一标识,再面向开发时,对应的时namespace指定接口的某个方法名
resultType 属性: 返回值类型
#{id} :获取调用接口,获取参数值
-->
<select id="selectAnime" parameterType="int" resultType="com.kgc.mybatis.bean.Anime">
select * from animes where id = #{id}
</select>
</mapper>
//指定mybatis的核心配置文件路径
String resource = "mybatis-config.xml";
//使用mybatis提供的Resources 工具类读取核心配置文件,转为输入流对象
InputStream inputStream = Resources.getResourceAsStream(resource);
//使用SqlSessionFactoryBuilder对象的build方法,基于上一步的输入流对象
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
//获取到的是 DefaultSqlSessionFactory
System.out.println(sqlSessionFactory);
//org.apache.ibatis.session.defaults.DefaultSqlSessionFactory@45c8e616
SqlSession 提供了在数据库执行 SQL 命令所需的所有方法,拿到SqlSession 就可以执行;
session.selectOne(statement,parameter); 方法参数分析
| 参数 | 说明 |
|---|---|
| statement | 准备要执行的SQL语句的唯一标识符(mybatis可以识别,目的是可以通过此标识,查找到要执行的SQL语句) |
| parameter | 准备要执行的SQL语句的参数值 |
//将实例化SqlSession放在 try()中,会自动关闭资源
try (SqlSession session = sqlSessionFactory.openSession()) {
//通过获取的SqlSession的实例,执行查询操作
//根据动漫编号,查询动漫详情
//<mapper namespace="huayu">单独使用SqlSession的方法,namespace可以随意的定义
//namespace.方法名,通过sql语句唯一标识字符串,找到执行SQL
Anime anime = (Anime) session.selectOne("huayu.selectAnime", 101);
System.out.println(anime);
}
注意在resource下建立文件夹的时候需要 com/kcg/mybatis ,中间的分隔符要使用反斜杠,不能用点;
try (SqlSession session = sqlSessionFactory.openSession()) {
//面向接口开发
//推荐的方式
AnimeMapper animeMapper = session.getMapper(AnimeMapper.class);
System.out.println(animeMapper);
//代理对象 org.apache.ibatis.binding.MapperProxy@4cc0edeb
//直接就可以通过调用接口的方法,执行对象的SQl语句,并返回接口,不需要关心mybatis底层是调用那个方法
Anime anime = animeMapper.selectAnime(101);
System.out.println(anime);
}
try()中实例化对象报错问题
https://www.cnblogs.com/xiaoqigui/p/16598100.html
指定maven版本就可以
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>8</source>
<target>8</target>
</configuration>
</plugin>
注意:配置的顺序不能错,可以少写,但是不能顺序错
1、properties 属性:自定义核心属性配置,也可以引入外部的属性文件,比如jdbc.properties;
//resource属性引入的外部配置文件,优先级高于property子标签属性
<properties resource="jdbc.properties">
<!-- <property name="driver" value="com.mysql.jdbc.Driver"/>-->
<!-- <property name="url" value="jdbc:mysql://localhost:3306/animedb?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2b8"/>-->
<!-- <property name="username" value="root"/>-->
<!-- <property name="password" value="17585273765"/>-->
</properties>
一些设置的开启;
下面是简单举例,设置用很多,可以直接看官网;
<settings>
<!-- 开启驼峰自动映射 -->
<setting name="mapUnderscoreToCamelCase" value="true" />
<!-- mybatis自带日志 -->
<!-- <setting name="logImpl" value="STDOUT_LOGGING"/> -->
<!-- LOG4J日志 -->
<!-- <setting name="logImpl" value="LOG4J"/> -->
</settings>
在SQL的xml文件中,resultType 可以使用 别名,不区分大小写;
<typeAliases>
<!-- 单个实体类设置别名 -->
<!-- <typeAlias type="com.kgc.mybatis.bean.Anime" alias="Anime"></typeAlias>-->
<!-- 对整个个实体包下的实体类设置别名 -->
<package name="com.kgc.mybatis.bean"/>
</typeAliases>
MyBatis 可以配置成适应多种环境;
不过要记住:尽管可以配置多个环境,但每个 SqlSessionFactory 实例只能选择一种环境。
<environments default="development_test">
<!-- 开发环境 -->
<environment id="development_dev">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
</dataSource>
</environment>
<!-- 测试环境 -->
<environment id="development_test">
......
</environment>
<!-- 生产环境 -->
<environment id="development_prod">
.......
</environment>
</environments>
environment 标签的子标签 transactionManager;
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
</dataSource>
<mappers>
<mapper resource="com/kgc/mybatis/AnimeMapper.xml"></mapper>
</mappers>
<mappers>
<mapper class="com.kgc.mybatis.mapper.AnimeMapper"></mapper>
</mappers>
只需要指定mapper接口的所在包;
<mappers>
<package name="com.kgc.mybatis.mapper"/>
</mappers>
//1、加载全局配置文件
InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
//2、实例化 SqlSessionFactoryBuilder 构建器
SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
//3、解析 配置信息文件流,并返回 defaultSessionFactory
SqlSessionFactory defaultSessionFactory = sqlSessionFactoryBuilder.build(inputStream);
//4、实例化 SqlSession
SqlSession sqlSession = defaultSessionFactory.openSession();
System.out.println(sqlSession);
//org.apache.ibatis.session.defaults.DefaultSqlSession@20398b7c
//5、获取接口的代理实现类
AnimeMapper animeMapper = sqlSession.getMapper(AnimeMapper.class);
//调用接口的 代理类,执行方法
Anime anime = animeMapper.selectAnimeById(101);
System.out.println(anime);
//Anime(id=101, cid=1, name=斗破苍穹, author=土豆, actor=萧炎, produce=玄机科技, createDate=Sun Aug 07 00:00:00 CST 2022)
//加载全局配置文件
InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
//实例化 SqlSessionFactoryBuilder 构建器
SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
解析 配置信息文件流,并返回 defaultSessionFactory;
//解析 配置信息文件流,并返回 defaultSessionFactory
SqlSessionFactory defaultSessionFactory = sqlSessionFactoryBuilder.build(inputStream);
手动实现,体验实例化Configuration;
//手动解析配置文件流,实例化Configuration,体验Mybatsi自动实例化Configuration;
//实例化 XMLConfigBuilder 参数:配置文件流,环境名字,Properties实例
//XMLConfigBuilder xmlConfigBuilder = new XMLConfigBuilder(inputStream, "development_dev", new Properties());
//解析配置文件流
//Configuration configuration = xmlConfigBuilder.parse();
`SqlSessionFactoryBuilder源码分析:
sqlSessionFactoryBuilder.build(inputStream)方法,首先进入sqlSessionFactoryBuilder类,
调用当前类的SqlSessionFactory build(InputStream inputStream, String environment, Properties properties)方法;

其中,又调用当前类的一个build方法,解析配置文件,并实例化DefaultSqlSessionFactory;

//实例化 SqlSession
SqlSession sqlSession = defaultSessionFactory.openSession();
//org.apache.ibatis.session.defaults.DefaultSqlSession@20398b7c
DefaultSqlSessionFactory源码分析:
openSession方法调用openSessionFromConnection;

openSessionFromDataSource(ExecutorType execType, TransactionIsolationLevel level, boolean autoCommit) 方法:方法:

//获取到接口的代理实现类
AnimeMapper animeMapper = sqlSession.getMapper(AnimeMapper.class);
//org.apache.ibatis.binding.MapperProxy@5abca1e0
//也可以通过,解析配置文件流 创建配置对象,并通过配置对象直接getMapper,前提是获得了sqlSession
//Configuration configuration = xmlConfigBuilder.parse();
//AnimeMapper animeMapper = configuration.getMapper(AnimeMapper.class, sqlSession);
//调用接口代理类,执行方法
Anime anime = animeMapper.selectAnimeById(101);
//Anime(id=101, cid=1, name=斗破苍穹, author=土豆, actor=萧炎, produce=玄机科技, createDate=Sun Aug 07 00:00:00 CST 2022)

目录前言滤波电路科普主要分类实际情况单位的概念常用评价参数函数型滤波器简单分析滤波电路构成低通滤波器RC低通滤波器RL低通滤波器高通滤波器RC高通滤波器RL高通滤波器部分摘自《LC滤波器设计与制作》,侵权删。前言最近需要学习放大电路和滤波电路,但是由于只在之前做音乐频谱分析仪的时候简单了解过一点点运放,所以也是相当从零开始学习了。滤波电路科普主要分类滤波器:主要是从不同频率的成分中提取出特定频率的信号。有源滤波器:由RC元件与运算放大器组成的滤波器。可滤除某一次或多次谐波,最普通易于采用的无源滤波器结构是将电感与电容串联,可对主要次谐波(3、5、7)构成低阻抗旁路。无源滤波器:无源滤波器,又称
@作者:SYFStrive @博客首页:HomePage📜:微信小程序📌:个人社区(欢迎大佬们加入)👉:社区链接🔗📌:觉得文章不错可以点点关注👉:专栏连接🔗💃:感谢支持,学累了可以先看小段由小胖给大家带来的街舞👉微信小程序(🔥)目录自定义组件-behaviors 1、什么是behaviors 2、behaviors的工作方式 3、创建behavior 4、导入并使用behavior 5、behavior中所有可用的节点 6、同名字段的覆盖和组合规则总结最后自定义组件-behaviors 1、什么是behaviorsbehaviors是小程序中,用于实现
遍历文件夹我们通常是使用递归进行操作,这种方式比较简单,也比较容易理解。本文为大家介绍另一种不使用递归的方式,由于没有使用递归,只用到了循环和集合,所以效率更高一些!一、使用递归遍历文件夹整体思路1、使用File封装初始目录,2、打印这个目录3、获取这个目录下所有的子文件和子目录的数组。4、遍历这个数组,取出每个File对象4-1、如果File是否是一个文件,打印4-2、否则就是一个目录,递归调用代码实现publicclassSearchFile{publicstaticvoidmain(String[]args){//初始目录Filedir=newFile("d:/Dev");Datebeg
ES一、简介1、ElasticStackES技术栈:ElasticSearch:存数据+搜索;QL;Kibana:Web可视化平台,分析。LogStash:日志收集,Log4j:产生日志;log.info(xxx)。。。。使用场景:metrics:指标监控…2、基本概念Index(索引)动词:保存(插入)名词:类似MySQL数据库,给数据Type(类型)已废弃,以前类似MySQL的表现在用索引对数据分类Document(文档)真正要保存的一个JSON数据{name:"tcx"}二、入门实战{"name":"DESKTOP-1TSVGKG","cluster_name":"elasticsear
文章目录1.任务背景2.任务目标3.相关知识点4.任务实操4.1安装配置JDK4.2启动FISCOBCOS4.3下载解压WeBASE-Front4.4拷贝sdk证书文件4.5启动节点4.6访问节点4.7检查运行状态5.任务总结1.任务背景FISCOBCOS其实是有控制台管理工具,用来对区块链系统进行各种管理操作。但是对于初学者来说,还是可视化界面更友好,本节就来介绍WeBASE管理平台,这是一款微众银行开源的自研区块链中间件平台,可以降低区块链使用的门槛,大幅提高区块链应用的开发效率。微众银行是腾讯牵头设立的民营银行,在国内民营银行里还是比较出名的。微众银行参与FISCOBCOS生态建设,一定
TCL脚本语言简介•TCL(ToolCommandLanguage)是一种解释执行的脚本语言(ScriptingLanguage),它提供了通用的编程能力:支持变量、过程和控制结构;同时TCL还拥有一个功能强大的固有的核心命令集。TCL经常被用于快速原型开发,脚本编程,GUI和测试等方面。•实际上包含了两个部分:一个语言和一个库。首先,Tcl是一种简单的脚本语言,主要使用于发布命令给一些互交程序如文本编辑器、调试器和shell。由于TCL的解释器是用C\C++语言的过程库实现的,因此在某种意义上我们又可以把TCL看作C库,这个库中有丰富的用于扩展TCL命令的C\C++过程和函数,所以,Tcl是
文章目录一、项目场景二、基本模块原理与调试方法分析——信源部分:三、信号处理部分和显示部分:四、基本的通信链路搭建:四、特殊模块:interpretedMATLABfunction:五、总结和坑点提醒一、项目场景 最近一个任务是使用simulink搭建一个MIMO串扰消除的链路,并用实际收到的数据进行测试,在搭建的过程中也遇到了不少的问题(当然这比vivado里面的debug好不知道多少倍)。准备趁着这个机会,先以一个很基本的通信链路对simulink基础和相关的debug方法进行总结。 在本篇中,主要记录simulink的基本原理和基本的SISO通信传输链路(QPSK方式),计划在下篇记
目录一、ESP32简单介绍二、ESP32Wi-Fi模块介绍三、ESP32Wi-Fi编程模型四、ESP32Wi-Fi事件处理流程 五、ESP32Wi-Fi开发环境六、ESP32Wi-Fi具体代码七、ESP32Wi-Fi代码解读6.1主程序app_main7.2自定义代码wifi_init_sta()八、ESP32Wi-Fi连接验证8.1测试方法8.2服务器模拟工具sscom58.3测试代码8.4测试结果前言为了开发一款亚马逊物联网产品,开始入手ESP32模块。为了能够记录自己的学习过程,特记录如下操作过程。一、ESP32简单介绍ESP32是一套Wi-Fi(2.4GHz)和蓝牙(4.2)双模解决方
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭10年前。我使用PHP的时间太长了,对它感到厌倦了。我也想学习一门新语言。我一直在使用Ruby并且喜欢它。我必须在Rails和Sinatra之间做出选择,那么您会推荐哪一个?Sinatra真的不能用来构建复杂的应用程序,它只能用于简单的应用程序吗?
📝学技术、更要掌握学习的方法,一起学习,让进步发生👩🏻作者:一只IT攻城狮。💐学习建议:1、养成习惯,学习java的任何一个技术,都可以先去官网先看看,更准确、更专业。💐学习建议:2、然后记住每个技术最关键的特性(通常一句话或者几个字),从主线入手,由浅入深学习。❤️《SpringCloud入门实战系列》解锁SpringCloud主流组件入门应用及关键特性。带你了解SpringCloud主流组件,是如何一战解决微服务诸多难题的。项目demo:源码地址👉🏻SpringCloud入门实战系列不迷路👈🏻:SpringCloud入门实战(一)什么是SpringCloud?SpringCloud入门实战