Mybatis入门

MyBatis入门到精通——入门篇 目录一、什么是 MyBatis?二、入门案例(1)创建maven项目(2)引入依赖包(3)创建数据库执行sql脚本三、入门程序源码(1)User.java(2)UserMapper.java(3)MybatisUtils.java(4)UserMapperTest.java(6)UserMapper.xml(7)mybatis-config.xml(8)pom.xml 四、程序单元测试结果五、程序完整源码获取在此之前,需要提前配置好java环境变量和maven环境变量。 (3)创建数据库执行sql 阅读详情


  Mybatis
一、mybatis介绍
  mybatis是一个优秀的持久层框架,对jdbc操作数据库的过程进行封装,开发人员
 只需要关注sql本身。mybatis支持普通sql查询,存储过程和高级映射。可以使用简单
 的xml或注解配置,将java对象和sql映射生成最终执行的sql语句,最后由mybatis框架
 执行sql并将结果映射成java对象返回。
 ①mybatis配置
  SqlMapConfig.xml,此文件作为mybatis的全局配置文件,配置了mybatis的运行环境等信息。
  mapper.xml文件即sql映射文件,文件中配置了操作数据库的sql语句。此文件需要在SqlMapConfig.xml中加载。
 ② 通过mybatis环境等配置信息构造SqlSessionFactory即会话工厂
 ③ 由会话工厂创建sqlSession即会话,操作数据库需要通过sqlSession进行。
 ④ mybatis底层自定义了Executor执行器接口操作数据库,Executor接口有两个实现,
  一个是基本执行器、一个是缓存执行器。
 ⑤ Mapped Statement也是mybatis一个底层封装对象,它包装了mybatis配置信息及sql映射信息等。
  mapper.xml文件中一个sql对应一个Mapped Statement对象,sql的id即是Mapped statement的id。
 ⑥ Mapped Statement对sql执行输入参数进行定义,包括HashMap、基本类型、pojo,Executor通过
  Mapped Statement在执行sql前将输入的java对象映射至sql中,输入参数映射就是jdbc编程中对
  preparedStatement设置参数。
 ⑦ Mapped Statement对sql执行输出结果进行定义,包括HashMap、基本类型、pojo,Executor通过
  Mapped Statement在执行sql后将输出结果映射至java对象中,输出结果映射过程相当于jdbc编
  程中对结果的解析处理过程。
二、mybatis使用
 1、简单使用
  导入jar包
   --mybatis--**jar
   --mybatis-connector--**jar
 2、编写配置文件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>
   <environments default="development">
    <environment id="development">
     <!-- 使用JDBC事物管理 -->
     <transactionMannager type="JDBC"/>
     <!-- 使用连接池 -->
     <dataSource type="POOLED">
      <property name="driver" value="com.mysql.jdbc.Driver"/>
      <property name="url" value="jdbc:mysql:///数据库名?characterEncoding=utf-8"/>
      <property name="username" value="root"/>
      <property naem="password" value="123"/>
     </dataSource>
    </environment>
   </environments>
  </configuration>
 3、 建表并创建对应的实体类
  public class User {
   private Integer id;
   private String account;
   private String username;
   //getter/setter方法
  }
 4、定义sys_users表所对应的sql映射文件UserMapper.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">
  <!-- namespace:命名空间,用于隔离sql -->
  <mapper namespace="com.ztd.mybatisdemo.mapper.UserMapper">
   <!-- id:sql的id -->
   <!-- parameterType:声明输入参数 的类型-->
   <!-- resultType:声明输出结果的类型 -->
   <!-- #{}:输入参数的占位符,相当于jdbc的 ? -->
   <select id="findUserById" parameterType="int" resultType="com.ztd.mybatisdemo.entity.User">
    SELECT id,account,username FROM sys_users WHERE id=#{id}
   </select>
  </mapper>
 5、在mybatis-config.xml中注册UserMapper.xml
  <mappers>
   <mapper resource="com/ztd/mybatisdemo/mapper/xml/UserMapper.xml"/>
  </mappers>
 6、测试
  @Test
  public void testQuery() throws IOException{
   String conf = "mybatis-config.xml";
   //加载mybatis的配置文件
   Reader reader = Resources.getResourceAsReader(conf);
   //创建SqlSessionFactory
   SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
   //得到sqlSession
   Sqlsession session = sqlSessionFactory.openSession();
    //执行查询得到返回值
    //namespace + .id
    String statement = "com.ztd.mybatisdemo.mapper.UserMapper"+".findUserById";
    User user = session.selectOne(statement, 2);
    System.out.println(user);
    session.close();

  }
