(四)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 ...
随机推荐
- C# 计算时间日期
System.DateTime datetime = System.DateTime.Now.AddSeconds(fixtime); // fixtime 是往后的秒数 : datetime是现在时 ...
- CodeForces 1098F. Ж-function
题目简述:给定字符串$s[1 \dots n](n \leq 2 \times 10^5)$,以及$Q \leq 2 \times 10^5$个询问,每个询问有两个参数$1 \leq l \leq r ...
- 性能测试之Jmeter学习(三)
一.Jmeter执行顺序规则: 元件执行顺序的规则很简单,在同一作用域名范围内,测试计划中的元件按照如下顺序执行. (1)配置元件(config elements ) (2)前置处理程序(Per-pr ...
- SSE2介绍及其简单用法举例
http://blog.csdn.net/fengbingchun/article/details/18515241
- D3.js(v3)+react 制作 一个带坐标轴与比例尺的折线图
本章使用路径生成器来绘制一个折线图.以中国和日本的GDP数据为例: //数据 var dataList = [ { coountry : "china", gdp : [ [2 ...
- React 从入门到进阶之路(七)
之前的文章我们介绍了 React 表单详解 约束性和非约束性组件 input text checkbox radio select textarea 以及获取表单的内容.接下来我们将介绍 Rea ...
- uoj#283. 直径拆除鸡(构造)
传送门 好神的构造题 vfk巨巨的题解 //minamoto #include<bits/stdc++.h> #define R register #define fp(i,a,b) fo ...
- day04 Calendar类
- 51Nod 1873 初中的算术
大神的字符串快速幂 #include <iostream> #include <string> #include <algorithm> #include < ...
- VLAN-1-VLAN配置
f0/12和f0/24不在列表中,因为它们动态地成为trunk,支持多个vlan “unsup”意为这个2950交换机不支持FDDI和TR 首先 switchport mode ...