mybatis之入门

一、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之入门的更多相关文章
- MyBatis学习总结(一)——MyBatis快速入门
一.Mybatis介绍 MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装.MyBatis可以 ...
- MyBatis快速入门
一.Mybatis介绍 MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装.MyBatis可以 ...
- MyBatis学习总结(一)——MyBatis快速入门(转载)
本文转载自http://www.cnblogs.com/jpf-java/p/6013537.html MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis消除了 ...
- MyBatis入门学习教程-MyBatis快速入门
一.Mybatis介绍 MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装.MyBatis可以 ...
- MyBatis学习总结(一)——MyBatis快速入门
一.Mybatis介绍 MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装.MyBatis可以 ...
- 【转】MyBatis学习总结(一)——MyBatis快速入门
[转]MyBatis学习总结(一)——MyBatis快速入门 一.Mybatis介绍 MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis消除了几乎所有的JDBC ...
- mybatis快速入门(六)
前面mybatis的入门程序基本上都写完了,就看大家的灵活运用了,今天来吧前面的整合一下封装一个公共的BaseDao 只需要把前面的改造下然后创建一个BaseDao的接口,其它的继承BaseDao接口 ...
- MyBatis学习总结-MyBatis快速入门的系列教程
MyBatis学习总结-MyBatis快速入门的系列教程 [MyBatis]MyBatis 使用教程 [MyBatis]MyBatis XML配置 [MyBatis]MyBatis XML映射文件 [ ...
- MyBatis基础入门《二十》动态SQL(foreach)
MyBatis基础入门<二十>动态SQL(foreach) 1. 迭代一个集合,通常用于in条件 2. 属性 > item > index > collection : ...
- MyBatis基础入门《十九》动态SQL(set,trim)
MyBatis基础入门<十九>动态SQL(set,trim) 描述: 1. 问题 : 更新用户表数据时,若某个参数为null时,会导致更新错误 2. 分析: 正确结果: 若某个参数为nul ...
随机推荐
- CentOS7--配置时间和日期
CentOS7提供三个命令行工具,可用于配置和显示有关系统日期和时间的信息. timedatectl:Linux 7中的新增功能,也是systemd其中的一部分. date:系统时钟,也成为软件时钟, ...
- Pycharm按装
1.python 官方 2.下载完成后点击exe 安装 3.按装完成后在cmd中输入 python 1.如果显示python版本 那么就安装成功 2.如果出现"python"不是外 ...
- React Native(七)——react-native-elements
配合React native使用的UI库:https://react-native-training.github.io/react-native-elements/ 1. 新建项目:http://w ...
- 怎样用Windows10全屏流畅运行红色警戒2
https://jingyan.baidu.com/article/9113f81b1cb7f22b3214c724.html jpg 转 rar
- vs必备快捷键整理
.格式化代码:Ctrl+E,D .格式化部分代码:选中代码->Ctrl+K,F.或者Ctrl+E,F. .折叠cs文件所有方法:Ctrl+M,O .打开或折叠所有代码:Ctrl+M,L (打开或 ...
- 【Python3】 django2.0 url 跳转设置
python: 3.6.4 django : 2.0 在创建应用时候.我是把 urls.py 分开了.所以在设置url跳转时候.要修改成如下模式 1 父 urls.py 里边要加上命名空间 2 ...
- Git学习之Git 暂存区
============================= 修改文件后是否可以直接提交 ============================ (1) 向文件中追加一行内容 $ echo &quo ...
- 【转】strlen源码
strlen源码剖析 学习高效编程的有效途径之一就是阅读高手写的源代码,CRT(C/C++ Runtime Library)作为底层的函数库,实现必然高效.恰好手中就有glibc和VC的CRT源代码, ...
- 题目1102:最小面积子矩阵(暴力求解&最大连续子序列)
题目链接:http://ac.jobdu.com/problem.php?pid=1102 详解链接:https://github.com/zpfbuaa/JobduInCPlusPlus 参考代码: ...
- Word插入htm文件导致文本域动态增加的一个问题
受html标签影响,超链接也会被变成文本域(HYPERLINK).当遍历文本域进行替换之前如果预存了文本域的数量(Count/Length/etc.)将导致遗漏.