mybatis的入门案例

MyBatis简介

mybatis是一个优秀的持久层框架,它对jdbc的操作数据库的过程进行封装,让开发者只需要关注sql语句本身,而不用再花精力去处理例如:注册驱动,创建connection,创建statement,手动设置参数,封装结果集,释放资源这些繁杂的过程;
Mybatis通过xml或注解的方式将要执行的各种statement(statement、preparedStatemnt)配置起来,并通过java对象和statement中的sql进行映射生成最终执行的sql语句,最后由mybatis框架执行sql并将结果映射成java对象并返回。

总之,Mybatis对JDBC访问数据库的过程进行了封装,简化了JDBC代码,解决JDBC将结果集封装为Java对象的麻烦。
在这里插入图片描述
~mybatis-config.xml是Mybatis的核心配置文件,通过其中的配置可以生成SqlSessionFactory,也就是SqlSession工厂
~基于SqlSessionFactory可以生成SqlSession对象
~SqlSession是一个既可以发送SQL去执行,并返回结果,类似于JDBC中的Connection对象,也是Mybatis中至关重要的一个对象。
~Executor是SqlSession底层的对象,用于执行SQL语句
~MapperStatement对象也是SqlSession底层的对象,用于接收输入映射(SQL语句中的参数),以及做输出映射(即将SQL查询的结果映射成相应的结果)

为什么要使用MyBatis

1、使用传统方式JDBC访问数据库:
(1)使用JDBC访问数据库有大量重复代码(比如注册驱动、获取连接、获取传输器、释放资源等);
(2)JDBC自身没有连接池,会频繁的创建连接和关闭连接,效率低;
(3)SQL是写死在程序中,一旦修改SQL,需要对类重新编译;
(4)对查询SQL执行后返回的ResultSet对象,需要手动处理,有时会特别麻烦;

2、使用mybatis框架访问数据库:
(1)Mybatis对JDBC对了封装,可以简化JDBC代码;
(2)Mybatis自身支持连接池(也可以配置其他的连接池),因此可以提高程序的效率;
(3)Mybatis是将SQL配置在mapper文件中,修改SQL只是修改配置文件,类不需要重新编译。
(4)对查询SQL执行后返回的ResultSet对象,Mybatis会帮我们处理,转换成Java对象。

总之,JDBC中所有的问题(代码繁琐、有太多重复代码、需要操作太多对象、释放资源、对结果的处理太麻烦等),在Mybatis框架中几乎都得到了解决!

MyBatis快速入门案例

  1. 准备数据库
    创建数据库db并指定utf8编码, 在数据库中创建表emp, 插入一些数据
-- 1、创建数据库
create database if not exists db charset utf8;
use db; -- 选择数据库
-- 2、删除emp表(如果存在)
drop table if exists emp;
-- 3、在 yonghedb 库中创建 emp 表
create table emp(
    id int primary key auto_increment,
    name varchar(50),
    job varchar(50),
    salary double
);
-- 4、往 emp 表中, 插入若干条记录
insert into emp values(null, '张三', '程序员', 3300);
insert into emp values(null, '李四', '程序员', 2800);
insert into emp values(null, '王五', '程序员鼓励师', 2700);
  1. 创建maven项目, 引入依赖
<dependencies>
    <!-- junit单元测试 -->
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.9</version>
    </dependency>
    <!-- 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. 创建Emp实体类
    在src/main/java下创建com.test.pojo.Emp类
    用来接收数据库返回的数据, 属性名最好和数据库中的字段名一致
public class Emp {
	
	/*
	 * 声明id, name, job, salary四个属性, 分别用于封装
	 * emp表中的id, name, job, salary
	 * 注意: 如果能让Emp类中的变量和emp表中的列名保持一致的化
	 * 尽量保持一致(在不违反Java命名规范的前提下)
	 */
	private Integer id;
	private String name;
	private String job;
	private Double salary;
	
	// getter, setter, toString()...
}
  1. 创建配置文件
    4.1 mybatis-config.xml
    在src/main/resources目录下,创建mybatis-config.xml文件(MyBatis的核心配置文件)
<?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.配置环境,可配置多个环境(比如:develop开发、test测试) -->
    <environments default="develop">
        <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/db?characterEncoding=utf-8"/>
                <property name="username" value="root"/>
                <property name="password" value="123456"/>
            </dataSource>
        </environment>
    </environments>
    
    <!-- 2.导入Mapper配置文件,如果mapper文件有多个,可以通过多个mapper标签导入 -->
    <mappers>
        <mapper resource="EmpMapper.xml"/>
    </mappers>
</configuration>

4.2 EmpMapper.xml
在src/main/resources目录下,创建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值表示当前这个mapper名字
	框架底层会根据namespace的值来定位当前这个mapper文件
 -->
<mapper namespace="EmpMapper">
	<!-- 在mapper根标签内部可以添加很多SQL标签
		select, insert, delete, update
	 -->
	 <!-- 查询所有emp表中的所有员工信息
	 	resulType属性: 用于只当什么类型来封装SQL语句查询而结果
	 	如果查询员工信息, 可以指定员工对象来进行封装, 因此
	 	resultType需要指定Emp类的全限定类名
	  -->
	<select id="findAll" resultType="com.tedu.pojo.Emp">
		select * from emp;
	</select>
</mapper>
  1. 创建测试类进行测试
    在src/main/java下创建测试类com.test.TestMyBatis
public class TestMyBatis {
	/**
	 * 联系1: 查询emp表中的所有员工信息
	 * @throws IOException 
	 */
	@Test
	public void testFindAll() throws IOException {
		// 1. 读取mybatis的核心配置文件[mybatis-config.xml]
		InputStream in = Resources.getResourceAsStream("mybatis-config.xml");
		// 2. 通过获取SqlSessionFactory工厂对象
		SqlSessionFactory fac = new SqlSessionFactoryBuilder().build(in);
		// 3. 后去SqlSession对象(打开与数据库的连接) true: 表示自动提交, 默认是false即手动提交
		SqlSession session = fac.openSession(true);
		// 4. 执行SQL语句, 并返回执行结果
		List<Emp> emps = session.selectList("EmpMapper.findAll");
		// 5. 输出结果
		for (Emp emp : emps) {
			System.out.println(emp);
		}
	}
}
  1. 输出结果
Emp [id=1, name=张三, job=程序员, salary=3300.0]
Emp [id=2, name=李四, job=程序员, salary=2800.0]
Emp [id=3, name=王五, job=程序员鼓励师, salary=2700.0]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值