浅谈Mybatis(一)
一、MyBatis引言
1、基本概念
MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis 。2013年11月迁移到Github。MyBatis是一个持久层框架,完成是对数据库的访问和操作。
2、优点
解决了JDBC访问数据库过程中存在的问题,他是对原有JDBC技术的封装。
a、大量的代码冗余。
b、手工处理ORM。
c、没有对访问数据进行优化(没有cache)。
二、一个简单的Mybatis程序
1、环境搭建
a、导入核心jar包,导入第三方依赖jar包,导入对应数据库的驱动jar包。
b、引入配置文件
(1)log4j.properties(日志配置文件)放置在src根下
(2)mybatis-config.xml位置随意。
(3)mapper文件(实现DAO接口)位置随意。
c、初始化配置
mybatis-config.xml的文件配置

主要分为两大部分:1、数据库连接的相关参数。2、Mapper文件的注册。
ps、别名typeAlias

在配置文件中设置别名之后,在mapper文件中会舒服很多。
2、MyBatis核心API
a、Resource
作用:读取MyBatis相关配置文件,打开IO。
建议:因为频繁打开IO会很占用资源,所以建议一次性通过IO读取所有需要的数据。
b、SqlSessionFactory
作用:通过SqlSessionFactory这个工厂创建SqlSession。
特点:该类是一个重量级资源,并且线程安全,应该保证每一个应用只创建一个。
c、SqlSession
作用:(1)根据程序员写的mapper文件,自动创建mapper文件所对应的java类(DAO接口的实现类)
(2)SqlSession内部封装Connection对象(一一对应的关系)。
(3)SqlSession控制事务。
3、Mybatis开发步骤
a、创建表table。
b、创建对应的实体类entity。
d、创建DAO接口。
e、配置Mapper文件做DAO层的实现。
<mapper namespace="xxxx.mybatis.UserDao">
<select id="queryUserById" parameterType="int" resultType="xxxx.mybatis.User">
select id,name,password,birthday
from t_user
where id = #{id}
</select>
</mapper>
ps、namespace="xxxx.mybatis.UserDao"----->要实现的DAO接口的全限定名。
id="queryUserById"----->DAO接口中要实现的方法名。
parameterType="int"----->方法参数类型(可省略)。
resultType="xxxx.mybatis.User"----->sql语句所查询结果所对应的entity类。
#{id}----->方法传递的参数。
f、mapper文件的注册(在mybatis-config.xml配置)
<mappers>
<mapper resource="xxxx/mybatis/resources/UserDaoMapper.xml">
</mappers>
ps、resource="xxxxxx"------->mapper文件的路径。
g、通过API运行mybatis
//1、通过Resource读取MyBatis的配置文件(路径要写对)
InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
//2、创建SqlSessionFactory
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
//3、创建SqlSession
SqlSession sqlSession = sqlSessionFactory.openSession();
//4、通过sqlSession获取DAO的实现类
UserDao userDao = sqlSession.getMapper(UserDao.class);
//5、编码
User user = userDao.queryUserById(1);
三、单表操作的Mapper文件配置问题
1、集合类型的返回值(如List<User>)
<select id="queryAllUsers" resultType="xxxx.mybaits.User">
select * from t_user
</select>
//resultType属性设置为集合中的元素类型即可
2、参数绑定
当DAO方法中只存在一个参数时,在mapper文件#{}中填写任意内容都可以识别。
当DAO方法中存在多个参数时,有以下两种解决方案:
a、以起始自0的下标#{0}#{1}#{2}来区分
java类:
public interface UserDao{
public User queryUser(String name,String password);
}
mapper文件:
<mapper namespace="xxxxx.UserDao">
<select id="queryUser" resultType="User">
select * from t_user where name =#{0} and password = #{1}
</select>
</mapper>
这样书写,mybatis便会顺序识别,自动将name跟#{0}匹配,password跟#{1}匹配。
b、通过注解来进行绑定(推荐)
java类:
public interface UserDao{
public User queryUser(@Param("name")String name,@Param("password")String password);
}
mapper文件:
<mapper namespace="xxxxx.UserDao">
<select id="queryUser" resultType="User">
select * from t_user where name =#{name} and password = #{password}
</select>
</mapper>
这种写法类似于给参数起了一个名字,在mapper文件里直接通过所起的名字来对应。这种方法更加灵活。
浅谈Mybatis(一)的更多相关文章
- 浅谈mybatis中的#和$的区别
1. #将传入的数据都当成一个字符串,会对自动传入的数据加一个双引号.如:order by #user_id#,如果传入的值是111,那么解析成sql时的值为order by "111&qu ...
- 浅谈Mybatis(三)
一.动态SQL 1.sql片段 解决sql语句的冗余代码问题. <sql id="SELECT_T_USER"> select id,name,password,bir ...
- 浅谈 Mybatis中的 ${ } 和 #{ }的区别
好了,真正做开发也差不多一年了.一直都是看别人的博客,自己懒得写,而且也不会写博客,今天就开始慢慢的练习一下写博客吧.前段时间刚好在公司遇到这样的问题. 一.举例说明 select * from us ...
- 浅谈mybatis如何半自动化解耦
在JAVA发展过程中,涌现出一系列的ORM框架,JPA,Hibernate,Mybatis和Spring jdbc,本系列,将来研究Mybatis. 通过研究mybatis源码,可将mybatis的大 ...
- 浅谈Mybatis连接原理
众所周知数据库连接的过程,但是最近面试的人(菜面菜),都说用的SSM框架,但是我问了一下,mybatis是怎么连接上mysql的,基本上都会说:配置好的,直接用了,今天我来抛砖引玉一下,欢迎拍砖! 什 ...
- 浅谈MyBatis缓存
在谈论MyBatis的缓存之前,我们先说说它的延迟加载,所谓延迟加载, resultMap中的association和collection标签具有延迟加载的功能.延迟加载的意思是说,在关联查询时,利用 ...
- 浅谈Mybatis通用Mapper使用方法_java - JAVA
文章来源:嗨学网 敏而好学论坛www.piaodoo.com 欢迎大家相互学习 对单表进行增删改查是项目中不可避免的需求,Mybatis的通用Mapper插件使这些操作变得简单 添加maven依赖 在 ...
- 浅谈mybatis如何半自动化解耦和ORM实现
在JAVA发展过程中,涌现出一系列的ORM框架,JPA,Hibernate,Mybatis和Spring jdbc,本系列,将来研究Mybatis. 通过研究mybatis源码,可将mybatis的大 ...
- 浅谈Mybatis持久化框架在Spring、SSM、SpringBoot整合的演进及简化过程
前言 最近开始了SpringBoot相关知识的学习,作为为目前比较流行.用的比较广的Spring框架,是每一个Java学习者及从业者都会接触到一个知识点.作为Spring框架项目,肯定少不了与数据库持 ...
随机推荐
- Mac 下 Chrome 快捷键大全
1. 标签页和窗口快捷键 ⌘-N 打开新窗口. ⌘-T 打开新标签页. ⌘-Shift-N 在隐身模式下打开新窗口. 按 ⌘-O,然后选择文件. 在 Chrome 浏览器中打开计算机中的文件. 按住 ...
- [ACM] hdu 1003 Max Sum(最大子段和模型)
Max Sum Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Su ...
- Windows消息传递函数SendMessage参数属性
Windows消息传递函数SendMessage参数属性 转载于:http://www.cr173.com/html/5605_1.html Windows是一个消息驱动式系统,SendMessage ...
- .net通用权限框架B/S (三)--MODEL层(1)
1.新建c#类库 2.安装配置好entity frame5 3.新建的类库项目上右键"添加--新建项",选择AOD.NET实体数据模型 4.设置数据库连接, 5.选择建好的表 6. ...
- Nutch2.3分布执行过程中Mongodb中数据的变化
inject $ nutch inject /opt/nutch/runtime/local/urls/ > db.stats() { "db" : "nutch& ...
- 20个命令行工具监控 Linux 系统性能
对于每个系统管理员或网络管理员来说,每天要监控和调试 Linux 系统性能问题都是非常困难的工作.我已经有5年 Linux 管理员的工作经历,知道如何监控系统使其保持正常运行.为此,我们编写了对于 L ...
- mysql 5.6.20的安装、配置服务、设置编码格式
一.安装 安装环境 系统:Window 32 版本:Mysql 5.6.20 1. 首先从官网上http://dev.mysql.com/downloads/mysql/ ...
- Android Studio Module疑问
ERROR: APK path is not specified for module From your existing project, go to 'File' -> 'Project ...
- 让2个并列的div根据内容自动保持同等高度js
有左右2个并列的div,2个div都不能限定高度.左div为导航,右div为内容.如何能让左div块自动获得和右div块相等的高度? 同时,也有网友提问到“如果右块高度比左块低,会不会导致左块的内容被 ...
- javascript 中字符串之比较
<script type="text/javascript"> var string1="apple"; var string2="Ban ...