IDEA创建MyBatis——初始
来源:互联网 发布:生命的本质是什么知乎 编辑:程序博客网 时间:2024/06/10 11:54
一、为什么需要框架技术
1.框架技术
是一个应用程序的半成品
提供可重用的公共结构
按一定规则组织的一组组件
2.分析优势
不用再考虑公共问题
专心在业务实现上
结构统一,易于学习、维护
新手也可写出好程序
二、MyBatis
1.半自动化的ORM实现
2.DAO层
3.动态SQL
4.小巧灵活、简单易学
1.持久化与ORM
持久化是程序数据在瞬时状态和持久状态间转换的过程
01.ORM(Object Relational Mapping)
编写程序的时候,以面向对象的方式处理数据
保存数据的时候,却以关系型数据库的方式存储
02.ORM解决方案包含下面四个部分
在持久化对象上执行基本的增、删、改、查操作
对持久化对象提供一种查询语言或者API
对象关系映射工具
提供与事务对象交互、执行检查、延迟加载以及其他优化功能
2.MyBatis简介
*MyBatis前身是iBatis,本是Apache的一个开源的项目
*官方网站
http://mybatis.org
*ORM框架
实体类和SQL语句之间建立映射关系
*特点
基于SQL语法,简单易学
能了解底层封装过程
SQL语句封装在配置文件中,便于统一管理与维护,降低程序的耦合度
方便程序代码调试
3.搭建MyBatis开发环境
使用MyBatis的开发步骤
a.下载mybatis-3.2.2.jar包并导入工程
b.编写MyBatis核心配置文件(configuration.xml)
c.创建实体类-POJO
d.DAO层-SQL映射文件(mapper.xml)
e.创建测试类
读取核心配置文件mybatis-config.xml
创建SqlSessionFactory对象,读取配置文件
创建SqlSession对象
调用mapper文件进行数据操作
项目结构如图所示:
pom.xml
<dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.31</version> </dependency> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.2.2</version> </dependency> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.17</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>RELEASE</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>RELEASE</version> </dependency> <!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-api --> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>1.7.4</version> </dependency> <!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-log4j12 --> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <version>1.7.5</version> <scope>test</scope> </dependency> </dependencies> <build> <resources> <resource> <directory>src/main/java</directory> <includes> <include>**/*.xml</include> </includes> </resource> </resources> </build>
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"><configuration> <properties resource="database.properties"></properties> <typeAliases> <package name="cn.happy.entity"/> </typeAliases> <environments default="development"> <environment id="development"> <transactionManager type="JDBC"></transactionManager> <dataSource type="POOLED"> <property name="driver" value="${database.driver}" /> <property name="url" value="${database.url}" /> <property name="username" value="${database.username}" /> <property name="password" value="${database.password}" /> </dataSource> </environment> </environments> <mappers> <mapper resource="cn/happy/dao/department.xml"></mapper> </mappers></configuration>
database.properties 数据库接连的相关配置
database.driver=com.mysql.jdbc.Driverdatabase.url=jdbc:mysql://localhost:3306/empdbdatabase.username=rootdatabase.password=
department.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="cn.happy.dao.DeptDao"> <!--可以重用的SQL块,也可以被其他语句引用--> <sql id="columns"> id,name </sql> <!--用来描述数据库结果集和对象的对应关系--> <!-- 1.查找所有部门--> <select id="getAllDept" resultType="Department"> select <include refid="columns"></include> from department </select></mapper>
DepartmentTest 部门测试类
@Test public void deptTest() throws IOException { String resource="mybatis-config.xml"; InputStream stream= Resources.getResourceAsStream(resource); //获得会话工厂 SqlSessionFactory sf=new SqlSessionFactoryBuilder().build(stream); //会话 SqlSession session=sf.openSession(); //01.弱类型 通过命名空间唯一锁定要执行的sql // List<Department> list = session.selectList("cn.happy.dao.getAllDept"); //02.强类型 DeptDao dao = session.getMapper(DeptDao.class); List<Department> list = dao.getAllDept(); for (Department item:list){ System.out.println(item.getName()); } session.close(); }
实现思路:
1、 mybatis配置
mybatis-config.xml,此文件作为mybatis的全局配置文件,配置了mybatis的运行环境等信息。
mapper.xml文件即sql映射文件,文件中配置了操作数据库的sql语句。此文件需要在mybatis-config.xml中加载。
2、 通过mybatis环境等配置信息构造SqlSessionFactory即会话工厂
3、 由会话工厂创建sqlSession即会话,操作数据库需要通过sqlSession进行。
4、 mybatis底层自定义了Executor执行器接口操作数据库,Executor接口有两个实现,一个是基本执行器、一个是缓存执行器。
5、 Mapped Statement也是mybatis一个底层封装对象,它包装了mybatis配置信息及sql映射信息等。mapper.xml文件中一个sql对应一个Mapped Statement对象,sql的id即是Mapped statement的id。
6、 Mapped Statement对sql执行输入参数进行定义,包括HashMap、基本类型、pojo,Executor通过Mapped Statement在执行sql前将输入的Java对象映射至sql中,输入参数映射就是jdbc编程中对preparedStatement设置参数。
7、 Mapped Statement对sql执行输出结果进行定义,包括HashMap、基本类型、pojo,Executor通过Mapped Statement在执行sql后将输出结果映射至java对象中,输出结果映射过程相当于jdbc编程中对结果的解析处理过程。
输出映射(返回的结果集可以有哪些类型)
1)基本类型
2)pojo类型
3)List类型
3.MyBatis框架优缺点
优点
与JDBC相比,减少了50%以上的代码量
最简单的持久化框架,小巧并简单易学
SQL代码从程序代码中彻底分离,可重用
提供XML标签,支持编写动态SQL
提供映射标签,支持对象与数据库的ORM字段映射
缺点
SQL语句编写工作量大,对开发人员有一定要求
数据库移植性差
MyBatis专注于SQL本身,是一个足够灵活的DAO层解决方案,适用于性能要求较高或者需求多变的互联网项目
4.MyBatis基本要素
01.MyBatis的核心对象 SqlSessionFactoryBuilder 、 SqlSessionFactory 、SqlSession
02.mybatis-config.xml 系统核心配置文件
03.mapper.xml SQL映射文件
核心对象:
1.SqlSessionFactoryBuilder
用过即丢,其生命周期只存在于方法体内
可重用其来创建多个 SqlSessionFactory 实例
负责构建SqlSessionFactory,并提供多个build方法的重载
2.SqlSessionFactory
SqlSessionFactory是每个MyBatis应用的核心
作用:创建SqlSession实例
作用域:Application
生命周期与应用的生命周期相同
单例
存在于整个应用运行时,并且同时只存在一个对象实例
3.SqlSession
包含了执行SQL所需的所有方法
对应一次数据库会话,会话结束必须关闭
线程级别,不能共享
注意:在SqlSession里可以执行多次SQL语句,但一旦关闭了SqlSession就需要重新创建
SqlSession的两种使用方式
01.通过SqlSession实例直接运行映射的SQL语句
02.基于Mapper接口方式操作数据
mybatis-config.xml 系统核心配置文件
a.配置properties元素的两种方式
1.通过外部指定的方式(database.properties),实现动态配置
2.直接配置为xml,实现动态配置
b.Setting元素
用来修改MyBatis运行时的行为方式
主要是MyBatis的一些全局配置属性的设置
c:typeAliases元素
类型别名
仅仅只关联XML配置,简写冗长的Java类名
//方式一<typeAliases><typeAlias alias="User" type="cn.smbms.pojo.User"/></typeAliases>//方式二:<typeAliases><package name ="cn.smbms.pojo" /></typeAliases>
d:environments元素
表示配置MyBatis的多套运行环境,将SQL映射到多个不同的数据库上
子元素节点:environment,但是必须指定其中一个为默认运行环境(通过default指定)
transactionManager-事务管理器
dataSource
dataSource元素使用基本的JDBC数据源接口来配置JDBC连接对象的资源
有三种内建的数据源类型
e:mappers元素
5.MyBatis与Hibernate的区别
- IDEA创建MyBatis——初始
- 初始MyBatis以及idea创建maven项目速度慢
- 初始MyBatis以及idea创建maven项目速度慢
- Spark程序设计—创建初始RDD
- Intellij IDEA使用(十一)—— 使用Intellij IDEA创建Spring+SpringMVC+Mybatis(SSM)整合项目
- 初始MyBatis
- MyBatis初始
- 初始MyBatis
- IntelliJ IDEA 创建第一个Mybatis工程
- idea创建maven+springmvc+mybatis+jetty项目
- 使用IDEA创建maven Mybatis-SpringMvc项目
- Intellij IDEA使用(十二)—— 使用Intellij IDEA导入Eclipse创建的Spring+SpringMVC+Mybatis(SSM)整合项目并修改相关配置
- IDEA 初始配置教程
- idea的初始配置
- IDEA——maven创建层次module
- IDEA——创建Maven Web工程
- MyBatis 初始配置
- 初始Mybatis环境配置
- <NOIP> 9 . P1307 数字反转
- 第1章 Python笔记 基础知识
- Java实现-全排列
- Java IO最详解
- Idea14安装并破解JRebel插件
- IDEA创建MyBatis——初始
- Idea-Java接入银联支付的Demo
- 媒体查询
- 图片转换成16进制数据,在显示成图片
- http://blog.csdn.net/small_love/article/category/742855
- 视频分割成帧序列
- 判断文件是否是同一个文件
- 十二星座哪个更适合做程序员?
- 仿淘宝购物车商品颜色、尺寸选择。