(四)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 ...
随机推荐
- Ubuntu 下编译Android 源代码
1.配置JDK 1.6 或者1.7(看情况配置,有的Android版本不能在1.7下运行) 2.配置环境:终端:(CTRL+ALT+T) $ sudo apt-get install git gnup ...
- Kafka入门之生产者消费者测试
目录: kafka启动脚本以及关闭脚本 1. 同一个生产者同一个Topic,两个相同的消费者相同的Group 2. 同一个生产者同一个Topic,两个消费者不同Group 3. 两个生产者同一个Top ...
- WordCount作业提交到FileInputFormat类中split切分算法和host选择算法过程源码分析
参考 FileInputFormat类中split切分算法和host选择算法介绍 以及 Hadoop2.6.0的FileInputFormat的任务切分原理分析(即如何控制FileInputForm ...
- opencv MatExpr MatOp
opencv提供了很多Mat的操作,其中涉及到两个重要的类:MatOp和MatExpr C++: MatExpr abs(const Mat& m) C++: void absdiff(Inp ...
- c++中的友元重载
1 语法 返回值类型 operator 运算符名称(形参列表) { 重载实体 } --------->operator和运算符名称在一起构造成新的函数名 2 案例 #include <io ...
- Identity Server 4 原理和实战(完结)_Authorization Code Flow 实例
Code在Oauth2.0和OpenId Connect里面分别叫做不同的名字 OAuth只介绍了如何授权.没有介绍如何身份认证. OpenId Connect:既规定了怎么授权,也规定了怎么身份认证 ...
- E20180605-hm
arbitrary adj. 乱; 随意的,任性的,随心所欲的; 主观的,武断的; 霸道的,专制的,专横的,独断独行的; session n. 开会,会议; (法庭的) 开庭; 会期,学期; (进行某 ...
- 已有项目 iPhoneX 适配
一.Assets 文件图片管理下的 LaunchImage 添加 iOS8.0 and latter 一项,并放一张 1125*2436 的LaunchPage 到对应的位置上. 二.有关 iPhon ...
- 2014-7-7 NOIP模拟赛(图论)
1.无线通讯网(wireless.pas/cpp/c) [题目描述] 国防部计划用无线网络连接若干个边防哨所.2种不同的通讯技术用来搭建无线网络:每个边防哨所都要配备无线电收发器:有一些哨所还可以增配 ...
- Spring Cloud:使用Ribbon实现负载均衡详解(下)
在上一篇文章(Spring Cloud:使用Ribbon实现负载均衡详解(上))中,我对 Ribbon 做了一个介绍,Ribbon 可以实现直接通过服务名称对服务进行访问.这一篇文章我详细分析一下如何 ...