什么是框架,简单的来说框架就是一个程序的半成品,而我们就是的工作就是根据我们的工作需要将其完善。MyBatis框架的作用就是将我们使用JDBC操作数据库的过程移交给MyBatis,让它来帮我们完成这些复杂,繁琐的(主要是没什么意义)冗余的操作!

在了解MyBatis数据库的前提下,我们首先有必要先了解一下什么是ORM和持久化

持久化:是程序数据,在瞬时状态(内存)向持久状态(数据库)之间转化的过程称为持久化。让对象的生命周期超越所使用对象的程序的运行期。

ORM(Object Relational Mapping):编写程序时以面向对象的方式处理数据(对象)

                    保存数据时以关系型数据库方式储存数据(表)

MyBatis的核心对象

1:SqlSessionFactoryBuilder :利用XML文件或者Java编码获得资源来构建SqlSessionFactory,通过它可以构建多个SqlSessionFactory,它的作用域仅仅只是在方法上,一旦创建了SqlSessionFactory他就没什么用了(用过即丢)

2:SqlSessionFactory:用来创建SqlSession的,每次访问数据库,我们都要通过SqlSessionFactory来创建SqlSession。它的作用域时应用期间,也就是程序开始,一直到服务器关闭。而且对于同一个数据库我们只需要一个SqlSessionFactory,否则,每次创建的SqlSessionFactory都会打开更多的资源,那么连接资源很快就会被耗尽,于是SqlSessionFactory是唯一的(使用单例模式)

3:SqlSession:SqlSession是一个会话,相当于JDBC中的一个Connection对象,它的生命周期应该是在请求数据库处理事务的过程中,且SqlSession是线程非安全的对象,涉及多线程时要特别的当心,每次创建的SqlSession对象都要及时的关闭它,它长期存在就会使数据库连接池的活动资源减少,对系统性能影响很大!

MyBatis的核心配置文件

 案例(在这里我使用的开发工具是idea)

1、导入MyBatis的依赖和连接mysql(JDBC)的依赖

 <!--MyBatis的jar文件-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.6</version>
</dependency> <dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.32</version>
</dependency>

2、创建表(自行创建)

3、在resource目录下创建configuration.xml文件

 <?xml version="1.0" encoding="UTF-8"?>
<!-- xml文件的头文件,起到对文件的约束作用(例如:必须存在哪些节点) -->
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<!--根节点,不解释。-->
<configuration>
<!--指向JDBC连接数据库的核心配置文件(4大连接参数)-->
<properties resource="database.properties"/>
<!--对MyBatis进行全局配置-->
<settings>
<!--懒加载,全局设置懒加载,默认为true-->
<setting name="lazyLoadingEnabled" value="false"/>
<!--MyBatis对resultMao的映射级别 FULL为最高级别,PARTIAL为默认级别,NONE为最低-->
<setting name="autoMappingBehavior" value="FULL"/>
</settings>
<!--为实体类做全局的配置—设置别名,在后续的小配置文件中实体类可以直接写别名,在这里是类名为别名-->
<typeAliases>
<package name="com.cn.entity"/>
</typeAliases>
<!--这个是MyBatis插件的配置,这里配置的是分页的插件,就是自动在查询语句中添加limit字句-->
<plugins>
<plugin interceptor="com.github.pagehelper.PageHelper">
<property name="dialect" value="mysql"></property>
<property name="rowBoundsWithCount" value="true"/>
<property name="resonable" value="false"/>
</plugin>
</plugins>
<!--一下不做解释,有点JDBC基础的都看得懂-->
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"></transactionManager>
<dataSource type="POOLED">
<property name="driver" value="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
</dataSource>
</environment>
</environments>
<!--指向小配置文件,这种配置方式是写配置文件所在包的全包名,使用mapper节点的话就是文件的相对路径url就是绝对路径
还要再最前边加上file:///-->
<mappers>
<!--<mapper resource="com/cmy/mapper/UserMapper.xml"></mapper>-->
<!--<mapper url="file:///E:/com/cmy/mapper/UserMapper.xml"></mapper>-->
<package name="com.cn.dao"/>
</mappers>
</configuration>

5、dao接口,操作数据库的方法

 package com.cn.dao;

 import com.cn.entity.Tplemp;
import org.apache.ibatis.annotations.Insert; import java.util.List; public interface EmpDao {
List<Tplemp>getAll();
void delEmp(int id);
void addEmp(Tplemp tplemp);
void modify(Tplemp tplemp);
}

