MyBatis--01--简介

MyBatis

概念:

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

总之,Mybatis对JDBC访问数据库的过程进行了封装,简化了JDBC代码,解决JDBC将结果集封装为Java对象的麻烦。

MyBatis--01--简介_第1张图片

为什么要使用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

  • JDBC(Java DataBase Connectivity) Java数据库连接

其实就是利用Java语言/程序连接并访问数据库的一门技术

jdbc开发步骤:

创建类并实现JDBC程序(六个步骤)

  1. 注册数据库驱动
  2. 获取数据库连接
  3. 获取传输器
  4. 发送SQL到服务器执行并
  5. 处理结果
  6. 释放资源
public static void main(String[] args) throws Exception {
    //1.注册数据库驱动
    Class.forName("com.mysql.jdbc.Driver");
    //2.获取数据库连接
    Connection conn = DriverManager.getConnection(
        "jdbc:mysql://localhost:3306/jt_db?characterEncoding=utf-8",
        "root", "root");
    //3.获取传输器
    Statement stat = conn.createStatement();
    //4.发送SQL到服务器执行并返回执行结果
    String sql = "select * from account";
    ResultSet rs = stat.executeQuery( sql );
    //5.处理结果
    while( rs.next() ) {
        int id = rs.getInt("id");
        String name = rs.getString("name");
        double money = rs.getDouble("money");
        System.out.println(id+" : "+name+" : "+money);
    }
    //6.释放资源
    rs.close();
    stat.close();
    conn.close();
    System.out.println("TestJdbc.main()....");
}
                                               

MyBatis快速入门.

官网mybatis

MyBatis--01--简介_第2张图片

1.准备数据,创建库和表

2.创建工程,导入所需jar包、

导入junit、mysql、mybaits、log4j等开发包

`<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>
    <!-- 整合log4j -->
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-log4j12</artifactId>
        <version>1.6.4</version>
    </dependency>
</dependencies>`

3.创建测试类

@Test
public void findAll() throws IOException {
    //1.读取mybatis的核心配置文件(mybatis-config.xml)
    //2.通过配置信息获取一个SqlSessionFactory工厂对象
    //3.通过工厂获取一个SqlSession对象
    //4.通过namespace+id找到要执行的sql语句并执行sql语句
    //5.输出结果
}

4.添加mybatis-config.xml文件

MyBatis的全局配置文件

  1. 配置环境,可配置多个环境(比如:develop开发、test测试)

  2. 配置事务管理方式:JDBC/MANAGED JDBC:将事务交给JDBC管理(推荐)MANAGED:自己管理事务

  3. 配置数据源,即连接池 JNDI/POOLED/UNPOOLED JNDI:已过时 POOLED:使用连接池(推荐)
    UNPOOLED:不使用连接池

  4. 导入Mapper配置文件,如果mapper文件有多个,可以通过多个mapper标签导入

MyBatis--01--简介_第3张图片
mybatis-config文件详细配置如下

<?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/yonghedb?characterEncoding=utf-8"/>
				<property name="username" value="root"/>
				<property name="password" value="root"/>
			</dataSource>
		</environment>
	</environments>
	
	<!-- 2.导入Mapper配置文件,如果mapper文件有多个,可以通过多个mapper标签导入 -->
	<mappers>
		<mapper resource="EmpMapper.xml"/>
	</mappers>
</configuration>

5.添加EmpMapper.xml文件

MyBatis--01--简介_第4张图片
`EmpMapper文件详细配置如下

<?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值应该保证唯一
	在程序中通过[ namespace + id ]定位到要执行哪一条SQL语句
 -->
<mapper namespace="EmpMapper">
	<!-- 通过select、insert、update、delete标签声明要执行的SQL -->
	<!-- 练习1: 查询emp表中的所有员工信息
		resultType指定查询的结果将会封装到什么类型中
		即使最终返回的结果是集合(List<Emp>),resultType也只需要指定集合中的泛型即可!
 	-->
	<select id="findAll" resultType="com.tedu.pojo.Emp">
		select * from emp
	</select>

</mapper>

6.添加并编写Emp实体类 将结果集封装到Java对象中。

  • 实体类,用于封装Emp表中的一条用户信息
package com.tedu.pojo;

public class Emp {
	//1.声明实体类中的属性
	private Integer id;
	private String name;
	private String job;
	private Double salary;
	
	//2.提供对应的getter和setter方法
	public Integer getId() {
		return id;
	}
	public void setId(Integer id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getJob() {
		return job;
	}
	public void setJob(String job) {
		this.job = job;
	}
	public Double getSalary() {
		return salary;
	}
	public void setSalary(Double salary) {
		this.salary = salary;
	}
	
	//3.重写toString方法
	@Override
	public String toString() {
		return "Emp [id=" + id + ", name=" + name + ", job=" + job + ", salary=" + salary + "]";
	}
}

实现测试类,并测试

//1.读取mybatis的核心配置文件(mybatis-config.xml)
//2.通过配置信息获取一个SqlSessionFactory工厂对象
//3.通过工厂获取一个SqlSession对象
//4.通过namespace+id找到要执行的sql语句并执行sql语句
//5.输出结果

  • 查询emp表中的所有员工, 返回一个List集合
@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 );
	}
}

执行findAll方法,输出结果为:
MyBatis--01--简介_第5张图片

总结

(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查询的结果映射成相应的结果)

Mapper接口开发

MyBatis--01--简介_第6张图片

1.准备数据,创建库和表

2.创建工程,导入所需jar包、

------ 导入junit、mysql、mybaits、log4j等开发包`

