MyBatis基础

什么是MyBatis

  • MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis 。2013年11月迁移到Github。
  • MyBatis是一个优秀的持久层框架,它对jdbc的操作数据库的过程进行封装,使开发者只需要关注 SQL 本身,而不需要花费精力去处理例如注册驱动、创建connection、创建statement、手动设置参数、结果集检索等jdbc繁杂的过程代码。
    在这里插入图片描述
  1. mybatis-config.xml是Mybatis的核心配置文件,通过其中的配置可以生成SqlSessionFactory,也就是SqlSession工厂
  2. 基于SqlSessionFactory可以生成SqlSession对象
  3. SqlSession是一个既可以发送SQL去执行,并返回结果,类似于JDBC中的Connection对象,也是Mybatis中至关重要的一个对象。
  4. Executor是SqlSession底层的对象,用于执行SQL语句
  5. MapperStatement对象也是SqlSession底层的对象,用于接收输入映射(SQL语句中的参数),以及做输出映射(即将SQL查询的结果映射成相应的结果)

为什么要使用MyBatis

  • 使用传统方式JDBC访问数据库:
    (1) 使用JDBC访问数据库有大量重复代码(比如注册驱动、获取连接、获取传输器、释放资源等);
    (2) JDBC自身没有连接池,会频繁的创建连接和关闭连接,效率低;
    (3) SQL是写死在程序中,一旦修改SQL,需要对类重新编译;
    (4) 对查询SQL执行后返回的ResultSet对象,需要手动处理,有时会特别麻烦;
  • 使用mybatis框架访问数据库:
    (1) Mybatis对JDBC对了封装,可以简化JDBC代码;
    (2) Mybatis自身支持连接池(也可以配置其他的连接池),因此可以提高程序的效率;
    (3) Mybatis是将SQL配置在mapper文件中,修改SQL只是修改配置文件,类不需要重新编译。
    (4) 对查询SQL执行后返回的ResultSet对象,Mybatis会帮我们处理,转换成Java对象。

MyBatis搭建实例

  1. 创建数据库、emp表,并插入若干条记录
	create database if not exists testdb1 charset utf8;
	use testdb1;
	drop table if exists emp;
	create table emp(
		id int primary key auto_increment,
		name varchar(50),
		job varchar(50),
		salary double
	);

	insert into emp values(null, '王1', '程序员', 3300);
	insert into emp values(null, '齐1', '程序员', 2800);
	insert into emp values(null, '刘1', '程序员鼓励师', 2700);
  1. 创建Maven工程,导入jar包,在pom.xml文件引入依赖
	<dependencies>
		<!-- mysql驱动 -->
		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
			<version>5.1.32</version>
		</dependency>
		<!-- mybatis -->
		<dependency>
			<groupId>org.mybatis</groupId>
			<artifactId>mybatis</artifactId>
			<version>3.2.8</version>
		</dependency>
	</dependencies>
  1. 创建测试类,提供findAll方法
/** 查询emp表中的所有员工, 返回一个List<Emp>集合
 * @throws IOException */
@Test
public void findAll() throws IOException {
	//1.读取mybatis的核心配置文件(mybatis-config.xml)
	InputStream in = Resources
			.getResourceAsStream("mybatis-config.xml");

	//2.通过配置信息获取一个SqlSessionFactory工厂对象
	SqlSessionFactory fac = 
			new SqlSessionFactoryBuilder().build( in );

	//3.通过工厂获取一个SqlSession对象
	SqlSession session = fac.openSession();
	//4.通过namespace+id找到要执行的sql语句并执行sql语句
	List<Emp> list = session
			.selectList("EmpMapper.findAll");

	//5.输出结果
	for(Emp e : list) {
		System.out.println( e );
	}

}
  1. 添加mybatis-config.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">
	    
	<!-- MyBatis的全局配置文件 -->
	<configuration >
		<!-- 1.配置开发环境(需设置一个默认的环境) -->
		<environments default="develop">
			<!-- 这里可以配置多个环境,比如develop,test等 -->
			<environment id="develop">
				<!-- 1.1.配置事务管理方式:JDBC/MANAGED
				JDBC:将事务交给JDBC管理(推荐)
				MANAGED:自己管理事务
				  -->
				<transactionManager type="JDBC"></transactionManager>
				
				<!-- 1.2.配置数据源,即连接池方式:JNDI/POOLED/UNPOOLED
					JNDI:已过时
					POOLED:使用连接池(推荐)
					UNPOOLED:不使用连接池
				 -->
				<dataSource type="POOLED">
					<property name="driver" value="com.mysql.jdbc.Driver"/>
					<property name="url" value="jdbc:mysql://localhost:3306/yonghedb?characterEncoding=utf-8"/>
					<property name="username" value="root"/>
					<property name="password" value="root"/>
				</dataSource>
			</environment>
		</environments>
		
		<!-- 2.加载Mapper配置文件(因mapper文件中配置了要执行的SQL语句) -->
		<mappers>
			<!-- 注意路径 -->
			<mapper resource="EmpMapper.xml"/>
		</mappers>
	</configuration>
  1. 添加Emp实体类,主要4个属性(Integer id、String name、String job、Double salary),代码略
  2. 添加EmpMapper.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一般指定为当前文件的所在包路径+文件名
		将来在程序中通过[ namespace + id ]定位到执行哪一条SQL语句
	 -->
	<mapper namespace="EmpMapper">
		<!-- 通过select、insert、update、delete标签声明要执行的SQL -->
		<!-- 练习1: 查询emp表中的所有员工信息
			resultType指定查询的结果将会封装到什么类型中 -->
		<select id="findAll" resultType="com.tedu.pojo.Emp">
			select * from emp
		</select>
		<!-- 
		resultType:返回值类型,简单类型(例如:Integer,String,Emp等)
			如果返回集合(List<Emp>),只需配置集合中的元素类型即可!
		-->
	</mapper>
  1. 执行测试类,输出结果
	Emp [id=1, name=1, job=程序员, salary=3300.0]
	Emp [id=2, name=1, job=程序员, salary=2800.0]
	Emp [id=3, name=1, job=程序员鼓励师, salary=2700.0]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值