一、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. nmap 中的idle scan

    http://www.offensive-security.com/metasploit-unleashed/Port_Scanning http://blog.csdn.net/dong976209 ...

  2. 使用 CSV 文件存储

    将爬取到的数据以 CSV 文件形式存储: import csv import requests req = requests.get("http://www.baidu.com/" ...

  3. Struts2(一)基本配置

    一.Struts2概述 1.什么是Struts2? Struts2以WebWork为核心,采用拦截器的机制来处理用户的请求,这样使得业务逻辑控制器能够和ServletAPI脱离开来. 2.工作原理 当 ...

  4. cp自动创建层级结构的例子

    一个拷贝命令的技巧,不仅拷贝文件,而且拷贝目录结构.记录下来. *拷贝的时候,自动创建参数中源文件的路径:#cp --parents parentdir1/parentdir2/sourcefile ...

  5. 【cs229-Lecture12】K-means算法

    上课内容: 无监督学习: K-means聚类算法 混合高斯模型 jensen不等式(用于推导出EM算法的一般形式) EM(Expectation Maximization)算法(最大期望算法) K-m ...

  6. ubuntu 重启网络方法--通过杀死进程重启网络

    重启网络方法(通过杀死进程方式,达到网络重启) zh@zh:~$sudo NetworkManager restart //查看进程idNetworkManager 已正运行(pid 10254)zh ...

  7. 为android编译libsocket的脚本

    #!/bin/bash U32=0 #编译64位arm时 U32=0   编译32位arm时 U32=1 其他参数不需要变动 TARGET=android-24 HOST=darwin-x86_64 ...

  8. Mysql命令行导入sql数据

    mysqldump  是在  操作系统命令行下运行的,不是在 MySQL 命令行下运行的. 登陆数据库: 登陆本地mysql : mysql -h localhost -u root -p123456 ...

  9. backface-visibility 属性

    图片img加了backface-visibility 属性, 图片变清晰, 原因不明 a,img{ backface-visibility:hidden; -webkit-backface-visib ...

  10. WORD Application.Documents.Open函数返回null的一种解决方法

    DCOM Config Setting for "Microsoft Office Word 97 - 2003 Document" 内部配置一切正常,但调用Application ...