一、mybatis介绍

是apache旗下的一个开源的顶级ORM框架(做dao层的操作)

开始叫ibatis在2010年经过升级后发布到google code上就改名为mybatis

定位:1.是一个做持久层操作的框架

2.是一个半自动的ORM框架

二、原生态的jdbc存在的问题

问题一:频繁的创建和销毁连接,造成了资源浪费,影响了系统的性能。

解决方案设想:连接池(c3p0、dbcp、阿里巴巴)

问题二:sql语句硬编码(写死了)

解决方案设想:将sql语句写入到mapper.xml文件中

问题三:sql语句中的参数硬编码

解决方案设想:将sql语句中参数写入到mapper.xml文件中

问题四:查询的结果返回的是一个结果集,而我们更希望返回是对象

解决方案设想:查询后自动返回对象

三、mybatis的原理(核心)

四、mybatis环境搭建

4.1、准备开发环境

1、创建测试项目,普通java项目或者是JavaWeb项目均可,如下图所示:

  

2、添加相应的jar包(mybatis的核心包+依赖jar包+mysql驱动包)

也要在src文件里添加log4j的配置文件,用于显示执行记录

   

3、创建数据库和表,针对MySQL数据库

 请自己按照实体类(pojo)进行编写数据库

4.2、使用MyBatis查询表中的数据的配置

  1、添加Mybatis的配置文件SqlMapConfig.xml

  在src目录下创建一个SqlMapConfig.xml文件,如下图所示:

  

  SqlMapConfig.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> <properties resource="basedao.properties"></properties>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC" />
<dataSource type="POOLED">
<property name="driver" value="${driver}" />
<property name="url" value="${url}" />
<property name="username" value="${user}" />
<property name="password" value="${password}" />
</dataSource>
</environment>
</environments>
<!-- 加载mapper.xml文件 -->
<mappers>
<package name="org.maven.mapper"/>
</mappers>
</configuration>

  将basedao.properties文件放到src目录下:

  

2、定义表所对应的实体类,如下图所示:

  

  User类的代码如下:

 package org.java.pojo;

 /**
* 1.请各位在入门的时候实体类中字段名和数据库中表的列名对应(不区分大小写)--讲解输出映射的时候解释
* 2.在ssm框架开发过程中,所有的日期类型请使用java.util.Date;因为这样才能在springMVC中参数绑定
*/
public class User {
private Integer id;
private String name;
private String password;
//GET,set请自行添加
}

  3、定义操作users表的sql映射文件userMapper.xml

  创建一个包,专门用于存放sql映射文件,在包中创建一个userMapper.xml文件,如下图所示:

  

  userMapper.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">
<!-- namespace:名字空间
如果在ibatis的开发中可以随便写,但是在mybatis的开发中有特殊含义,必须为对应接口的全限定名
-->
<mapper namespace="org.java.mapper.UserMapper"> </mapper>

  4、在SqlMapConfig.xml文件中加载userMapper.xml文件

四、mybatis入门程序

1、在userMapper.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">
<!-- namespace:名字空间
如果在ibatis的开发中可以随便写,但是在mybatis的开发中有特殊含义,必须为对应接口的全限定名
-->
<mapper namespace="org.java.mapper.UserMapper">
<!-- 1.根据主键查询
select:用来查询的statement(标签)
id:用来唯一的标识该mapper里面的statement(标签)
parameterType:输入参数的类型
#{}:占位符,如果输入参数类型为简单类型,那么#{可以写任意的名字}
resultType:返回结果的类型(即返回类型的全限定名)
-->
<select id="getById" parameterType="Integer" resultType="org.java.pojo.User">
SELECT * FROM USER WHERE id= #{abc}
<!-- 根据姓名做模糊查询 要用占位符是:${},如果查询是简单类型,必须为${value} 但存在sql注入问题-->
</select>
<select id="getByName" parameterType="String" resultType="org.java.pojo.User">
SELECT * FROM USER WHERE name like '%${name}%'
</select>
</mapper>

2.在对应的接口类里添加对应的方法:

package org.java.mapper;

import java.util.List;
import org.java.pojo.User; public interface UserMapper {
/*
* 方法名必须和对应的xml里statement标签id名一致
* 输入参数类型和返回类型也要和标签里的一致
*/
User getById(Integer id);
//根据姓名做模糊查询
List<User> getByName(String name); }

3.使用junit进行测试

package org.java.mapper;

