Mybatis框架(一):从基层项目开启认知

都说Mybatis是比较简单的框架,那我就把它当成高级框架突破口,进去康康。

在之前项目中,使用JDBC连接Mysql数据库时,都是直接创建一个类,但现在走到了框架这一步,就改变了这一做法。

Mybatis框架简介:

MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis 。2013年11月迁移到Github。

MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Ordinary Java Object,普通的 Java对象)映射成数据库中的记录。

身为SSM中的一员,操作数据库(同三层架构中的Dao层)的工作就交由此框架处理

从下载到配置

Mybatis 3.4.1版本,下载自GitHub开源社区https://github.com/mybatis/mybatis-3/releases?after=mybatis-3.4.2

下载之后解压可以看到这样的文件夹(pdf为官方文档,本片后续操作都是参照文档所写
在这里插入图片描述
新建Java项目,然后导包就像这样(JDBC的包别忘了导入),随后build path
在这里插入图片描述

项目搭建

如果只有导包可是做不了什么操作的,关键在项目的搭建,从上面简介中的一句:MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Ordinary Java Object,普通的 Java对象)映射成数据库中的记录。,可以看出需要编写XML文件。
依照官方文档写出两个XML:一个全局,一个映射
全局mybatis.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>
   <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://localhost:3306/testJDBC"/>        
               <property name="username" value="root"/>        
               <property name="password" value="123456"/>
           </dataSource>    
       </environment>  
    </environments> 
    <!-- 映射 -->
     <mappers>
         <mapper resource="UserMapper.xml"/>  
     </mappers> 
</configuration>

接下来编写mybatis.xml最后mapper中的映射文件UserMapper.xml:
相关参数:namespace名称空间;id唯一标识;resuleType返回值类型-设置成封装的bean;#{id}从参数中取出id

<?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"> 
<mapper namespace="com.mybatis.test">  
  <select id="selectUser" resultType="com.mybatis.bean.UserBean">    
    select * from user where uid = #{id}  
  </select> 
</mapper>

有了这两个xml文件,就可以开始编写Java代码

开始编写

首先编写一个和JavaBean,成员与数据库对应,构造一个 toString() 方法即可使用

编写一个Java类用以实际操作,两个方法如下

//获取SqlSessionFactory
public static SqlSessionFactory getSqlSessionFactory() throws IOException {
		// TODO Auto-generated method stub
		String resource = "mybatis.xml"; 
		InputStream inputStream = Resources.getResourceAsStream(resource); 
		return new SqlSessionFactoryBuilder().build(inputStream);
	}
	
	public static void test01() throws IOException {
		// TODO Auto-generated method stub
		SqlSessionFactory sqlSessionFactory = getSqlSessionFactory();
		//用于执行sql
		SqlSession session=sqlSessionFactory.openSession();
		//传入uid为 1
		UserBean user=session.selectOne("org.mybatis.UserMapper.selectUser", 1);
		System.out.println(user);
		session.close();
	}

执行test01()方法即可,查看控制台看到

UserBean [uid=1, uname=yang, upwd=123, regtime=1999-11-04 00:00:00.0]

接口式编程

简介中的接口,依照官方文档可以编写出
首先创建一个Java interface,提供传入 uid 返回UserBean对象的方法

import com.mybatis.bean.UserBean;

public interface UserMapper {
	public UserBean getUser(int uid);
}

联想到之前的映射XML文件UserMapper.xml是对于类的编写,所以现在需要改写两处,将接口与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"> 
<mapper namespace="com.mybatis.dao.UserMapper">  
<!--
	namespace:接口式编程不能随意命名应该是全类名
	#{id}从参数中取出id
	public UserBean getUser(int uid); #修改唯一标识完成绑定id="getUser"
-->
  <select id="getUser" resultType="com.mybatis.bean.UserBean">    
    select * from user where uid = #{id}  
  </select> 
</mapper>

完了之后呢测试方法也要重写,test02() 就像这样

public static void test02() throws IOException {
		SqlSessionFactory sqlSessionFactory = getSqlSessionFactory();
		SqlSession session=sqlSessionFactory.openSession();
		//获取接口的实现对象
		//实际上是mybatis创建的代理对象执行的操作
		UserMapper mapper=session.getMapper(UserMapper.class);
		UserBean user=mapper.getUser(1);
		System.out.println(mapper.getClass());
		System.out.println(user);
		session.close();
	}

考虑到是接口,这里特意打印了一下==mapper.getClass() 在控制台看到一串神秘代码:class com.sun.proxy.$Proxy0,这里的Proxy的意思是代理对象的意思,当程序执行时Mybatis会产生一个代理对象去完成一系列操作

class com.sun.proxy.$Proxy0
UserBean [uid=1, uname=yang, upwd=123, regtime=1999-11-04 00:00:00.0]

注释:

  1. SqlSession表示和数据库进行一次会话,属于非线程安全,用完之后需要关闭,每次获取都要获取新的对象
  2. 暂时无了,想起来再加
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值