一、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. Linux命令之乐--iconv

    用法: 实际应用: 批量转换文件编码: [root@wls12c PCK]$ for tfile in `ls -l|awk '{print $9}'`;do echo "iconv -f ...

  2. linux下复制文件报cp: omitting directory `XXX'

    错误操作:这个错误是因为在linux下我使用cp复制一个文件夹A到另一个目录下时报错cp: omitting directory `XXX' 原因:文件夹A中还有子目录文件,所以linux不允许直接复 ...

  3. Python学习(22):模块

    转自 http://www.cnblogs.com/BeginMan/p/3183656.html 一.模块基础 1.模块 自我包含,且有组织的代码片段就是模块 模块是Pyhon最高级别的程序组织单元 ...

  4. 【Phalapi2.0】 如何使用 source 通过 header 传参数

    做接口服务时候.有些场景会使用header 来传递参数. 查看官网文档说明 数据来源 source指定当前单个参数的数据来源,可以是post.get.cookie.server.request.hea ...

  5. Esper学习之十一:EPL语法(七)

    上一篇说到了EPL如何访问关系型数据库这种数据源,实际上别的数据源,比如:webservice.分布式缓存.非关系型数据库等等,Esper提供了统一的数据访问接口.然后今天会讲解如何创建另外一种事件类 ...

  6. Qt编写带频谱的音乐播放器

    之前有个项目需要将音频文件的频谱显示出来,想了很多办法,后面发现fmod这个好东西,还是跨平台的,就一个头文件+一个库文件就行,简单小巧功能强大,人家做的真牛逼.为了不卡住界面,采用了多线程处理. 可 ...

  7. echarts - 特殊需求实现代码汇总之【饼图】篇

    2018-07-24 15:36:43 起 - 饼图单项不同颜色的设置 效果图: 实现: 说明: 其实很简单,就是设置全局的color属性即可.color属性可以是一套数组,里边的样式以字符串格式设置 ...

  8. sencha touch list更新单行数据

    http://www.cnblogs.com/mlzs/p/3317570.html 如此章所说,点击按钮需要实时更新视图 操作代码如下: onTasteUp: function (list, rec ...

  9. java.lang.NoClassDefFoundError: Could not initialize class xxx 原因

    一.问题及原因 程序里有个工具类,主要是调用它的静态方法来发送mq. 调用场景如下: 结果这两天报了个错: java.lang.NoClassDefFoundError: Could not init ...

  10. sort与asort与ksort区别

    sort只依据值从小到大排序,键值不参与排序 asort依据值排序,键值参与排序 ksort依据键值排序,值参与排序 sort只依据值从小到大排序,键值不参与排序. 例 <?php $arr=a ...