MyBatis之初体验helloworld

本文介绍了作者初次接触MyBatis框架的感受,并对比了MyBatis与Hibernate的轻量级特性。作者通过创建MySQL数据库、设置Java工程、引入MyBatis库,详细讲述了配置MyBatis的conf.xml文件,创建实体类、映射文件,以及编写简单的根据ID查询User的方法。最后,通过执行SQL并获取结果,展示了MyBatis如何操作数据库。

最近在学习MyBatis,为什么要学习这个,根据我长期潜水互联网各类it论坛大概了解到,hibernate已经慢慢的退出历史舞台了,当然肯定还是有一些公司还是再继续用这个框架的,毕竟需要一个过程!我大概了解到呢,主要是因为这个框架太复杂厚重,不太好学习!毕竟我是个初学者,我也不知道这种评价是不是真的正确,有没有站在一个客观的角度来看待这个框架等等!但是既然大家都说mybatis还不错,那么我也就来开始来拥抱这个框架吧!


学习这款框架给我的感觉的确是要比hibernate轻量级很多,需要掌握的知识点也没有那么多,当然这也是因为先前学习了hibernate之后再来学习这个会感觉不那么陌生了

毕竟持久层框架大概要做的事情不都差不多嘛,只是方式各有千秋,但是万变不离其宗,说到底就是为了更好更方便的操作数据库而已!当然并不说底层的实现原理我都已经了解透彻,这个嘛,等我以后有时间了一定好好研究一下这写出这么优秀框架大神们源代码,看看自己和别人的差距,好好学习学习!

下面就来一个mybatis的初体验 helloworld吧

既然说到是持久层框架,那么我们当然是需要数据库的,我这里使用的是mysql  下面便是mysql建表语句 和数据

create database mybatis;
use mybatis;
CREATE TABLE users(id INT PRIMARY KEY AUTO_INCREMENT, NAME VARCHAR(20), age INT);
INSERT INTO users(NAME, age) VALUES('Tom', 12);
INSERT INTO users(NAME, age) VALUES('Jack', 11);

创建个数据库名字叫mybatis  一个用户表,有三个字段,id为自增长

接下来便是创建一个java工程,名字随便你喜好,你需要为你的工程导入mybatis的jar包 和数据库的驱动包 ,数据库驱动包根据你使用的数据来确定

mybatis的jar可以到网上去下载

在工程的src目录下面新建mybatis的配置文件,

名字就叫做conf.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/mybatis" />
				<property name="username" value="" />
				<property name="password" value="" />
			</dataSource>
		</environment>
	</environments>
</configuration>
里面的username 和password就写你自己数据库的连接用户名 和密码 相信学过hibernate应该很容易明白


定义自己的实体类对象:

public class User {
	private int id;
	private String name;
	private int age;
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	@Override
<span style="white-space:pre">	</span>public String toString() {
<span style="white-space:pre">		</span>return "User [id=" + id + ", name=" + name + ", age=" + age + "]";
<span style="white-space:pre">	</span>}
	
	
}

这里类的属性需要跟数据的字段名字一一对应,后面我们再学习,数据库字段和属性名字不一样时应该怎么处理

写好实体类的映射文件:

名字可以随便取

<?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.atguigu.mybatis_test.test1.userMapper"> 
	<select id="getUser" parameterType="int" 
		resultType="com.atguigu.mybatis_test.test1.User">
		select * from users where id=#{id}
	</select>
</mapper>

这是实体类的映射文件,我来解释一下各个标签 和值代表什么

这个xml文件是用来定义对数据库的操作的,这里我只写了一个简单的根据id查询user的方法

mapper 标签 所有 读数据的操作都是要放在这里的 

namespace代表就好像是一个这个数据库操作的标识,就好像是一个对象

select标签里面的id就相当于这个对象的方法,当你把上面的namespace后面再加上  . +id值的时候 就相当于调用

这个对数据库的操作 就像这样 com.chen.mybatis.entity.userMapper.getUser

parameterType 就是你要传入的查询条件的数据类型 比如说这里是根据id查询user 所有就是int型

resultType代表的是返回值类型,也就是查询结果的返回值类型,这里需要写全类名 后面也会 教大家如何去简写resultType

然后包裹在select标签之前的就是你的查询语句了,这个阿赫sql语句没什么区别,需要注意的就是 你的查询条件的固定写法

就是一个#加上{} 大括号。里面写你参数名,大括号里面的名字可以随便写的,如果你只是根据基础类型的数据查询的话!

如果你是根据对象的属性名来查询,则必须跟对象的属性名一致


下面就是测试了。

<span style="white-space:pre">		</span>String resource = "conf.xml";
		InputStream in = Test.class.getClassLoader().getSystemResourceAsStream(resource);
		SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(in);
		SqlSession session = sessionFactory.openSession();
		String statement = "com.chen.mybatis.entity.userMapper.getUser";
		User user = session.selectOne(statement, 1);
		System.out.println(user);
resource代表的是你要加载的那个mybatis的配置文件,注意不是实体类的映射文件!

我的配置文件是放在src根目录下面,所以直接用配置文件名字通过类加载器使用流来读取,然后就是新建一个sessionFactory了,当然这里是新建的是

sqlsessionFactory ,然后就是获得一个sqlsession 注意这里跟hibernate不同的地方是这里使用的是openSession()而不是getSession 。

在 sqlsessionFactory 中 没有getsess方法!

statement:在mybatis当中,大部分的数据库操作都是依赖statement的,这个statement是一个字符串,它代表的就是前面说的那个实体类的映射文件

当中的namespace加上你要执行的数据库操作的标签的id 就好像你要执行某一个方法一样

namespace:com.chen.mybatis.entity.userMapper

id:getUser

这样就是代表你要执行的是根据id查询user的操作

便作为selectOne方法的第一个参数。第二个参数则是你要执行的sql语句所需要的参数,比如说我这个执行标签内的sql语句是

select * from users where id=#{id}   

那个1代表的就是这里的id 也就是说 要查找数据库当中id为1的user

这里返回值就是一个user,mybatis会自动将结果根据你的  resultType="com.chen.mybatis.entity.User" 设定的返回结果类型封装成对应的

数据类型

输出结果为 : User [id=1, name=Tom, age=12]

因为我重写了User类的toString方法 

以上就是mybatis的helloworld!





评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值