(四)mybatis之mybatis初了解
前言:终于到mybatis啦!
Mybatis
前文有提到,Hibernate采用的是全表映射的方式,而这方式恰恰使得性能变得较差(https://www.cnblogs.com/NYfor2018/p/9092810.html )。为了解决Hibernate的不足,一个半自动映射的框架Mybaits应运而生,之所以称之为半自动,是因为它需要手工匹配提供POJO、SQL和映射关系,而全表映射的Hibernate只需要提供POJO和映射关系即可。
在Mybatis中,需要自己编写SQL,虽然比Hibernate配置多,但是Mybatis可以配置动态SQL,这就解决了上文提到的,在Hibernate中根据表明动态修改的问题。同时也可以优化SQL,通过配置决定你的SQL映射规则,也能支持存储过程,所以对于以下复杂的和需要优化性能SQL的查询会更加方便。而且,在注意一些规则的基础上,Mybatis可以完成自动映射功能,而无需再写任何的映射规则。
① 这个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">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/mybatis"/>
<property name="userName" value="root"/>
<property name="password" value=""/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="com\entity\user.xml"/>
<!-- 这里是映射实体类的映射 -->
</mappers>
</configuration>
这个就是Mybatis的基础配置文件。
② 这个xml文件,主要是给出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">
<mapper namespace="com.mapper.UserMapper">
<select id="getUser" parameterType="id" resultType="com.entity.User">
select id,userName from user_info where id=#{id}
<!-- select标签中,parameterType表示传入作为查找条件的参数是id,而且返回的数据的格式是User -->
<!-- 标签中间的是SQL语句,#{id}是待传参数 -->
</select>
</mapper>
这里使用的SQL列名和POJO的属性名保持一致,因为我们给出了SQL但是并没有给出映射规则,而Mybatis在这个时候会自动提供映射规则,所以可以省去配置映射规则的工作。
③ 再者,我们还需要一个接口。注意这仅仅是一个接口,无需实现类。
public interface UserMapper{
public User getUser(int id);
}
这里的接口是用于Mybatis映射并操作数据库用的。对应的是②中mapper标签的namespace变量。
④ 为了使用Mybati,我们还需要建立SqlSessionFactory。
public class MyBatisUtil{
private static SqlSessionFactory sqlSessionFactory = null;
public static SqlSessionFactory getSqlSessionFactory(){
InputStream inputStream = null;
if(sqlSessionFactory==null){
try{
String resource = "mybatis_config.xml";
//引入数据库配置资源
sqlSessionFactory = new SqlSessionFactoryBuilder().build(Resources.getResourceAsStream(resource));
//用数据库配置的资源作为依据,创建SqlSessionFactory
}catch(Exception ex){
System.err.println(ex.getMessage());
ex.printStackTrack();
}
}
return sqlSessionFactory;
}
}
应用Mybatis之前的,引用数据库的配置文件,以达到连接到数据库,并且可以使用Mybatis来操作数据。
⑤ 用Mybatis实现JDBC的功能操作数据的功能(可参考JDBC篇的例子:https://www.cnblogs.com/NYfor2018/p/9088254.html )
public class MyBatisExample{
public static void main(String[] args){
SqlSession sqlSession = null;
try{
sqlSession = MyBatisUtil.getSqlSessionFactory().openSession();
//通过MyBatisUtil配置好的SessionFactory生产Session
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
User user = userMapper.getUser(1);
System.err.println("userName =>"+user.getUserName());
}finally{
sqlSession.close();
}
}
}
这样便完成了Mybatis的代码编写工作,SQL和映射规则都在XML里面进行了分离,而Mybatis更为灵活。既可以自由书写SQL,定义映射规则。此外,Mybatis提供接口编程的映射只需要一个接口和映射文件便可以运行。
(四)mybatis之mybatis初了解的更多相关文章
- mybatis 学习笔记(四):mybatis 和 spring 的整合
mybatis 学习笔记(四):mybatis 和 spring 的整合 尝试一下整合 mybatis 和 spring. 思路 spring通过单例方式管理SqlSessionFactory. sp ...
- (转)SpringMVC学习(四)——Spring、MyBatis和SpringMVC的整合
http://blog.csdn.net/yerenyuan_pku/article/details/72231763 之前我整合了Spring和MyBatis这两个框架,不会的可以看我的文章MyBa ...
- springboot学习四:整合mybatis
在application.properties加入配置 ## Mybatis 配置 mybatis.typeAliasesPackage=org.spring.springboot.domain my ...
- 【Mybatis】MyBatis之Sql配置文件的使用(四)
上一章[Mybatis]MyBatis对表执行CRUD操作(三),已经讲了基本操作,本章介绍Sql配置文件中常用功能 1.插入返回主键 2.参数值的获取方式 3.resultMap使用 插入返回主键 ...
- 【转】Mybatis学习---MyBatis知识、原始Dao开发和mapper代理开发
[原文]https://www.toutiao.com/i6594610137560777223/ 一.什么是MyBatis MyBatis 是一款优秀的持久层框架,它支持定制化 SQL.存储过程以及 ...
- MyBatis -01- 初识 MyBatis + MyBatis 环境搭建
MyBatis -01- 初识 MyBatis + MyBatis 环境搭建 MyBatis 本是 apache 的一个开源项目 iBatis(iBATIS = "internet" ...
- Mybatis学习---Mybatis分页插件 - PageHelper
1. Mybatis分页插件 - PageHelper说明 如果你也在用Mybatis,建议尝试该分页插件,这个一定是最方便使用的分页插件. 该插件目前支持Oracle,Mysql,MariaDB,S ...
- 【MyBatis】MyBatis 入门
MyBatis 入门 文章源码 软件框架 软件框架伴随着软件工程的发展而出现,所谓的软件框架,是提取了特定领域的软件的共性部分所形成的软件体系,它并不是一个成熟的软件,更像是一个半成品.开发者在框架之 ...
- Hello Mybatis 02 mybatis generator
接着上一篇文章通过Mybatis完成了一个User的CRUD的功能之后,这篇开始还需要建立一个Blog类,这样就可以模拟一个简单的微博平台的数据库了. 数据库准备 首先我们,还是需要在数据库中新建一个 ...
- 【Mybatis】MyBatis之动态SQL(六)
MyBatis 的强大特性之一便是它的动态 SQL,本章介绍动态 SQL 查看本章,请先阅读[Mybatis]MyBatis对表执行CRUD操作(三). 本例表结构 CREATE TABLE `emp ...
随机推荐
- [转]windows10 1703 鼠标右键打开命令提示符cmd
https://answers.microsoft.com/zh-hans/windows/forum/windows_10-performance/windows10-1703/8bdfdfea-4 ...
- 【Data structure & Algorithm】把二元查找树转变成排序的双向链表
把二元查找树转变成排序的双向链表 题目:输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表,要求不能创建任何新节点,只调整指针指向. 比如将二元查找树 10 / \ 6 ...
- Flutter实战视频-移动电商-30.列表页_商品列表UI界面布局
30.列表页_商品列表UI界面布局 小程序里面的布局方式 小程序的图片上这里使用的是warp布局,因为首页里面火爆专区,已经用过了warp来布局了. 所以这里我们没有必要再讲一遍,这里我们使用List ...
- TP5实现签到功能
基于tp5 模型的一个签到功能: 由于存储所有的签到日期数据库会非常庞大,所以签到日期只存储近三个月的. 具体功能: 1.记录最近一次的签到时间 2.每次签到都会添加15积分 3.有连续签到的记录 C ...
- lightoj 1085【离散化+树状数组】
题意: 求所有的上升子序列种数: 思路: 我想先离散化一下,然后用树状数组维护一下. 最终答案就是sum(n) ? 卧槽,好像是:然后就过了.. #include <bits/stdc++.h& ...
- lightoj 1027【数学概率】
#include <bits/stdc++.h> using namespace std; typedef long long LL; const int N=1e2+10; int ma ...
- CodeForces 653A【水】
sort一发,去重 #include<cstdio> #include<iostream> #include<queue> #include<string.h ...
- 安装MySQL出现1045错误
安装MySQL出现1045错误 一.运行环境 MySQL mysql-5.1.26-rc-win32 操作系统:Windows 7 X64 二.问题描述 安装MySQL过程中会涉及对root密码的设置 ...
- 正向渲染路径细节 Forward Rendering Path Details
http://www.ceeger.com/Components/RenderTech-ForwardRendering.html This page describes details of For ...
- [Xcode 实际操作]一、博主领进门-(13)在控制台的几种打印输出语句和po命令
目录:[Swift]Xcode实际操作 本文将演几种在控制台输出日志的方式. 在项目导航区,打开视图控制器的代码文件[ViewController.swift] import UIKit class ...