Mybatis开篇以及配置教程
MyBatis来源~:
MyBatis本是apache的一个开源的项目,原来称为iBatis,2010年这个项目由apache softwarefoundation迁移到了google code,并改名为MyBatis。MyBatis是支持普通SQL查询,存储过程和高级映射的优秀持久性框架,是一个SQL映射框架。MyBatis消除了几乎所有的JDBC代码。MyBatis使用简单的XML或注解用于配置和映射,将接口和JavaPOJOs(Plan Old Java Objects,普通的Java对象)映射成数据库中的记录。简单地说,MyBatis将SQL语句从程序里剥离出来,放到配置文件,并将查询结果和持久化类的属性通过配置文件做了映射,相对于HibernateORM框架,它属于一种“半自动化”的ORM实现!
MyBatis的优点以及使用场合!!
MyBatis小巧,简单易学,通过文档和源代码可以比较轻松掌握它的设计思路以及实现。其优点如下:
(1)简单且功能强大!通过SQL映射文件和SqlSession能够实现数据持久层的功能,与JDBC相比减少很多代码量!!
(2)开发猿能够完全为所欲为的控制所执行的SQL语句,尤其适用多表复杂查询!
(3)容易维护和修改。SQL语句写在了配置文件中,只要修改配置文件即可!
其缺点如下:
MyBatis属于半自动化框架的ORM,需要开发人员掌握SQL语句的编写。由于要写SQL语句,不同的数据库要重新修改SQL,因此MyBatis的数据库移植性不好。
MyBatis的适用场合:
如果不需要太多复杂的功能,而需要一个足够灵活的DAO层解决方案,或者对性能的要求很高,那么我介意使用MyBatis!
那么既然我们了解了它的适用场合也就应该了解一下它的不适用哪些场合:
(1)当希望对象的持久化对应用程序完全透明时,可以使用对象/映射方案,如hibernate。
(2)当数据库有移植需求,或者需要支持多种数据库时不要使用MyBatis。
(3)当应用程序需要完全动态的SQL时,如查询的字段都需要动态生成时不要使用MyBatis。
(4)当没有使用关系数据库时,或者使用的不是真正的关系数据库时不要使用MyBatis。
**************************************************************************************************************************
原理性的东西我们就介绍到这里吧,下面我们来使用MyBatis实现对数据库中的部门表进行增, 删, 改, 查;
第一步准备如下jar包!(jar 包下载地址我们可以去MyBatis的官网下载http://code.goole.com/p/mybatis这里我们推荐下载mybatis-3.2.2.zip)
第二步我们来编写与数据库交互的配置文件(名称可以取任意值,因为我们是专业的所以这里我们将其命名为mybatis-config.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">
<!-- 事务策略是JDBC -->
<transactionManager type="JDBC" />
<!-- 数据源的方式 POOLED -->
<dataSource type="POOLED">
<property name="driver" value="oracle.jdbc.OracleDriver" />
<property name="url" value="jdbc:oracle:thin:@localhost:1521:orcl" />
<property name="username" value="orcl" />
<property name="password" value="orcl" />
</dataSource>
</environment> </environments> <!--映射文件:描述某个实体和数据库表的对应关系 -->
<mappers>
<mapper resource="cn/happy/entity/Dept.xml" />
</mappers>
</configuration>
注意!这里要讲一下其中的集合常用的元素作用:
(1)environments元素:用于配置多个数据环境,这样可以映射多个数据库信息。采用default来指定默认使用哪个数据库环境。environment则是每个数据库环境的具体配置,包括连接信息和事务管理信息。
在MyBatis中有两种事务管理器类型(type="[JDBC|MANAGED]"):
JDBC:直接使用了JDBC控制事务。它依赖于从数据源得到的连接来管理事务范围。
MANAGED:MyBatis自己不负责控制事务,它会让容器来管理事务的整个生命周期(如通过Spring或JavaEE应用服务器)。
数据源类型有三种:UNPOOLED, POOLED, JNDI。
UNPOOLED:这个数据源的实现是每次被请求时简单打开和关闭连接。它有一点慢,这是对简单应用程序的一个很好选择,因为它不需要及时的连接。
POOLED:采用连接池以避免创建新的连接实例时必要的初始连接和认证时间。这是一种当前Web应用程序快速响应请求的很流行的方法。
JNDI:这个数据源的实现是为了使用如Spring或应用服务器这类的容器。容器可以集中或在外部配置数据源,MyBatis通过JNDI获取数据源。
(2)mappers元素:包含所有mapper的列表,告诉MyBatis到哪里去找SQL语句。Mapper主要是定义SQL映射文件。
第三步我们需要配置SQL映射文件,命名规范建议实体类名加Mapper.xml后缀这里我将其命名为DeptMapper.xml
<?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="cn.happy.entity.Dept">
<!-- 1.1 查询所有部门信息 -->
<select id="selectAllDept" resultType="cn.happy.entity.Dept">
<!-- 这里写的SQL,而不是HQL,SQL中的表名是不区分大小写的 -->
select * from dept
</select> <!-- 1.1 添加部门信息 -->
<insert id="insertDept" parameterType="cn.happy.entity.Dept"> insert into dept values(SEQ_Num.nextval,#{deptName})
</insert> <!-- 1.2删除信息 -->
<delete id="deleteDept" parameterType="cn.happy.entity.Dept"> delete from dept where deptNo=#{deptNo}
</delete>
<!-- 1.3修改信息 -->
<update id="updateDept" parameterType="cn.happy.entity.Dept">
update dept set deptName=#{deptName} where deptNo=#{deptNo}
</update> <!-- 1.4 模糊查询 含有市场的部门信息 -->
<select id="likeDept" parameterType="cn.happy.entity.Dept" resultType="cn.happy.entity.Dept">
select * from dept where deptName like '%${deptName}%'
</select>
</mapper>
这样就配置完毕了,最后我们只需创建测试类测试即可
public class Mybatis_Test {
SqlSession session;
@Before
//将开启session的方法提出
public void mybefore() throws IOException{
Reader reader = Resources.getResourceAsReader("MyBatis-config.xml");
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
SqlSessionFactory sql = builder.build(reader);
session = sql.openSession();
}
@Test
//查询所有部门的信息
public void selectAllDeptTest() throws IOException { List<Dept> selectList = session.selectList("selectAllDept");
for (Dept dept : selectList) {
System.out.println(dept);
} }
@Test
//根据编号修改部门信息
public void updateDeptTest(){
Dept dept=new Dept();
dept.setDeptNo(1);
dept.setDeptName("市场部"); int count = session.update("cn.happy.entity.Dept.updateDept",dept);
session.commit();
System.out.println(count+"update ok!");
session.close(); }
@Test
//删除一个部门
public void deleteDeptTest(){
Dept dept=new Dept();
dept.setDeptNo(1);
int count=session.delete("cn.happy.entity.Dept.deleteDept",dept);
session.commit();
System.out.println(count+"del ok!");
session.close();
}
@Test
//模糊查询部门信息 关键词为“财”
public void likeDeptTest(){
Dept dept=new Dept();
dept.setDeptName("财");
List<Dept> selectList=session.selectList("cn.happy.entity.Dept.likeDept",dept);
for (Dept dept2 : selectList) {
System.out.println(dept2);
}
}
@Test
//添加一个部门
public void insertDeptTest(){
Dept dept = new Dept();
dept.setDeptName("女神部");
int count = session.insert("cn.happy.entity.Dept.insertDept",dept);
session.commit();
System.out.println(count+"添加成功");
}
}
感兴趣的可以根据如上四个步骤去玩一把,下面内容会逐步更新!!!需要以上素材的可以私聊我 下期再见~~
Mybatis开篇以及配置教程的更多相关文章
- Spring+SpringMvc+Mybatis框架集成搭建教程
一.背景 最近有很多同学由于没有过SSM(Spring+SpringMvc+Mybatis , 以下简称SSM)框架的搭建的经历,所以在自己搭建SSM框架集成的时候,出现了这样或者那样的问题,很是苦恼 ...
- IDEA 初始配置教程
IDEA 初始配置教程 如果你是第一次使用 IDEA,或者对 IDEA 常用配置仍然不熟悉,那么本文就特别适合你. 本文只是根据我自己的使用经验来进行配置,不一定适合所有的情况,但是对你肯定会有帮助. ...
- Mybatis的核心配置
之前了解了Mybatis的基本用法,现在学习一下Mybatis框架中的核心对象以及映射文件和配置文件,来深入的了解这个框架. 1.Mybatis的核心对象 使用MyBatis框架时,主要涉及两个核心对 ...
- [转]Mybatis之TypeHandler使用教程
Mybatis之TypeHandler使用教程 https://blog.csdn.net/jokemqc/article/details/81326109 深入浅出Mybatis系列(五)---Ty ...
- (转)springMVC+mybatis+ehcache详细配置
一. Mybatis+Ehcache配置 为了提高MyBatis的性能,有时候我们需要加入缓存支持,目前用的比较多的缓存莫过于ehcache缓存了,ehcache性能强大,而且位各种应用都提供了解决方 ...
- MyBatis学习(一)、MyBatis简介与配置MyBatis+Spring+MySql
一.MyBatis简介与配置MyBatis+Spring+MySql 1.1MyBatis简介 MyBatis 是一个可以自定义SQL.存储过程和高级映射的持久层框架.MyBatis 摒除了大部分的J ...
- openvpn配置教程
openvpn配置教程 本文是为解决本地服器能从外网访问web页,从新改写(临摹) 烂泥:ubuntu 14.04搭建OpenVPN服务器这篇文章 腾讯云为服务器,本地服务器为客户端 一.服务器安装o ...
- VMware Workstation虚拟机中的Linux通过NAT模式共享上网配置教程
VMware Workstation虚拟机中的Linux通过NAT模式共享上网配置教程 在VMware Workstation虚拟机下面,Linux虚机要上网,一般是桥接模式,但我自己的电脑上网的环境 ...
- 百度在线编辑器UEditor(v1.3.6) .net环境下详细配置教程之更改图片和附件上传路径
本文是接上一篇博客,如果有疑问请先阅读上一篇:百度在线编辑器UEditor(v1.3.6) .net环境下详细配置教程 默认UEditor上传图片的路径是,编辑器包目录里面的net目录下 下面就演示如 ...
随机推荐
- JAVA基础知识之JDBC——ResultSet的滚动和更新(statement的额外参数)
ResultSet不仅可以内存中的一张二维表一样保存statement执行SQL的结果集,还能通过结果集修改DB的数据.ResultSetMetaData则可以用来获得ResultSet对象的相关信息 ...
- EntityFramework Core 学习笔记 —— 包含与排除类型
原文地址:https://docs.efproject.net/en/latest/modeling/included-types.html 在模型类中包含一种类型意味着 EF 拥有了这种类型的元数据 ...
- HDU 4048 Zhuge Liang's Stone Sentinel Maze
Zhuge Liang's Stone Sentinel Maze Time Limit: 10000/4000 MS (Java/Others) Memory Limit: 32768/327 ...
- [问题2015S06] 复旦高等代数 II(14级)每周一题(第七教学周)
[问题2015S06] 设 \(V\) 是数域 \(\mathbb{K}\) 上的 \(n\) 维线性空间, \(\varphi\) 是 \(V\) 上的线性变换. (1) 求证: 对任一非零向量 ...
- 在代码中调用gdb
转载:http://blog.csdn.net/hanchaoman/article/details/5583457 在SIGSEGV的handler中调用gdb, 命令gdb [exec file] ...
- IntelliJ IDEA中使用综合使用Maven和Struts2
在Intellij IDEA中手动使用Maven创建Web项目并引入Struts2 创建一个新的Maven项目 建好项目之后点击左下角的enable auto import 项目部署 在Moudule ...
- 【转载】CSS 伪类-:before和:after
:before和:after的作用就是在指定的元素内容(而不是元素本身)之前或者之后插入一个包含content属性指定内容的行内元素,最基本的用法如下: #example:before { conte ...
- Oracle存储过程-自定义数据类型,集合,遍历取值
摘要 Oracle存储过程,自定义数据类型,集合,遍历取值 目录[-] 0.前言 1.Packages 2.Packages bodies 3.输出结果 0.前言 在Oracle的存储过程中,可能会遇 ...
- Security » Authorization » 要求处理器中的依赖注入
Dependency Injection in requirement handlers¶ 30 of 32 people found this helpful Authorization handl ...
- Python抓取网页中的图片到本地
今天在网上找了个从网页中通过图片URL,抓取图片并保存到本地的例子: #!/usr/bin/env python # -*- coding:utf- -*- # Author: xixihuang # ...