import static org.junit.Assert.*;
import java.util.List;
import org.apache.ibatis.session.SqlSession;
import org.java.pojo.User;
import org.java.tools.myUtils;
import org.junit.Before;
import org.junit.Test; public class UserMapperTest {
SqlSession sqlSession =null;
UserMapper userMapper=null;
@Before
//执行任何方法时先执行该方法
public void upset() throws Exception{ sqlSession=myUtils.getsqlsession();
userMapper=sqlSession.getMapper(UserMapper.class);
} @Test
public void testGetById() {
System.out.println(userMapper.getById(1).getName());
} @Test
public void testGetByName() {
List<User> list=userMapper.getByName("a");
System.out.println(list.size());
} }

测试结果

mybatis之入门的更多相关文章

  1. MyBatis学习总结(一)——MyBatis快速入门

    一.Mybatis介绍 MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装.MyBatis可以 ...

  2. MyBatis快速入门

    一.Mybatis介绍 MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装.MyBatis可以 ...

  3. MyBatis学习总结(一)——MyBatis快速入门(转载)

    本文转载自http://www.cnblogs.com/jpf-java/p/6013537.html MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis消除了 ...

  4. MyBatis入门学习教程-MyBatis快速入门

    一.Mybatis介绍 MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装.MyBatis可以 ...

  5. MyBatis学习总结(一)——MyBatis快速入门

    一.Mybatis介绍 MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装.MyBatis可以 ...

  6. 【转】MyBatis学习总结(一)——MyBatis快速入门

    [转]MyBatis学习总结(一)——MyBatis快速入门 一.Mybatis介绍 MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis消除了几乎所有的JDBC ...

  7. mybatis快速入门(六)

    前面mybatis的入门程序基本上都写完了,就看大家的灵活运用了,今天来吧前面的整合一下封装一个公共的BaseDao 只需要把前面的改造下然后创建一个BaseDao的接口,其它的继承BaseDao接口 ...

  8. MyBatis学习总结-MyBatis快速入门的系列教程

    MyBatis学习总结-MyBatis快速入门的系列教程 [MyBatis]MyBatis 使用教程 [MyBatis]MyBatis XML配置 [MyBatis]MyBatis XML映射文件 [ ...

  9. MyBatis基础入门《二十》动态SQL(foreach)

    MyBatis基础入门<二十>动态SQL(foreach) 1. 迭代一个集合,通常用于in条件 2. 属性 > item > index > collection : ...

  10. MyBatis基础入门《十九》动态SQL(set,trim)

    MyBatis基础入门<十九>动态SQL(set,trim) 描述: 1. 问题 : 更新用户表数据时,若某个参数为null时,会导致更新错误 2. 分析: 正确结果: 若某个参数为nul ...

随机推荐

  1. CentOS7--配置时间和日期

    CentOS7提供三个命令行工具,可用于配置和显示有关系统日期和时间的信息. timedatectl:Linux 7中的新增功能,也是systemd其中的一部分. date:系统时钟,也成为软件时钟, ...

  2. Pycharm按装

    1.python 官方 2.下载完成后点击exe 安装 3.按装完成后在cmd中输入 python 1.如果显示python版本 那么就安装成功 2.如果出现"python"不是外 ...

  3. React Native(七)——react-native-elements

    配合React native使用的UI库:https://react-native-training.github.io/react-native-elements/ 1. 新建项目:http://w ...

  4. 怎样用Windows10全屏流畅运行红色警戒2

    https://jingyan.baidu.com/article/9113f81b1cb7f22b3214c724.html jpg 转 rar 

  5. vs必备快捷键整理

    .格式化代码:Ctrl+E,D .格式化部分代码:选中代码->Ctrl+K,F.或者Ctrl+E,F. .折叠cs文件所有方法:Ctrl+M,O .打开或折叠所有代码:Ctrl+M,L (打开或 ...

  6. 【Python3】 django2.0 url 跳转设置

    python: 3.6.4 django :  2.0 在创建应用时候.我是把 urls.py 分开了.所以在设置url跳转时候.要修改成如下模式 1  父 urls.py 里边要加上命名空间 2   ...

  7. Git学习之Git 暂存区

    ============================= 修改文件后是否可以直接提交 ============================ (1) 向文件中追加一行内容  $ echo &quo ...

  8. 【转】strlen源码

    strlen源码剖析 学习高效编程的有效途径之一就是阅读高手写的源代码,CRT(C/C++ Runtime Library)作为底层的函数库,实现必然高效.恰好手中就有glibc和VC的CRT源代码, ...

  9. 题目1102:最小面积子矩阵(暴力求解&最大连续子序列)

    题目链接:http://ac.jobdu.com/problem.php?pid=1102 详解链接:https://github.com/zpfbuaa/JobduInCPlusPlus 参考代码: ...

  10. Word插入htm文件导致文本域动态增加的一个问题

    受html标签影响,超链接也会被变成文本域(HYPERLINK).当遍历文本域进行替换之前如果预存了文本域的数量(Count/Length/etc.)将导致遗漏.