MyBatis学习(二)代码实战
一、项目依赖
本项目是基于mybatis3.4.6版本实现的,用到的jar包如下
二、项目结构解析
三、配置文件解析
四、mapper文件解析
- <?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">
- <mapper namespace="pojo.User"><!--这里直接写实体类的路径可以保证唯一性-->
- <!--结果集映射-->
- <resultMap id="BaseResultMap" type="pojo.User">
- <result column="ID" property="id" jdbcType="VARCHAR"/>
- <result column="NAME" property="name" jdbcType="VARCHAR"/>
- <result column="PHONE" property="phone" jdbcType="VARCHAR"/>
- <result column="EMAIL" property="email" jdbcType="VARCHAR"/>
- <result column="QQ" property="qq" jdbcType="VARCHAR"/>
- <result column="COMPANY" property="company" jdbcType="VARCHAR"/>
- <result column="PROFESSION" property="profession" jdbcType="VARCHAR"/>
- </resultMap>
- <!--list查询-->
- <select id="listUser" resultMap="BaseResultMap">
- select * from T_USER
- </select>
- <!--新增-->
- <insert id="addUser" parameterType="pojo.User">
- insert into T_USER (ID, NAME, PHONE,EMAIL,QQ,COMPANY,PROFESSION)
- values
- (#{id},#{name},#{phone},#{email},#{qq},#{company},#{profession})
- </insert>
- <!--删除-->
- <delete id="deleteUser" parameterType="java.lang.String">
- delete from T_USER where ID = #{id}
- </delete>
- <!--单条查询-->
- <select id="getUser" parameterType="java.lang.String" resultType="pojo.User">
- select * from T_USER where id= #{id}
- </select>
- <!--更新-->
- <update id="updateUser" parameterType="pojo.User">
- update T_USER
- <set>
- <if test="name != null">
- NAME = #{name,jdbcType=VARCHAR},
- </if>
- <if test="phone != null">
- PHONE = #{phone,jdbcType=VARCHAR},
- </if>
- <if test="email != null">
- EMAIL = #{email,jdbcType=TIMESTAMP},
- </if>
- <if test="qq != null">
- QQ = #{qq,jdbcType=TIMESTAMP},
- </if>
- <if test="company != null">
- COMPANY = #{company,jdbcType=VARCHAR},
- </if>
- <if test="profession != null">
- PROFESSION = #{profession,jdbcType=VARCHAR},
- </if>
- </set>
- where id=#{id}
- </update>
- </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、根据 mybatis-config.xml 配置的信息得到 sqlSessionFactory
- String resource = "mybatis-config.xml";
- InputStream inputStream = Resources.getResourceAsStream(resource);
- SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
- //2、然后根据 sqlSessionFactory 得到 session
- SqlSession session = sqlSessionFactory.openSession();
- //3、这里调用session对象的相关方法调用 sql 语句来进行数据库交互,此处举查询单条记录的例子
- User user = session.selectOne("getUser", "BF0001");
- System.out.println("查询T_USER表数据===开始===");
- System.out.println("查询到的记录为:" + user.toString());
- System.out.println("查询T_USER表数据===结束===");
- //4、提交修改
- session.commit();
- //5、关闭 session
MyBatis学习(二)代码实战的更多相关文章
- (原创)mybatis学习二,spring和mybatis的融合
mybatis学习一夯实基础 上文介绍了mybatis的相关知识,这一节主要来介绍mybaits和spring的融合 一,环境搭建 1,jar包下载,下载路径为jar包 2,将包导入到java工程中 ...
- MyBatis学习(二)---数据表之间关联
想要了解MyBatis基础的朋友可以通过传送门: MyBatis学习(一)---配置文件,Mapper接口和动态SQL http://www.cnblogs.com/ghq120/p/8322302. ...
- MyBatis学习(二)
前言 昨天的博客简单的记录了MyBatis的起源.作用.配置以及一个简单的查询例子.写到一半的时候,觉得已经学会了MyBatis,可是全写完的时候才发现,如果多个参数查询,如何表的名字与类字段名不一样 ...
- mybatis学习二
Mybatis缓存1:缓存的概念 当用户频繁查询某些固定 的数据时,第一次将这些数据从数据库查询出来,保存在缓存中(内存,高速磁盘)中 当下次用户再次查询这些数据时,不用再通过数据库查询, ...
- mybatis学习二 全局配置文件常用配置
全局配置文件的详细解析可以参考mybatis的中文参考文档 1.全局配置文件中内容1.1 <transactionManager/> type 属性可取值1.1.1 JDBC,事务管理使用 ...
- mybatis 学习二 conf xml 配置信息
xml映射配置文件 这个xml文件主要包括一下节点信息 * properties 属性 * settings 设置 * typeAliases 类型命名 ...
- MyBatis学习(二):与Spring整合(非注解方式配置MyBatis)
搭建SpringMVC的-->传送门<-- 一.环境搭建: 目录结构: 引用的JAR包: 如果是Maven搭建的话,pom.xml的配置如下: <?xml version=" ...
- mybatis 学习二 MyBatis简介与配置MyBatis+Spring+MySql
1.2.2建立MySql数据库 在C:\Program Files\MySQL\MySQL Server 5.7\bin下面: 首先连接MySQL: mysql -u root -p ...
- MyBatis 学习二之简单练习巩固
1.新建一个maven项目并在pom.xml中添加依赖 2.项目架构 配置文件:SqlMapConfig.xml <?xml version="1.0" encoding ...
- java mybatis学习二
<select id="find1" parameterType="java.util.HashMap" resultType="com.xxx ...
随机推荐
- 传统servelt项目之分页操作
需求说明: • 演示最终分页效果 • 提供分页素材 • 分页的作用 • 数据量大,一页容不下 • 后台查询部分数据而不是全部数据 • 降低带宽使用,提高访问速度 • 分页的实现思路 • ...
- 夜息seo培训内部教程
http://www.wocaoseo.com/thread-268-1-1.html 随着SEO日益正规化,在企业中推行SEO变得越来越重要,在上一文<将SEO整合入整个网站项目>中也有 ...
- 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 ...
- 软件人如何快速晋升CTO(一)
1.场景描述 软件人如何快速晋升CTO? 实战操作,介绍下如何0成本拥有自己的软件公司,出任CTO/CEO. 2020年 8月16日,软件老王拿到公司的营业执照和公章了,税务登记也一起办理好了 ...
- Python协程之asyncio
asyncio 是 Python 中的异步IO库,用来编写并发协程,适用于IO阻塞且需要大量并发的场景,例如爬虫.文件读写. asyncio 在 Python3.4 被引入,经过几个版本的迭代,特性. ...
- centos 7 对用过yum更新的软件服务进行降级
centos 7 执行 yum update 会对现有服务软件进行更新,但是如果把不该升级的软件升级,彼此软件不兼容,如何进行降级,比如:kibana 必须与 elasticsearch 大版本相同, ...
- Htmlcss学习笔记1——html基础
Hyper text markup language 超文本标签语言.不是一种编程语言,而是一种标记语言标记语言是一套标记标签 开发工具 chrome subline vscode photoshop ...
- e3mall商城总结11之sso系统的分析、应用以及解决ajax跨域问题
说在前面的话 一.sso系统分析 什么是sso系统 SSO英文全称Single Sign On,单点登录.SSO是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统.它包括可以将这次 ...
- Shader Graph
About Shader Graph https://docs.unity3d.com/Packages/com.unity.shadergraph@7.3/manual/index.html uni ...
- oeasy教您玩转linux010103我在那pwd
我在哪pwd 回忆上次内容 我们上次列出了关于发行版详细信息文件的位置 ls /etc/*release 其中 ls是命令的名字,意味着list列表 /是整个文件系统的根root /etc是根目录下的 ...