3.创建测试类

4.添加mybatis-config.xml文件

5.添加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">
<mapper namespace="com.cy.dao.EmpMapper">

<!-- 1.查询:查询Emp表中指定id的员工信息 -->
<select id="findById" resultType="com.cy.pojo.Emp">
	select * from emp where id=#{id}
</select>

</mapper>

6.创建com.cy.dao.EmpMapper接口----在接口中提供findById方法

public Emp findById(Integer id);

7.添加并编写Emp实体类 将结果集封装到Java对象中。

public class TestMybatisInf {
	@Test
    public void testFindById() throws Exception{
  ......
  //3.获取Mapper接口对象
  EmpMapper map = session.getMapper(EmpMapper.class);
  //4.调用接口对象的方法进行查询
  Emp e = map.findById(2);
  //5.输出结果
  System.out.println(e);
}
}

jdbc.properties文件

在开发中,通常我们会将连接数据库的配置信息单独放在一个properties文件中(方便管理和维护),然后在MyBatis的mapper文件中引入properties文件的配置信息即可!

1、在src目录下创建一个名称为jdbc.properties的文件

MyBatis--01--简介_第7张图片
2、jdbc.properties文件内容如下:

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/yonghedb?characterEncoding=utf-8
jdbc.username=root
jdbc.password=root

3、在mybatis-config.xml文件中引入jdbc.properties文件

MyBatis--01--简介_第8张图片

SpringBoot整合Mybatis

1 数据源配置 .yml

spring:
  datasource:
    url: jdbc:mysql://127.0.0.1:3306/jtdb?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=utf8&autoReconnect=true&allowMultiQueries=true
    username: root
    password: root

1.serverTimezone=GMT%2B8 %2B 代表 "+"号 表示时区
2.useUnicode=true&characterEncoding=utf8 指定编码为utf-8
3.autoReconnect=true& 如果程序连接数据库中途断掉时是否重连.
4.allowMultiQueries=true 是否允许批量操作

2 关于Mybatis配置

server:
  port: 8090
  servlet:
    context-path: /
spring:
  datasource:
    url: jdbc:mysql://127.0.0.1:3306/jtdb?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=utf8&autoReconnect=true&allowMultiQueries=true
    username: root
    password: root

#springboot整合mybatis
mybatis:
  #定义别名包
  type-aliases-package: com.jt.pojo
  #加载Mapper映射文件
  mapper-locations: classpath:/mybatis/mappers/*.xml
  #开启驼峰映射
  configuration:
    map-underscore-to-camel-case: true
  

3 关于映射文件 -mapper.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.jt.mapper.UserMapper">
	<!--
		1.通过别名包定义用户的类型,
			原理:当返回值结果resultType封装对象时,
				自动的拼接别名包路径 com.jt.pojo.User

		2.开启驼峰规则的说明
			字段:   user_id,user_name,user_age
			属性:	userId ,userName ,userAge

		设定:开启驼峰映射规则
		  	user_id 去除多余的_  之后首字母大写  userId

		注意事项: 如果开启了驼峰映射规则,则按照要求实现.
	-->
	<select id="findAll" resultType="User">
		select * from user
	</select>
</mapper>


4.关于Mapper注解优化说明

由于每个接口都需要添加Mapper注解导致代码繁琐.可以采用包扫描的方式动态导入 代码如下

@SpringBootApplication
@MapperScan("com.jt.dao") //主要告诉mapper的包路径,会自动的完成包扫描
public class SpringbootDemo2MybatisApplication {

	public static void main(String[] args) {
		SpringApplication.run(SpringbootDemo2MybatisApplication.class, args);
	}

}

你可能感兴趣的:(Spring基础知识--SSM,mybatis)