一、项目依赖

本项目是基于mybatis3.4.6版本实现的,用到的jar包如下

二、项目结构解析

三、配置文件解析

四、mapper文件解析

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE mapper
  3. PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  4. "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
  5.  
  6. <mapper namespace="pojo.User"><!--这里直接写实体类的路径可以保证唯一性-->
  7. <!--结果集映射-->
  8. <resultMap id="BaseResultMap" type="pojo.User">
  9. <result column="ID" property="id" jdbcType="VARCHAR"/>
  10. <result column="NAME" property="name" jdbcType="VARCHAR"/>
  11. <result column="PHONE" property="phone" jdbcType="VARCHAR"/>
  12. <result column="EMAIL" property="email" jdbcType="VARCHAR"/>
  13. <result column="QQ" property="qq" jdbcType="VARCHAR"/>
  14. <result column="COMPANY" property="company" jdbcType="VARCHAR"/>
  15. <result column="PROFESSION" property="profession" jdbcType="VARCHAR"/>
  16. </resultMap>
  17.  
  18. <!--list查询-->
  19. <select id="listUser" resultMap="BaseResultMap">
  20. select * from T_USER
  21. </select>
  22.  
  23. <!--新增-->
  24. <insert id="addUser" parameterType="pojo.User">
  25. insert into T_USER (ID, NAME, PHONE,EMAIL,QQ,COMPANY,PROFESSION)
  26. values
  27. (#{id},#{name},#{phone},#{email},#{qq},#{company},#{profession})
  28. </insert>
  29.  
  30. <!--删除-->
  31. <delete id="deleteUser" parameterType="java.lang.String">
  32. delete from T_USER where ID = #{id}
  33. </delete>
  34.  
  35. <!--单条查询-->
  36. <select id="getUser" parameterType="java.lang.String" resultType="pojo.User">
  37. select * from T_USER where id= #{id}
  38. </select>
  39.  
  40. <!--更新-->
  41. <update id="updateUser" parameterType="pojo.User">
  42. update T_USER
  43. <set>
  44. <if test="name != null">
  45. NAME = #{name,jdbcType=VARCHAR},
  46. </if>
  47. <if test="phone != null">
  48. PHONE = #{phone,jdbcType=VARCHAR},
  49. </if>
  50. <if test="email != null">
  51. EMAIL = #{email,jdbcType=TIMESTAMP},
  52. </if>
  53. <if test="qq != null">
  54. QQ = #{qq,jdbcType=TIMESTAMP},
  55. </if>
  56. <if test="company != null">
  57. COMPANY = #{company,jdbcType=VARCHAR},
  58. </if>
  59. <if test="profession != null">
  60. PROFESSION = #{profession,jdbcType=VARCHAR},
  61. </if>
  62. </set>
  63. where id=#{id}
  64. </update>
  65. </mapper>

参数解析

  • parameterType:要求输入参数的类型
  • resultType:输出的类型
  • resultMap:输出的结果对象,应用与复杂数据的场景,可将查询到的数据映射到一个可自定义的数据集中去。

小结

parameterType

  就是用来在 SQL 映射文件中指定输入参数类型的,可以指定为基本数据类型(如 int、float 等)、包装数据类型(如 String、Interger 等)以及用户自己编写的 JavaBean 封装类

resultType

  resultType 是用来指定数据库返回的信息对应的 Java 的数据类型。

#{}

  在传统的 JDBC 的编程中,占位符用 “?” 来表示,然后再加载 SQL 之前按照 “?” 的位置设置参数。而 “#{}” 在 MyBatis 中也代表一种占位符,该符号接受输入参数,在大括号中编写参数名称来接受对应参数。当 “#{}” 接受简单类型时可以用 value 或者其他任意名称来获取。

${}

  在 SQL 配置中,有时候需要拼接 SQL 语句(例如模糊查询时),用 “#{}” 是无法达到目的的。在 MyBatis 中,“${}” 代表一个 “拼接符号” ,可以在原有 SQL 语句上拼接新的符合 SQL 语法的语句。使用 “${}” 拼接符号拼接 SQL ,会引起 SQL 注入,所以一般不建议使用 “${}”。

PS: <select> 标签对中 SQL 语句的 “${}” 符号,表示拼接 SQL 串,将接受的参数内容不加任何修饰地拼接在 SQL 中,“${}” 符号中的内容也只能是对应的变量。(例子:%${goodsNameLike}%,%要写在外面)

MyBatis 使用场景

  通过上面的入门程序,不难看出在进行 MyBatis 开发时,我们的大部分精力都放在了 SQL 映射文件上。在对 SQL 优化要求比较高,或是项目需求或业务经常变动时,我们使用MyBatis。

MyBatis 的特点

  就是以 SQL 语句为核心的不完全的 ORM(关系型映射)框架。与 Hibernate 相比,Hibernate 的学习成本比较高,而 SQL 语句并不需要开发人员完成,只需要调用相关 API 即可。这对于开发效率是一个优势,但是缺点是没办法对 SQL 语句进行优化和修改。而 MyBatis 虽然需要开发人员自己配置 SQL 语句,MyBatis 来实现映射关系,但是这样的项目可以适应经常变化的项目需求。

五、测试类解析

  1. //1、根据 mybatis-config.xml 配置的信息得到 sqlSessionFactory
  2. String resource = "mybatis-config.xml";
  3. InputStream inputStream = Resources.getResourceAsStream(resource);
  4. SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
  5. //2、然后根据 sqlSessionFactory 得到 session
  6. SqlSession session = sqlSessionFactory.openSession();
  7. //3、这里调用session对象的相关方法调用 sql 语句来进行数据库交互,此处举查询单条记录的例子
  8. User user = session.selectOne("getUser", "BF0001");
  9. System.out.println("查询T_USER表数据===开始===");
  10. System.out.println("查询到的记录为:" + user.toString());
  11. System.out.println("查询T_USER表数据===结束===");
  12. //4、提交修改
  13. session.commit();
  14. //5、关闭 session

MyBatis学习(二)代码实战的更多相关文章

  1. (原创)mybatis学习二,spring和mybatis的融合

    mybatis学习一夯实基础 上文介绍了mybatis的相关知识,这一节主要来介绍mybaits和spring的融合 一,环境搭建 1,jar包下载,下载路径为jar包 2,将包导入到java工程中 ...

  2. MyBatis学习(二)---数据表之间关联

    想要了解MyBatis基础的朋友可以通过传送门: MyBatis学习(一)---配置文件,Mapper接口和动态SQL http://www.cnblogs.com/ghq120/p/8322302. ...

  3. MyBatis学习(二)

    前言 昨天的博客简单的记录了MyBatis的起源.作用.配置以及一个简单的查询例子.写到一半的时候,觉得已经学会了MyBatis,可是全写完的时候才发现,如果多个参数查询,如何表的名字与类字段名不一样 ...

  4. mybatis学习二

    Mybatis缓存1:缓存的概念    当用户频繁查询某些固定 的数据时,第一次将这些数据从数据库查询出来,保存在缓存中(内存,高速磁盘)中    当下次用户再次查询这些数据时,不用再通过数据库查询, ...

  5. mybatis学习二 全局配置文件常用配置

    全局配置文件的详细解析可以参考mybatis的中文参考文档 1.全局配置文件中内容1.1 <transactionManager/> type 属性可取值1.1.1 JDBC,事务管理使用 ...

  6. mybatis 学习二 conf xml 配置信息

    xml映射配置文件      这个xml文件主要包括一下节点信息      * properties 属性      * settings 设置      * typeAliases 类型命名     ...

  7. MyBatis学习(二):与Spring整合(非注解方式配置MyBatis)

    搭建SpringMVC的-->传送门<-- 一.环境搭建: 目录结构: 引用的JAR包: 如果是Maven搭建的话,pom.xml的配置如下: <?xml version=" ...

  8. mybatis 学习二 MyBatis简介与配置MyBatis+Spring+MySql

    1.2.2建立MySql数据库 在C:\Program Files\MySQL\MySQL Server 5.7\bin下面: 首先连接MySQL:        mysql  -u root -p ...

  9. MyBatis 学习二之简单练习巩固

    1.新建一个maven项目并在pom.xml中添加依赖 2.项目架构   配置文件:SqlMapConfig.xml <?xml version="1.0" encoding ...

  10. java mybatis学习二

    <select id="find1" parameterType="java.util.HashMap" resultType="com.xxx ...

随机推荐

  1. 传统servelt项目之分页操作

    需求说明: • 演示最终分页效果 • 提供分页素材     • 分页的作用 • 数据量大,一页容不下 • 后台查询部分数据而不是全部数据 • 降低带宽使用,提高访问速度     • 分页的实现思路 • ...

  2. 夜息seo培训内部教程

    http://www.wocaoseo.com/thread-268-1-1.html 随着SEO日益正规化,在企业中推行SEO变得越来越重要,在上一文<将SEO整合入整个网站项目>中也有 ...

  3. Welcome To CUG_YZL's cnblogs

    Welcome To CUG_YZL's cnblogs  My name is YZL, studied in China University of Geosciences Wuhan now.W ...

  4. 软件人如何快速晋升CTO(一)

    1.场景描述 ​ 软件人如何快速晋升CTO? 实战操作,介绍下如何0成本拥有自己的软件公司,出任CTO/CEO. ​ 2020年 8月16日,软件老王拿到公司的营业执照和公章了,税务登记也一起办理好了 ...

  5. Python协程之asyncio

    asyncio 是 Python 中的异步IO库,用来编写并发协程,适用于IO阻塞且需要大量并发的场景,例如爬虫.文件读写. asyncio 在 Python3.4 被引入,经过几个版本的迭代,特性. ...

  6. centos 7 对用过yum更新的软件服务进行降级

    centos 7 执行 yum update 会对现有服务软件进行更新,但是如果把不该升级的软件升级,彼此软件不兼容,如何进行降级,比如:kibana 必须与 elasticsearch 大版本相同, ...

  7. Htmlcss学习笔记1——html基础

    Hyper text markup language 超文本标签语言.不是一种编程语言,而是一种标记语言标记语言是一套标记标签 开发工具 chrome subline vscode photoshop ...

  8. e3mall商城总结11之sso系统的分析、应用以及解决ajax跨域问题

    说在前面的话 一.sso系统分析 什么是sso系统 SSO英文全称Single Sign On,单点登录.SSO是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统.它包括可以将这次 ...

  9. Shader Graph

    About Shader Graph https://docs.unity3d.com/Packages/com.unity.shadergraph@7.3/manual/index.html uni ...

  10. oeasy教您玩转linux010103我在那pwd

    我在哪pwd 回忆上次内容 我们上次列出了关于发行版详细信息文件的位置 ls /etc/*release 其中 ls是命令的名字,意味着list列表 /是整个文件系统的根root /etc是根目录下的 ...