本人只是刚刚学习MyBatis,作为学习路程的记录,写的不好,不完善的地方请多多包涵;

  首先,先比较一下Hibernate和MyBatis两种框架之间的区别:

    两种都是ORM框架,但是Hibernate属于全自动化,而MaBatis则属于半自动化,也就是说Hibernate的SQL语句是会自动生产的,而MyBatis的话,需要在xml文件配置一个SQL的模板,这是全自动化和半自动化的含义;那么问题来了,为什么不用更方便的Hibernate呢?

    这是因为在一些特殊的情况下,Hibernate反而不好用了:

    有些数据来自现有的数据库,出于安全的考虑,只给出几条SQL语句或存储过程,具体表结构不予公开;

    开发规范要求,所有牵涉到业务逻辑部分的数据库操作,必须在数据库层由存储过程来实现;

    如果系统的数据处理量巨大,性能要求极为苛刻,而Hibernate自动生成的sql语句显然没有经过人工优化,不能高度优化;

    总结以上就是:出于安全和性能的考虑,单纯的全自动不能满足行业的开发,因此MyBatis应运而生;

    下面是MyBatis实现基本增删改查的基本步骤:  

    1,导入jar包:

    

    2,编写POJO:

      因为MyBatis的优化就是体现在以面对对象的编程机制去操纵数据库,所以,先要有一个POJO来映射相应数据库中的属性;     

package org.fkit.domain;

public class User {

	private Integer id;
private String name;
private String sex;
private Integer age;
public User(){
super();
}
public User(String name,String sex,Integer age){
super();
this.name = name;
this.sex = sex;
this.age = age;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
} }

    3,配置MyBatis连接的数据库的相关参数属性;

    这个地方就有个坑了,我调了一天的BUG,我们前面说过,MyBatis的优化就是体现在以面对对象的编程机制去操纵数据库,那么如何将这个POJO映射到MyBatis对应的数据库属性上呢?你需要这样一段代码:

     <typeAliases>
   <typeAlias alias="user" type="org.fkit.domain.User"/>
   </typeAliases>    
    同时,要按照"(properties?,settings?,typeAliases?,typeHandlers?,objectFactory?,objectWrapperFactory?,reflectorFactory?,plugins?,environments?,databaseIdProvider?,mappers?)".
    也就是说必须要先写settings标签之后,再写typeAliases标签;这是一个顺序的问题;
<?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>
<settings>
<setting name= "logImpl" value = "LOG4J"/>
</settings>
<typeAliases>
   <typeAlias alias="user" type="org.fkit.domain.User"/>
   </typeAliases>
<environments default="mysql">
<environment id="mysql">
<transactionManager type = "JDBC"/>
<dataSource type = "POOLED">
<property name = "driver" value="com.mysql.jdbc.Driver"/>
<property name = "url" value = "jdbc:mysql://127.0.0.1:3306/mybatis"/>
<property name = "username" value = "root"/>
<property name = "password" value = "986532"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource = "org/fkit/mapper/UserMapper.xml"/>
</mappers>
</configuration>

    4,建立SQL语句模板;

      前面提到,MyBatis的半自动化机制,就是要编写相应的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 = "org.fkit.mapper.UserMapper">
