MyBatis 简介

MyBatis的前身叫iBatis,本是apache的一个开源项目, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis。MyBatis是支持普通SQL查询,存储过程和高级映射的优秀持久层框架。MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及结果集的检索。MyBatis使用简单的XML或注解用于配置和原始映射,将接口和Java的POJOs(Plan Old Java Objects,普通的Java对象)映射成数据库中的记录。
首先介绍一下Mybatis是什么?mybatis是Java的持久层框架, JAVA操作数据库是通过jdbc来操作的,而mybatis是对jdbc的封装。
使用mybatis之后,开发者只需要关注sql语句本身,而不必花时间去注册驱动、创建connection、statement、手动设置参数,结果集检索等jdbc繁琐的代码。
mybatis基本过程:Mybatis通过xml或注解的方式将要执行的各种statement(statement、preparedStatemnt、CallableStatement)配置起来,并通过java对象和statement中的sql进行映射生成最终执行的sql语句,最后由mybatis框架执行sql并将结果映射成java对象并返回。
下面通过一个根据用户id查询用户信息来学习mybatis:
先介绍一下mybatis的两种主要的配置文件:
SqlMapConfig.xml(mybatis全局配置文件,名称不固定,用来配置运行环境(数据源、事务)
类名+mapper.xml 主要用来配置sql语句
一、首先我们需要在mybatis的全局配置文件(SqlMapConfig.xml)中配置jdbc连接池,和加载mapper.xml.
当系统启动时,会加载这个全局配置文件,然后通过全局配置文件加载到mapper.xml文件。mapper.xml文件中配置了sql语句。
二、编写SqlSessionFactory。mybatis的核心就是这个SqlSessionFactory。通过这个SqlSessionFactory将配置文件以参数的形式传入之后,创建了一个会话。
然后通过sqlsession来操作数据库,进行增删改查。
下面来对第一步和第二步分别做个细致的分析。首先贴上代码:
sqlMapperConfig.xml
<environments default="development">
<environment id="development">
<!-- 使用jdbc事务管理-->
<transactionManager type="JDBC" />
<!-- 数据库连接池-->
<dataSource type="POOLED">
<property name="driver" value="${jdbc.driver}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</dataSource>
</environment>
</environments>
<mappers>
<!-- 通过resource引用mapper的映射文件 -->
<mapper resource="sqlmap/User.xml" />
</mappers>
通过这个配置文件可以看出总的配置文件是配置一些主要信息和加载别的配置文件。当mybatis和Spring整合之后,environment就会被废除。同时,这种全局配置文件只会有一个。而 "表名+mapper.xml"这种配置文件则会有很多。
下面来分析 "表名+mapper.xml"
<!-- namespace命名空间,为了对sql语句进行隔离,方便管理 ,mapper开发dao方式,使用namespace有特殊作用
mapper代理开发时将namespace指定为mapper接口的全限定名
-->
<mapper namespace="test">
<!-- 在mapper.xml文件中配置很多的sql语句,执行每个sql语句时,封装为MappedStatement对象
mapper.xml以statement为单位管理sql语句
-->
<!-- 根据id查询用户信息 -->
<!--
id:唯一标识 一个statement
#{}:表示 一个占位符,如果#{}中传入简单类型的参数,#{}中的名称随意
parameterType:输入 参数的类型,通过#{}接收parameterType输入 的参数
resultType:输出结果 类型,不管返回是多条还是单条,指定单条记录映射的pojo类型
-->
<select id="findUserById" parameterType="int" resultType="cn.itcast.mybatis.po.User">
SELECT * FROM USER WHERE id= #{id}
</select>
从代码中可以看出这个配置文件是用来配置sql语句的。但是应当注意,最上面的namespace的注释,namespace命名空间,为了对sql语句进行隔离,方便管理 ,mapper开发dao方式,使用namespace有特殊作用,mapper代理开发时将namespace指定为mapper接口的全限定名。
在后面的SQLSessionFactory类中就能看出其作用了。
这个配置文件中的每个sql语句,其实都是jdbc中的statement,这样的话,其实mybatis内部也是在操作statement。
这里的<select>标签里面传参用到的是#{},而我们要用模糊查询的时候是不能用这个直接加上%的。
但是有一种方法就是 使用${}接收参数!如下:
<!-- 根据用户名称查询用户信息,可能返回多条
${}:表示sql的拼接,通过${}接收参数,将参数的内容不加任何修饰拼接在sql中。
-->
<select id="findUserByName" parameterType="java.lang.String" resultType="cn.itcast.mybatis.po.User">
select * from user where username like '%${value}%'
</select>
但是上面这种方法是不加任何修饰的拼接在sql中的,也就是不能防止sql注入,所以这种方法也不能应用到实际项目中!
所以,我在百度上搜到了另一种方式来进行模糊查询,不知道有没有什么bug,但是我测试是可以用的。
<!-- 根据用户名模糊查询查询出员工的信息 -->
<select id="search" resultType="Employee">
SELECT
<include refid="allColumns"/>
FROM employee a where a.name like concat(concat('%',#{name}),'%')
</select>
下面来看看sqlsessionFactory会话工厂的代码:
public class MybatisFirst {
// 会话工厂
private SqlSessionFactory sqlSessionFactory;
// 创建工厂
@Before
public void init() throws IOException {
// 配置文件(SqlMapConfig.xml)
String resource = "SqlMapConfig.xml";
// 加载配置文件到输入 流
InputStream inputStream = Resources.getResourceAsStream(resource);
// 创建会话工厂
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
}
// 测试根据id查询用户(得到单条记录)
@Test
public void testFindUserById() {
// 通过sqlSessionFactory创建sqlSession
SqlSession sqlSession = sqlSessionFactory.openSession();
// 通过sqlSession操作数据库
// 第一个参数:statement的位置,等于namespace+statement的id
// 第二个参数:传入的参数
User user = null;
try {
user = sqlSession.selectOne("test.findUserById", 2);
} catch (Exception e) {
e.printStackTrace();
} finally {
// 关闭sqlSession
sqlSession.close();
}
System.out.println(user);
}
会话工厂的代码很简单,就是:家在配置文件、创建会话工厂、通过会话操作数据库、关闭会话:
但是请注意第35行的参数。就是我们前面提到的namespace的test,是为了隔离sql而写的,这里体现的它的作用!
还有就是selectOne这两个参数各自的意义:第一个参数就是我们所说的“表名+mappe.xml”中定义的sql语句,其实就是一个statement.第二个参数就是sql语句需要传入的参数,也就是id
总结
以上所述是小编给大家介绍的MyBatis入门介绍,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!
# mybatis
# 入门
# Mybatis实战教程之入门到精通(经典)
# Java Mybatis框架入门基础教程
# MyBatis入门学习教程(一)-MyBatis快速入门
# Mybatis入门教程之新增、更新、删除功能
# Mybatis 开发注解快速入门
# mybatis原理概述入门教程
# MyBatis入门初体验之使用大全(2)
# 配置文件
# 加载
# 第一个
# 单条
# 第二个
# 可以看出
# 介绍一下
# 不加
# 小编
# 多条
# 时将
# 的是
# 都是
# 就会
# 连接池
# 是在
# 运行环境
# 我在
# 这种方法
# 就能
相关文章:
网站制作的步骤包括,正确网址格式怎么写?
在线流程图制作网站手机版,谁能推荐几个好的CG原画资源网站么?
网站设计制作企业有哪些,抖音官网主页怎么设置?
PHP正则匹配日期和时间(时间戳转换)的实例代码
网站制作难吗安全吗,做一个网站需要多久时间?
建站主机是否等同于虚拟主机?
建站之星CMS建站配置指南:模板选择与SEO优化技巧
,有什么在线背英语单词效率比较高的网站?
建站之星代理商如何保障技术支持与售后服务?
娃派WAP自助建站:免费模板+移动优化,快速打造专业网站
如何用y主机助手快速搭建网站?
网站制作价目表怎么做,珍爱网婚介费用多少?
如何高效搭建专业期货交易平台网站?
如何选择适配移动端的WAP自助建站平台?
如何快速使用云服务器搭建个人网站?
高防服务器:AI智能防御DDoS攻击与数据安全保障
小捣蛋自助建站系统:数据分析与安全设置双核驱动网站优化
济南网站建设制作公司,室内设计网站一般都有哪些功能?
公司网站制作需要多少钱,找人做公司网站需要多少钱?
子杰智能建站系统|零代码开发与AI生成SEO优化指南
详解一款开源免费的.NET文档操作组件DocX(.NET组件介绍之一)
建站之星各版本价格是多少?
如何通过IIS搭建网站并配置访问权限?
Python多线程使用规范_线程安全解析【教程】
简单实现Android文件上传
如何选择可靠的免备案建站服务器?
深圳企业网站制作设计,在深圳如何网上全流程注册公司?
广州网站制作的公司,现在专门做网站的公司有没有哪几家是比较好的,性价比高,模板也多的?
山东云建站价格为何差异显著?
C++如何使用std::optional?(处理可选值)
网站代码制作软件有哪些,如何生成自己网站的代码?
音响网站制作视频教程,隆霸音响官方网站?
怎么制作一个起泡网,水泡粪全漏粪育肥舍冬季氨气超过25ppm,可以有哪些措施降低舍内氨气水平?
网站制作知乎推荐,想做自己的网站用什么工具比较好?
在线教育网站制作平台,山西立德教育官网?
如何在宝塔面板中创建新站点?
如何正确选择百度移动适配建站域名?
建站之星如何取消后台验证码生成?
如何在景安服务器上快速搭建个人网站?
专业网站建设制作报价,网页设计制作要考什么证?
如何快速搭建二级域名独立网站?
如何在腾讯云服务器上快速搭建个人网站?
香港服务器租用每月最低只需15元?
宝塔面板创建网站无法访问?如何快速排查修复?
成都网站制作报价公司,成都工业用气开户费用?
专业商城网站制作公司有哪些,pi商城官网是哪个?
建站之星多图banner生成与模板自定义指南
北京营销型网站制作公司,可以用python做一个营销推广网站吗?
建站主机与服务器功能差异如何区分?
深圳网站制作平台,深圳市做网站好的公司有哪些?
*请认真填写需求信息,我们会在24小时内与您取得联系。