Mybatis框架入门

前言:

mybatis的前身是叫Ibatis ,阿帕奇组织下的。后来谷歌收购改名为 Mybatis。    (在Github 下可以找到该框架)


Mybatis是一个持久化框架 (跟数据库交互的框架)


原始jdbc  与数据库进行交互的过程繁琐,与数据库连接,获取Connection对象,编写预编译sql指令,设置参数,在执行sql指令,  封装结果

而后来出现的 jdbc工具:dbutis、jdbcTemplate 将这些过程封装,让过程更加简单。但还是有些问题  sql执行还是写在 java代码中,硬编码,高耦合,不推荐将sql指令写在java中,不便维护。


后来出现了与数据交互的框架:


hibernate 全自动的 orm  (对象关系映射) ,javabean对象和数据库记录字段一 一对应上
     hibernate框架会消除sql,内部暗箱操作(编写sql指令)。
     但想要自定义sql指令,还需要学习HQL(定制sql),太难了,这无疑增加了学习的负担。所以我们使用mybatis(#^.^#)。


Mybatis: 半自动框架,内部没有暗箱操作,mybatis将编写sql的过程单独提取出来,使sql和java代码分离,sql由开发人员编写。

 

 

mybatis的使用 (:可以参考mybatis的官方文档:https://mybatis.org/mybatis-3/zh/getting-started.html)

项目的结构图:

1.在Eclipse中 创建一个Meven项目:mybatis_Day01

2.pom.xml 导入所需要的依赖

<!-- Mybatis 框架 -->
<dependency>
  <groupId>org.mybatis</groupId>
  <artifactId>mybatis</artifactId>
  <version>3.4.6</version>
</dependency>

<!-- mysql的jdbc -->
<dependency>
  <groupId>mysql</groupId>
  <artifactId>mysql-connector-java</artifactId>
  <version>5.1.30</version>
</dependency>
  
<!-- 日志依赖 -->
<dependency>
  <groupId>log4j</groupId>
  <artifactId>log4j</artifactId>
  <version>1.2.17</version>
</dependency>
   
<!-- 单元测试  -->
<dependency>
  <groupId>junit</groupId>
  <artifactId>junit</artifactId>
  <version>4.12</version>
  <scope>test</scope>
</dependency>

3.编写数据表的 bean实体类、 操作表的Dao接口。

User 实体类

package com.mybatis.bean;

//User表的实体类
public class User {

  //成员变量属性名  建议和  数据库字段保持一致
  private Integer id;
  private String name;
  private Integer password;
  private Integer money;
  private String sex;
  
  @Override
  public String toString() {
	return "User [id=" + id + ", name=" + name + ", password=" + password + ", money=" + money + ", sex=" + sex
				+ "]";
  } 
  //...............以下省略掉 set/get 方法	
}

User表的Dao接口

package com.mybatis.dao;

import com.mybatis.bean.User;

/**
 * User表的 DAO接口
 * @author dell
 */
public interface UserMapper {
	
 //通过id查询User表中信息
 User findUserById(Integer id);

}

4.在src类路径下创建一个mybatis_config.xml (mybatis的全局配置文件)和  userMapper.xml (User的sql映射文件)

  mybatis_config.xml

<?xml version="1.0" encoding="UTF-8"?>

<!-- mybatis 框架的核心全局配置文件 -->

<!DOCTYPE configuration
  PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
  "http://mybatis.org/dtd/mybatis-3-config.dtd">
  
<configuration>

  <environments default="development">
    <environment id="development">
      <transactionManager type="JDBC"/>
      <!-- 配置数据源 -->
      <dataSource type="POOLED">
        <property name="driver" value="com.mysql.jdbc.Driver"/>
        <property name="url" value="jdbc:mysql:///test"/>
        <property name="username" value="root"/>
        <property name="password" value="19971011"/>
      </dataSource>
    </environment>
  </environments>
  
  <!-- 引入sql映射文件 -->
  <mappers>
  	<!-- 引入指定的sql映射文件   因为该文件在类路径下(与mybatis同一路径下,直接指定文件名) -->
    <mapper resource="userMapper.xml"/>
  </mappers>
  
</configuration>

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">
  
  <!-- 
  	User的SQL映射文件
  	该文件配置了执行的sql语句,以及查询出来的数据封装格式
  -->
  
<!-- namespace:名称空间(用于区别文件)  将命名空间置于合适的 Java 包命名空间之中  这样使代码更加整洁
	 使用User的Dao接口的包名类名,作为该xml的名称空间,使User的Dao接口与xml配置文件绑定
-->
<mapper namespace="com.mybatis.dao.UserMapper">

  <!--定义sql语句 :相当于对 UserMapper接口方法的实现  -->
  <!-- id名和返回值类型与 UserMapper接口 指定方法的一致 (该sql指令就是 UserDao接口中指定方法的实现)  -->
  <select id="findUserById" resultType="com.mybatis.bean.User">
  	select * from USER where id = #{id}  <!-- #{id} 会被解析为? 占位符 -->
  </select>
  
</mapper>

5.main方法演示

package com.mybatis.domain;

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;

import com.mybatis.bean.User;
import com.mybatis.dao.UserMapper;

public class Demo {
	
  public static void main(String[] args) throws IOException {
	/*
	 *	根据xml配置文件   (全局配置文件mybatis_config.xml)  创建 SqlSessionFactory对象
	 */
	String resource = "mybatis_config.xml";
	InputStream inputStream = Resources.getResourceAsStream(resource);
	SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
		
	/*
	 * 	通过工厂生产 SqlSession对象,SqlSession 用于执行已经映射好的sql语句
	 * 	Sqlsession代表和数据库的一次会话,用完之后就释放掉
	 */
	SqlSession session = sqlSessionFactory.openSession();
		

	//获取Dao接口的实现类对象
	UserMapper mapper = session.getMapper(UserMapper.class);
	//调用该接口的方法
	User u = mapper.findUserById(1);
	System.out.println(u.toString());
		
		
	/**
	  	这里可能会发生AbstractMethodError
	 	Method com/mysql/jdbc/PreparedStatement.isClosed()Z is abstract
		at com.mysql.jdbc.PreparedStatement.isClosed(PreparedStatement.java)
	
		导致这个异常的原因是 Mysql的jdbc 版本问题
	 */
	}
}

控制台输出:

User [id=1, name=tom, password=123456, money=1000, sex=man]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值