6、小配置文件

 <?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">
<!--根节点不做解释,namespace属性中为接口的全限定类名-->
<mapper namespace="com.cn.dao.EmpDao">
<!--结果集查询操作时使用,该节点下的id随意,type为返回值类型-->
<resultMap id="empMap" type="Tplemp">
<!--多对一中的一的类型,这个不配的话,MyBatis没法装配,看需要一般是联表查询时使用-->
<association property="tbldept" javaType="Tbldept"/>
</resultMap>
<!--以下操作就是一些增删改的核心了-->
<!--id为dao接口中的方法名(必须)resultMap是上边resultMap的id值,如果不需要联表,可以不适用resultMap
节点,直接再select标签中使用resultType指定返回值类型,当然,resultMap和resultType不能同时出现-->
<select id="getAll" resultMap="empMap">
SELECT * FROM `tplemp` emp INNER JOIN `tbldept` dept ON emp.`depid`=dept.`deptid`
</select>
<!--id同理,parameterType是方法中入参的类型,#{id}实体类中属性名,#起到预编译的作用如果是$就是拼接sql不推荐-->
<delete id="delEmp" parameterType="int">
delete from tplemp where empid=#{id}
</delete>
<insert id="addEmp" parameterType="Tplemp">
INSERT INTO `tplemp` VALUE(DEFAULT,#{ename},#{egender},#{depid})
</insert>
<!--以下是动态SQl,下一章节介绍-->
<update id="modify" parameterType="Tplemp">
UPDATE `tplemp`
<set>
<if test="ename!=null">
ename=#{ename},
</if>
<if test="egender!=-1">
egender=#{egender},
</if>
<if test="depid!=-1">
depid=#{depid},
</if>
</set>
where empid=#{empid}
</update>
</mapper>

7、创建SqlSessionUtil工具类

package com.cn.util;

import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder; import java.io.InputStream; public class SqlSessionUtil {
private static SqlSessionFactory factory;
public static SqlSession getSqlSession(){
if (factory==null){
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
InputStream is = SqlSessionUtil.class.getResourceAsStream("/configuration.xml");
factory=builder.build(is);
}
return factory.openSession();
}
}

8、创建测试类(在这里我使用的是Junit做的测试)

package com.cn.test;

import com.cn.dao.EmpDao;
import com.cn.dao.EmpDao2;
import com.cn.entity.Tplemp;
import com.cn.util.SqlSessionUtil;
import com.github.pagehelper.PageHelper;
import org.apache.ibatis.session.SqlSession;
import org.junit.After;
import org.junit.Before;
import org.junit.Test; import java.util.List; public class empTest2 {
SqlSession session;
EmpDao2 dao;
@Before
public void before(){
session= SqlSessionUtil.getSqlSession();//获取SqlSession
dao=session.getMapper(EmpDao2.class);//通过session中的动态代理创建接口的实现类的对象
/*有这个优越的条件我们就不需要写实现类了,统统都交给容器其处理*/
}
@Test
public void test(){
PageHelper.startPage(1,3,true);
/*上一句感兴趣的可以查一下*/
List<Tplemp> all = dao.getAll();
for (Tplemp item:all){
System.out.println(item.getEname());
}
}
@After
public void after(){
session.commit();//提交事务
session.close();//关闭连接
}
}

9、执行效果图

执行时需要使用log4j记录日志才能看到MyBatis创建的sql语句

log4j的依赖

     <dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.16</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.21</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-core</artifactId>
<version>1.2.3</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.2.3</version>
</dependency>

log4j的配置文件

 ### direct log messages to stdout 记录日志信息到控制台###
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n ### direct messages to file log.txt 记录日志信息到硬盘上的文件中 ###
log4j.appender.file=org.apache.log4j.FileAppender
log4j.appender.file.File=e:/log4j/log.txt
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n
### set log levels - for more verbose logging change 'info' to 'debug' ###
log4j.logger.dao=debug, stdout,file

 

框架之MyBatis的更多相关文章

  1. Java框架篇---Mybatis 入门

    一.Mybatis介绍 MyBatis是一款一流的支持自定义SQL.存储过程和高级映射的持久化框架.MyBatis几乎消除了所有的JDBC代码,也基本不需要手工去设置参数和获取检索结果.MyBatis ...

  2. 【持久化框架】Mybatis与Hibernate的详细对比

        前言 这篇博文我们重点分析一下Mybatis与hibernate的区别,当然在前面的博文中我们已经深入的研究了Mybatis和Hibernate的原理. Mybatis [持久化框架]Myba ...

  3. 持久层框架之MyBatis

    1.mybatis框架介绍: MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并 ...

  4. 【持久化框架】Mybatis简介与原理

    从这篇博文开始我们学习一下Mybatis,希望大家提出宝贵的建议. 什么是Mybatis MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache softwar ...

  5. Java框架之Mybatis(一)

    一.Mybatis 简介 Mybatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改 ...

  6. JAVA-ORM框架整理➣Mybatis操作MySQL

    概述 在Java中,对数据库操作的框架很多,上节概述Hibernate的简单使用,这里简单整理Mybatis的使用.Mybatis也是简单的数据库操作框架,通过IOC方式,获取操作类对象,进行数据的操 ...

  7. 【持久化框架】Mybatis与Hibernate的详细对比(转发)

    前言 这篇博文我们重点分析一下Mybatis与Hibernate的区别,当然在前面的博文中我们已经深入的研究了Mybatis和Hibernate的原理. Mybatis [持久化框架]Mybatis简 ...

  8. 整合Spring框架和MyBatis框架

    ------------------------siwuxie095                                 整合 Spring 框架和 MyBatis 框架         ...

  9. JavaORM框架之Mybatis篇(Ibatis)

    欢迎查看Java开发之上帝之眼系列教程,如果您正在为Java后端庞大的体系所困扰,如果您正在为各种繁出不穷的技术和各种框架所迷茫,那么本系列文章将带您窥探Java庞大的体系.本系列教程希望您能站在上帝 ...

  10. 【推荐】微服务分布式企业框架Springmvc+mybatis+shiro+Dubbo+ZooKeeper+Redis

              摘要: 主要定位于互联网企业架构,已内置企业信息化系统的基础功能和高效的代码生成工具,包括:系统权限组件.数据权限组件.数据字典组件.核心工具 组件.视图操作组件.工作流组件.代码 ...

随机推荐

  1. CAR-T|Single cell plan|Extracellular RNA|

    生物医疗大数据 安吉丽娜朱莉发现抑癌基因事件,BRCA突变与乳腺癌关联. 个体化测序商品23 and me 多组学数据研究:eg:太空和地球双胞胎发现生化指标差不多. 研究模式和工业模式相结合. 研究 ...

  2. Cisco连接失败问题处理

    连接公司的VPN时软件一直安装不上,试了几种方法,在此总结. 原文链接:http://www.itsystemadmin.com/error-27850-unable-to-manage-networ ...

  3. 计蒜客 数独(DFS)

    蒜头君今天突然开始还念童年了,想回忆回忆童年.他记得自己小时候,有一个很火的游戏叫做数独.便开始来了一局紧张而又刺激的高阶数独.蒜头君做完发现没有正解,不知道对不对? 不知道聪明的你能否给出一个标准答 ...

  4. 吴裕雄--天生自然Linux操作系统:Linux 系统目录结构

    登录系统后,在当前命令窗口下输入命令: ls / 你会看到如下图所示: 树状目录结构: 以下是对这些目录的解释: /bin:bin是Binary的缩写, 这个目录存放着最经常使用的命令. /boot: ...

  5. 吴裕雄--天生自然 PHP开发学习:函数

    <?php function writeName() { echo "Kai Jim Refsnes"; } echo "My name is "; wr ...

  6. oracle学习(二)pl/sql基础

    pl/sql组成:DDL DML DCL pl/sql特点: SQL&PL/SQL编译器集成PL/SQL,支持SQL所有范围的语法 支持CASE语句和表达式 继承和动态方法释放 类型进化.属性 ...

  7. 1017A.The Rank#排名

    题目出处:http://codeforces.com/problemset/problem/1017/A #include<iostream> using namespace std; i ...

  8. typescript--介绍ts

    TypeScript 介绍 TypeScript 是什么 TypeScript 是 JavaScript 的强类型版本.然后在编译期去掉类型和特有语法,生成纯粹的 JavaScript 代码.由于最终 ...

  9. mysql引擎与物理文件

    SELECT VERSION();show GLOBAL VARIABLES like '%PARTITION%';-- 查看分区情况 show GLOBAL VARIABLES like '%dat ...

  10. 600E - Lomsat gelral(找子树多颜色问题)(入门)

    题:https://codeforces.com/problemset/problem/600/E 题意:一棵树有n个结点,每个结点都是一种颜色,每个颜色有一个编号,求树中每个子树的最多的颜色编号的和 ...