Mybatis 入门学习教程一
生命不止 折腾不止,本章就是从零基础接触mybatis 写给跟我一样懵懂可爱的小白,希望和大家一起进步。
1.传统jdbc开发问题
- 在创建连接时存在硬编码。
- 在执行statement时存在硬编码。
- 频繁开启和关闭数据库连接,会造成数据库性能下降问题。
2.初识Mybatis
2.1关于mybatis的认识
- mybatis 就是一个封装来jdbc的持久层框架,它和hibernate都属 于ORM框架 ,但是具体说,hibernate 是一个完全的ORM 框架,而mybatis 是一个不完全的orm框架
- mybatis 本身让程序员只关注sql本身,不需要去关注如何连接和创建、statement的创建等操作。
- mybatis 会将输入参数、输出结果进行映射。
2.2 mybatis原理
2.2.1全局配置文件SqlMapConfig.xml
全局配置文件(配置数据源、事务运行等信息)
2.2.2映射文件
映射文件是关执行statement的相关信息,包括sql语句、输入参数和输出结果
2.2.3 执行过程
* 1. 配置文件*—->>
* 2. SqlSessionFactory* (会话工厂) 作用:产生会话 —>>
* 3. sqlSession* 作用:它是一个面向程序员的接口,程序员通过该接口可以对数据库进行增删改查方法 该接口有一个默认的实现:defaultsqlSession类 —->>
* 4. executor*(执行器) sqlsession 本身不能直接操作数据库需要通过executor接口来真正操作数据库 该接口有连个实现:基本执行器、缓存执行器(默认) —–>>
* 5. mappedStatement* 作用:封装了执行statement时的信息, 包括sql语句、输入参数 、输出结果。(输入输出类型:简单类型 pojo hashmap ) —>>
* 6. 数据库*
3.下载Mybatis
mybatis 代码由github.com托管 下载地址: http://github.com/mybatis/mybatis-3/releases
解压后如图:
4简单案例及配置mybatis
本案例就是通过使用Mybatis 来 查询用户表里的一条记录
4.1 配置环境
确保你的电脑已经配有java环境 和 有一款ide 我使用的是myeclipse
4.2建工程导包
首先要新建工程在工程目录下新建一个与src 同级别的folder 分别命名 config ,并将文件夹加入buildpath的豪华套餐中(为了获取资源须加入buildpath)之后导入mybatis 核心包 (mybatis-3.4.1)和 依赖包(lib目录下) 到项目中
4.3配置xml文件,创建java类
4.3.1配置全局文件SqlMapConfig.xml 文件
在config 下创建一个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"><!-- 注意这儿为 config.dtd -->
<configuration>
<!-- 环境配置 与spring整合,该信息由spring来管理-->
<environments default="development">
<environment id="development">
<!-- 配置jdbc事物控制,由mybatis进行管理 -->
<transactionManager type="JDBC"/>
<!-- 配置数据源 ,采用mybatis连接池 -->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/mybatis1db?useUnicode=true&characterEncoding=utf-8"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
</dataSource>
</environment>
</environments>
<!-- 加载映射文件 -->
<mappers>
<mapper resource="User.xml"/>
</mappers>
</configuration>
4.3.2配置映射文件
比如说要实现一个查询用户的User.xml 在config下新建一个User.xml (这种命名规范是由ibatis遗留下来的 ibatis是Mybatis前身)。
<?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:命名空间,对statement的信息进行分类管理 -->
<!-- 注意mapper代理时,它具有特殊及重要的作用 -->
<mapper namespace="com.mybatis1.example.MybatisTest">
<!-- 根据用户ID来查询用户信息 返回类型为User类型 -->
<!-- select:表示一个MappedStatement对象-->
<!-- id: statement的唯一标示 -->
<!-- #{}:表示一个占位符 ?-->
<!-- #{id}:里边的id表示输入参数的参数名称,如果该参数是简单类型,那么#{ } 里边可以任意写,pojo类型不可以任意写-->
<!-- select * from USER where id =#{ } -->
<select id="selectId" resultType="com.mybatis1.pojo.User">
select * from USER where id = #{id}
</select>
</mapper>
4.3.3创建java类
在src目录下新建 User.java 和 MybatisTest .java 类 如图
User.java 是一个pojo 也就是一个javabean 。 MybatisTest.java是测试类,里边写一个方法用单元测试看执行结果。
User.java
package com.mybatis1.pojo;
public class User {
private int id ;
private String uname ;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getUname() {
return uname;
}
public void setUname(String uname) {
this.uname = uname;
}
@Override
public String toString() {
// TODO Auto-generated method stub
return "id:"+id+"uname:"+uname;
}
}
MybatisTest.java
package com.mybatis1.example;
import java.io.IOException;
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.junit.Test;
public class MybatisTest {
@Test
public void findUserByIdTest() throws IOException
{
String resource ="SqlMapConfig.xml" ;
//读取配置文件
InputStream is =Resources.getResourceAsStream(resource) ;
//使用SqlSessionFactory这个SqlSessionFactory的实现类来创建sqlsessionFactory
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is) ;
// 创建 SqlSession
SqlSession sqlSession = sqlSessionFactory.openSession() ;
//调用SqlSession的增删改差的方法
//第一个参数为statement的唯一标示, 第二个为查找条件的参数 这里查找 id 为1
com.mybatis1.pojo.User user= sqlSession.selectOne("com.mybatis1.example.MybatisTest.selectId",1) ;
//输出查询用户的结果。
System.out.println(user.toString());
}
}
到此mybatis就准备好了 接着准备一下数据库,数据库都是事先准备好的因为不是重点所以我最后再搞。
CREATE DATABASE mybatis1db ;
USE mybatis1db ;
CREATE TABLE USER(
id INT(5) NOT NULL AUTO_INCREMENT,
uname CHAR(10) NOT NULL,
PRIMARY KEY(id)
);
INSERT INTO USER(uname) VALUES("shaoduo") ;
INSERT INTO USER(uname) VALUES("linxiongcheng") ;
INSERT INTO USER(uname) VALUES("linbingxian") ;
INSERT INTO USER(uname) VALUES("gongshihang") ;
INSERT INTO USER(uname) VALUES("sunxingouba") ;
INSERT INTO USER(uname) VALUES("aaaa") ;
SELECT * FROM USER ;
最后测试一下 直接在MybatisTest 的方法右击run as Junit Test 然后控制台就有了输出信息。
通过使用Mybatis 查询数据库中的一条记录 就是本案例的过程,写的比较仓促,有问题的话希望大家指出。