三、CRUD操作
 Mapper文件映射接口
 1、编写接口
  public interface UserMapper {
   void create(User user);
   void update(User user);
   void delete(Integer id);
   User findUserById(Integer id);
  }
 UserMapper.xml中的namespace为接口的全路径
 接口中的方法名和id必须一致
 
 2、返回数据库生成的主键
  <insert id="create" parameterType="com.ztd.mybatisdemo.entity.User">
  <!-- selectKey 将数据库生成的主键返回 -->
  <!-- keyColumn: 数据库表中主键对应的那一列 -->
  <!-- keyProperty: 实体类中主键对应的属性 -->
  <!-- order: 指定何时执行查询id的sql,
   BEFORE 在执行insert语句前执行查询id的sql
   AFTER  在执行insert语句后执行查询id的sql
  -->
  <selectKey keyColumn="id" keyProperty="id" order="AFTER" resultType="int">
   SELECT LAST_INSERT_ID()
  </selectKey>
   INSERT INTO sys_users(account,username,email,create_time)
   VALUES(#{account},#{username},#{email},#{createTime})
  </insert>
 3、 typeAlises标签
  为java类型命名的一个简写名字,方便使用
  <typeAliases>
   <typeAlias type="com.ztd.mybatisdemo.entity.User" alias="_user"/>
  </typeAliases>
 对于普通的java类型,有一些内建类型别名
   别名   映射的类型
   _byte   byte
   _long   long
   _short   short
   _int   int
   _integer  int
   _double   double
   _float   float
   _boolean  boolean
   string   String
   byte   Byte
   short   Short
   int    Integer
   integer   Integer
   double   Double
   float   Float
   boolean   Boolean
   date   Date
   decimal   BigDecimal
   bigdecimal  BigDecimal
   object   Object
   map    Map
   hashmap   HashMap
   list   List
   arraylist  ArrayList
   collection  Collection
   iterator  Iterator
 4、sql标签
 用来定义可以重用的sql代码片段,可以包含在其他语句中。
 <sql id="userColumns">id,account,username,email,create_time AS createTime</sql>
 <select id="findUserById" parameterType="int" resultType="_user">
  SELECT <include refid="userColumns"/>
  FROM sys_users WHERE id=#{id}
 </select>
四、 一对一查询
 1.1 嵌套查询,通过执行另外一个sql映射语句来返回预期的复杂类型
  <!-- 嵌套查询:通过执行另外一个sql映射语句 -->
  <select id="findTeacherById" parameterType="int" resultType="_teacher">
   SELECT teacher_id AS teacherId,name FROM teachers WHERE teacher_id=#{id}
  </select>
  <resultMap type="_grade" id="_gradeResultMap">
   <id property="gradeId" column="grade_id"/>
   <result property="name" column="name"/>
   <association property="teacher" column="teacher_id" javaType="_teacher"
    select="findTeacherById"/>
  </resultMap>
  <select id="findGradeById" parameterType="int" resultMap="_gradeResultMap">
   SELECT grade_id,name,teacher_id FROM grades WHERE grade_id=#{id}
  </select>

 1.2 嵌套结果,使用嵌套结果映射来处理复杂的联合结果的子集
  <!-- 嵌套结果 -->
  <resultMap type="_grade" id="_gradeResultMap">
   <id property="gradeId" column="g_id"/>
   <result property="name" column="g_name"/>
   <association property="teacher" column="teacher_id" javaType="_teacher">
    <id property="teacherId" column="teacher_id"/>
    <result property="name" column="t_name"/>
   </association>
  </resultMap>
  <select id="findGradeById" parameterType="int" resultMap="_gradeResultMap">
   SELECT g.grade_id AS g_id, g.name AS g_name, g.teacher_id AS teacher_id, t.name AS t_name
   FROM grades g,teachers t
   WHERE g.teacher_id = t.teacher_id AND g.grade_id=#{id}
  </select>
  
  
  一对多查询
 1.3 嵌套查询

  <select id="findScoreByStudentId" parameterType="Integer" resultType="_score">
   SELECT id,student_id AS studentId,subject,score,exam_date AS examDate
   FROM scores WHERE student_id=#{id}
  </select>
  <resultMap id="_studentResultMap" type="_student">
   <id property="studentId" column="student_Id"/>
   <collection property="scores" javaType="ArrayList" column="student_id" ofType="_score" select="findScoreByStudentId"/>
  </resultMap>
  <select id="findById" parameterType="Integer" resultMap="_studentResultMap">
   SELECT student_id,num,name,sex,grade
   FROM students
   WHERE student_id=#{id}
  </select>

 1.4 嵌套结果
  <!-- 嵌套结果 -->
  <resultMap type="_student" id="_studentResultMap">
   <id property="studentId" column="st_id"/>
   <result property="num" column="st_num"/>
   <result property="name" column="st_name"/>
   <result property="sex" column="st_sex"/>
   <result property="grade" column="st_grade"/>
   <collection property="scores" ofType="_score">
    <id property="studentId" column="st_id"/>
    <result property="id" column="sc_id"/>
    <result property="subject" column="sc_subject"/>
    <result property="score" column="sc_score"/>
    <result property="examDate" column="sc_exam_date"/>
   </collection>
  </resultMap>
  <select id="findById" parameterType="int" resultMap="_studentResultMap">
   SELECT st.student_id AS st_id,st.num AS st_num,st.name AS st_name,st.sex AS st_sex,st.grade AS st_grade,
    sc.id AS sc_id,sc.subject AS sc_subject,sc.score AS sc_score,sc.exam_date AS sc_exam_date
   FROM students st,scores sc
   WHERE st.student_id = sc.student_id AND sc.student_id=#{id}
  </select>

pandas,构造MultiIndex的四种方法:from_tuples、from_arrays、from_product、from_frame 1、from_tuples:通过 “元组对” 构造MultiIndex """ 一对元组,为一个索引 """ tuples = [(1, 'red'), (1, 'blue'), (2, 'red'), (2, 'blue')] pd.MultiIndex.from_tuples(tuples, names=('number', 'color')) 2、from_arrays:通过 “列表元素的组合” 构造MultiIndex """ 列中表的元素,按位置 对应组合,形成索引 """ arrays 阅读详情

相关推荐

【重磅干货】介质损耗因数(tanδ)揭秘:如何精准定位材料劣化最严重的温度?附权威研究PDF!

是评估绝缘材料性能的核心指标,能直接反映材料内部能量损耗和微观结构变化。通过分析tanδ-温度曲线的峰值点,可精准定位材料劣化最严重的温度。:极化损耗峰值的温度点(如环氧树脂的80℃)是材料性能拐点,需重点关注!:图3对比了5种材料的tanδ-温度曲线,峰值温度差异高达50℃!在电力设备、电子元器件等领域,材料的老化与温度密切相关。:[《介质损耗峰值温度在设备寿命预测中的应用》]在不同温度下测量tanδ,绘制曲线图。:[《多材料介质损耗峰值温度对比研究》]:基于tanδ峰值温度开发的。

mubiao05的博客 1348

MyBatis-parameterType参数的理解1

当方法参数较多时,使用对象,对象只要有属性,每个属性有set,get方法 属性名必须和表的列名相同,否则返回的对象的属性为空 <select id="selectByObject" resultType="com.bjpowernode.domain.Student"> select id,name ,email,age from student where name =#{name,javaType=java.lang...

dengfengling999的博客 1902

基于javaEE的图书管理系统

极简的图书管理系统,无任何样式修饰,适合新手练手(图文并释) 1、实现了用户注册、登录,图书的添加、修改、删除和修改操作 2、工具需要:eclipse、mysql、Tomcat 3、做系统之前在eclipse需要配置Tomcat服务器和导入mysql连接数据库的jar包 4、数据库中建一个user表存用户信息,一个book表存图书信息 一、各种页面 index.html文件,系统运行的首页,有登录...

qq_44357792的博客 2万+

properties、typeAliases、package标签使用细节

properties标签的使用细节 我们的properties还可以这样配置 把它配置在configuration根标签下的properties里面,然后dataSource里面的property的value使用${外面的property的name}的方式来进行配置,,,,但是很显然如果这么配置纯属吃饱了撑的,那么它的存在时为了什么呢? 那是因为properties标签不仅可以通过内部直接使用property配置数据库连接的信息,还有很重要的一点就是可以通过resource这个属性引用外部配置文件信息 配

技术积累,技术分享 536

手把手教你用Wireshark抓包分析Profinet非周期通信(附实战案例)

本文详细解析了PROFINET非周期通信(RTA)的技术原理与实战应用,通过Wireshark抓包分析,揭示从PLC请求到驱动器响应的完整对话过程。涵盖实验环境搭建、关键配置步骤、典型参数访问流程及故障诊断案例,帮助工程师深入理解并优化工业网络通信性能。

Black的专栏 1047

(53页PPT)新型智慧病房整体解决方案(附下载方式)

当前医疗场景存在三大核心矛盾:院内感染风险(如输液异常发现滞后)、信息孤岛现象(11类业务系统数据割裂)、管理效能不足(30%护理时间耗费在机械性工作)。实际案例显示,整体运营效率提升40%,患者满意度提高28个百分点,真正实现了"让技术有温度,让数据会说话"的价值理念。本文将从需求分析、技术架构、应用场景三个维度,深度剖析这份53页解决方案的创新价值与实践路径。床旁智能终端整合12项功能:包括体征自动采集(误差率<1%)、医嘱执行核对(100%条码校验)、智能床垫离床报警(响应时间3秒)等。

AI_data_cloud的博客 715

java中mybatis详解

mybatis 介绍:  mybatis是一个优秀的持久层框架,是一个实现了JPA的用来连接数据库并对其进行增删改查操作的开源框架,他对JDBC操作数据库的过程进行封装,使开发者只用关注sql本身,不用去关注实现过程。mybatis虽然实现的JPA但是它并不是一个完完全全的ORM组件,而是一个基于sql开发的半自动化的ORM组件。而Hibernate是一个完完全全的ORM的组件,它是完全基于对...

Hello_NAndroid的博客 3830

从零开始:用7353张VOC/YOLO格式混凝土缺陷数据集训练你的第一个检测模型

本文详细介绍了如何使用7353张VOC/YOLO格式的混凝土缺陷数据集训练首个目标检测模型。从环境配置、数据解析到YOLOv5模型训练与优化,提供了完整的实战指南,特别针对数据不平衡问题给出了解决方案,助力开发者快速掌握混凝土缺陷识别技术。

weixin_42651281的博客 255

【MyBatis学习笔记七】——MyBatis动态SQL常用标签

1.if 标签 if 标签,符合标签即执行,用于动态查询语句,类型Java 中的 if 语句 <select id="getAllByIf" resultType="com.demo.entity.User" parameterType="map"> select * from mybatis.user <!--where 元素只会在子元素返回任何内容的情况下才插入 “WHERE” 子句。而且,若子句的开头为 “AND” 或 “OR”,where 元素也会将它们去除。-

weixin_43817709的博客 237

从零到一:基于Docker与Gewechat协议,打造高可用微信AI助手

本文提供了一份从零开始的实战指南,详细讲解如何利用Docker容器化技术与Gewechat协议,构建一个高可用、低风险的微信AI助手。通过整合Dify AI平台,您可以为微信机器人注入大语言模型的智能,实现自动问答、知识库查询等高级功能,显著提升个人或团队在微信场景下的沟通与信息处理效率。

weixin_29280657的博客 160

MIKE水动力笔记13_数字化海图2之克里金插值

在进行MIKE水动力建模之初,需要准备好水深数据,本专题系列博文主要讲解如何将扫描版JPG格式海图数据在ArcGIS中进行数字化并制作成xyz水深地形数据,用的克里金插值方法,仅供参考。

晏长街的博客 2879

MyBatis中 collection 的两种使用方法,及效率比较

方案一 &lt;resultMap type="Student" id="StudentMap"&gt; &lt;id column="id" property="id" /&gt; &lt;result column="name" property="name" /&gt;

hlz5857475的博客 2万+

Unity小游戏接入抖音敏感词检测

摘要: 本文介绍了Unity小游戏接入抖音敏感词检测的方法。抖音官方提供了两种API:SensitiveWordCheck用于检测敏感词,ReplaceSensitiveWords用于替换敏感词。此外,若使用键盘输入事件,可通过tt.onKeyboardComplete监听回调,平台会自动屏蔽敏感词(替换为*)。接入官方字库可有效避免审核驳回,适用于小游戏中的用户输入功能(如起名系统)。附官方文档链接及参数说明。

类人_猿的博客 4592

【MyBatis】入门程序

详解编写mybatis入门程序的主要步骤,以及junit、logback和工具类 SqlSessionUtil 的封装

August_._的博客 1182

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

MyBatis快速入门第二讲——MyBatis的快速入门

MyBatis框架的架构MyBatis框架的架构如下图: 下面作简要概述: SqlMapConfig.xml,此文件作为mybatis的全局配置文件,配置了mybatis的运行环境等信息。mapper.xml文件即sql映射文件,文件中配置了操作数据库的sql语句,此文件需要在SqlMapConfig.xml中加载。 通过mybatis环境等配置信息构造SqlSessionFactory(即会

李阿昀的博客 1万+

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

MyBatis实战:从入门到精通,一站式学习MyBatis的最佳选择

MyBatis实战:从入门到精通,一站式学习MyBatis的最佳选择 项目介绍 MyBatis实战是一个专注于MyBatis技术学习的开源项目,旨在通过丰富的实战示例代码,帮助开发者从零开始掌握MyBatis的核心概念与高级用法。项目中的示例代码主要来源于刘增辉老师所著的《MyBatis从入门到精通》一书,经过精心整理与实践,确保每一个示例都能帮助开发者深入理解MyBatis的各个方面。 项目技术...

gitblog_00834的博客 1111

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

【Mybatis】Mybatis入門

1-1什么是MyBatis a.MyBatis是对JDBC的封装 b.将SQL语句放在映射文件中(XML) c.自动将输入参数映射到SQL语句的动态参数中 d.自动将SQL语句执行的结果映射成Java对象 1-2MyBatis的应用 (0)准备工作,创建学生表,添加数据 CREATE TABLE tbl_student(id VARCHAR(32),NAME VARCHAR(32),age INT); INSERT INTO tbl_student VALUE("..

keeper42的博客 188

Mybatis入门及使用

MyBatis是一款优秀的持久层框架,用于简化JDBC的开发。MyBatis本是 Apache的一个开源项目iBatis,2010年这个项目由apache迁移到了google code,并且改名为MyBatis。2013年11月迁移到Github。在上面我们提到了两个词:一个是持久层,另一个是框架。持久层:指的是就是数据访问层(dao),是用来操作数据库的。框架:是一个半成品软件,是一套可重用的、通用的、软件基础代码模型。在框架的基础上进行软件开发更加高效、规范、通用、可拓展。

2202_75483664的博客 1971

mybatis的入门使用

mybatis generator的使用 准备工作: 可编辑xml文件的编辑器(懒人直接用myeclipse打开就行) mybatis generator core 包(mybatis-generator-core-1.3.2.jar) jdbc驱动包(mysql-connector-java-5.1.40-bin.jar) 一个空的src文件夹 结构如图(根目录D:/mybatis

qq499889810的博客 450

mybatis入门

Mybatis入门 亿图作品思维图(本人作)

神韵 492

MyBatis详解(一):入门程序

一、对原生态jdbc程序中问题总结1.1、原始jdbc程序步骤:(1) 注册驱动JDBC类库向DriverManager注册数据库驱动·(2)建立连接(url、username、password)使用DriverManager提供的getConnection()方法连接到数据库(3)创建SQL语句,获取语句执行对象编写SQL语句,并建立SQL语句执行对象(4)执行语句执行SQL语句,并将结果集合返回到ResultSet中(5)处理结果(6)释放资源(注意关闭的顺序)

2501_90472645的博客 1848

MyBatis框架的入门

MyBatis是一个优秀的基于Java的持久层框架,内部对JDBC做了封装,使开发者只需要关注SQL语句,而不用关注JDBC的代码,使开发变得更加的简单。MyBatis通过XML或者注解的方式将要执行的各种Statement对象配置起来,通过Java对象和statement中SQL的动态参数进行映射,并最终执行SQL语句。执行SQL后,最终将结果已Java对象返回。采用了ORM的思想。

qq_63964907的博客 901

MyBatis-什么是MyBatis?以及MyBatis的快速入门。

MyBatis-什么是MyBatis?以及MyBatis的快速入门。

m0_63949203的博客 1072

Mybatis 配置Mybatis 二、MyBatis的入门程序

6.编写主配置文件,在resources目录下创建SqlMapConfig.xml的配置文件(其实名称可以任意),导入对应的约束,编写主配置文件。编写UserMapper.xml的配置文件,导入约束文件。引入log4j的jar包,1.2.12版本(需要引入log4j.properties的配置文件)4.编写UserMapper的接口和方法(就是咱们以前的UserDao接口)3.编写User的实现类,属性尽量使用包装类型,具体的代码如下。引入MyBatis的3.4.5的版本的坐标。

best_virtuoso的博客 1029

MyBatis 入门

MyBatis基础

2301_80313139的博客 1395
上一篇: springIOC简述
下一篇: jackson 实体转json 为NULL或者为空不参加序列化
sike_java
博客等级 码龄9年 16粉丝 25原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值