<insert id = "save" parameterType ="user" useGeneratedKeys = "true">
INSERT INTO TB_USER(name,sex,age) VALUES(#{name},#{sex},#{age})
</insert>
<select id = "selectUser" parameterType = "Integer" resultType = "user">
SELECT * FROM TB_USER WHERE id = #{id}
</select>
<update id = "modifyUser" parameterType = "user">
UPDATE TB_USER
SET name = #{name},sex = #{sex},age = #{age}
WHERE id = #{id}
</update>
<delete id = "removeUser" parameterType = "int">
delete from TB_USER WHERE id = #{id}
</delete>
</mapper>

      5,编写测试类

        做完上述配置之后,我们就可以开始做测试类来进行测试了。先上一段原始的;

package org.fkit.tst;

import java.io.InputStream;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.fkit.domain.User;
import org.fkit.factory.FKSqlSessionFactory; public class MyBatisTest { public static void main(String[] args) throws Exception{
InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
SqlSession session = sqlSessionFactory.openSession();
User user = new User("admin","男",22);
session.insert("org.fkit.mapper.UserMapper.save",user);
session.commit();
session.close();
}
}

      其中,SqlSession是MyBatis中作为操纵数据库的重要对象,相当于JDBC中的connection;而以上代码我们可以进行再封装;代码如下:

package org.fkit.factory;

import java.io.InputStream;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder; public class FKSqlSessionFactory { private static SqlSessionFactory sqlSessionFactory = null;
static{
try{
InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
}catch(Exception e){
e.printStackTrace();
}
}
public static SqlSession getSqlSession(){
return sqlSessionFactory.openSession();
}
public static SqlSessionFactory getSqlSessionFactory(){
return sqlSessionFactory;
}
}
package org.fkit.tst;

import java.io.InputStream;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.fkit.domain.User;
import org.fkit.factory.FKSqlSessionFactory; public class MyBatisTest { public static void main(String[] args) throws Exception{
SqlSession session = FKSqlSessionFactory.getSqlSession();
User user = new User("admin","男",22);
session.insert("org.fkit.mapper.UserMapper.save",user);
session.commit();
session.close();
}
}

      将读取配置文件的操作封装在一个Factory类中,这样就可以更加简便。

      6,顺便附上数据库表结构:

        

          

MyBatis入门一的更多相关文章

  1. MyBatis1:MyBatis入门

    MyBatis是什么 MyBatis是什么,MyBatis的jar包中有它的官方文档,文档是这么描述MyBatis的: MyBatis is a first class persistence fra ...

  2. mybatis入门基础(二)----原始dao的开发和mapper代理开发

    承接上一篇 mybatis入门基础(一) 看过上一篇的朋友,肯定可以看出,里面的MybatisService中存在大量的重复代码,看起来不是很清楚,但第一次那样写,是为了解mybatis的执行步骤,先 ...

  3. MyBatis入门基础(一)

    一:对原生态JDBC问题的总结 新项目要使用mybatis作为持久层框架,由于本人之前一直使用的Hibernate,对mybatis的用法实在欠缺,最近几天计划把mybatis学习一哈,特将学习笔记记 ...

  4. MyBatis入门案例、增删改查

    一.MyBatis入门案例: ①:引入jar包 ②:创建实体类 Dept,并进行封装 ③ 在Src下创建大配置mybatis-config.xml <?xml version="1.0 ...

  5. mybatis入门_mybatis基本原理以及入门程序

    一.传统jdbc存在的问题 1.创建数据库的连接存在大量的硬编码, 2.执行statement时存在硬编码. 3.频繁的开启和关闭数据库连接,会严重影响数据库的性能,浪费数据库的资源. 4.存在大量的 ...

  6. MyBatis入门学习教程-使用MyBatis对表执行CRUD操作

    上一篇MyBatis学习总结(一)--MyBatis快速入门中我们讲了如何使用Mybatis查询users表中的数据,算是对MyBatis有一个初步的入门了,今天讲解一下如何使用MyBatis对use ...

  7. MyBatis入门学习(二)

    在MyBatis入门学习(一)中我们完成了对MyBatis简要的介绍以及简单的入门小项目测试,主要完成对一个用户信息的查询.这一节我们主要来简要的介绍MyBatis框架的增删改查操作,加深对该框架的了 ...

  8. MyBatis入门学习(一)

    一.MyBatis入门简要介绍(百科) MyBatis 是支持普通 SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis 消除了几乎所有的JDBC代码和参数的手工设置以及结果集的检索.MyB ...

  9. MyBatis入门案例 增删改查

    一.MyBatis入门案例: ①:引入jar包 ②:创建实体类 Dept,并进行封装 ③ 在Src下创建大配置mybatis-config.xml <?xml version="1.0 ...

  10. MyBatis入门(五)---延时加载、缓存

    一.创建数据库 1.1.建立数据库 /* SQLyog Enterprise v12.09 (64 bit) MySQL - 5.7.9-log : Database - mybatis ****** ...

随机推荐

  1. TCP全连接队列和半连接队列已满之后的连接建立过程抓包分析[转]

    最近项目需要做单机100万长连接与高并发的服务器,我们开发完服务器以后,通过自己搭的高速压测框架压测服务端的时候,发生了奇怪的现象,就是服务端莫名其妙的少接收了连接,造成了数据包的丢失,通过网上查资料 ...

  2. lodash源码分析之baseFindIndex中的运算符优先级

    我悟出权力本来就是不讲理的--蟑螂就是海米:也悟出要造反,内心必须强大到足以承受任何后果才行. --北岛<城门开> 本文为读 lodash 源码的第十篇,后续文章会更新到这个仓库中,欢迎 ...

  3. 在线生成PDF的网站-HTML 转 PDF 在线

    http://pdf.df5d.com/   (服务器问题,演示暂停了,但是 下面介绍的组件还是可以使用的) 将前面用到的wkhtmltopdf用一个服务器程序集成在一起,接受一个URL参数,在生成一 ...

  4. ABP官方文档翻译 3.4 领域服务

    领域服务 介绍 IDomainService接口和DomainService类 示例 创建接口 服务实现 使用应用服务 一些探讨 为什么只有应用服务? 如何强制使用领域服务? 介绍 领域服务(或者在D ...

  5. 什么是SSL

    什么是SSL 简单来说,在我们使用的浏览器中都默认信任着全世界多个最权威的CA机构(证书颁发机构),如下图: 上图中,受信任的根证书颁发机构列表里的都是我们浏览器中默认信任的CA机构,我们只需要向他们 ...

  6. MySQL实现差集(Minus)和交集(Intersect)

    原文链接: http://www.linuxidc.com/Linux/2014-06/103551.htm MySQL没有实现Minus和Intersect功能,就像它也没有实现cube的功能一样. ...

  7. bzoj 4825: [Hnoi2017]单旋 [lct]

    4825: [Hnoi2017]单旋 题意:有趣的spaly hnoi2017刚出来我就去做,当时这题作死用了ett,调了5节课没做出来然后发现好像直接用lct就行了然后弃掉了... md用lct不知 ...

  8. BZOJ 3209: 花神的数论题 [数位DP]

    3209: 花神的数论题 题意:求\(1到n\le 10^{15}\)二进制1的个数的乘积,取模1e7+7 二进制最多50位,我们统计每种1的个数的数的个数,快速幂再乘起来就行了 裸数位DP..\(f ...

  9. BZOJ 2595: [Wc2008]游览计划 [DP 状压 斯坦纳树 spfa]【学习笔记】

    传送门 题意:略 论文 <SPFA算法的优化及应用> http://www.cnblogs.com/lazycal/p/bzoj-2595.html 本题的核心就是求斯坦纳树: Stein ...

  10. 使用angular/react/vue实现相同的面试题组件

    面试题要求如下所示 1.angular: <!DOCTYPE html><html lang="en"><head> <meta char ...