框架技术概述
何为框架?为什么要学习使用框架技术?
框架(Framework)是一种经过检验的、具有特点功能的半成品软件。框架针对特点的功能或架构需要,对基础代码进行了封装并提供相应的API,不同框架能提供不同的功能。框架虽能实现特定功能,但又不是一套完整可运行的应用软件,开发者需要在框架提供的功能或架构基础上,加入具体的业务逻辑,从而开发出一套自己的应用软件。简而言之,框架就好比一个已经搭建好了的模子。
MyBatis框架
MyBatis框架是一个半自动化的ORM(Object Relational Mapping,对象/关系映射)的优秀的持久化框架,MyBatis框架的主要特点就在于SQL映射器机制。MyBatis框架使用XML或注解将Java中的接口和POJO(Java对象,即以前的实体类)与SQL语句结合在一起,使用灵活、简单易学、性能优秀。
持久化简介
持久化就是将内存中有用的数据以某种技术保存起来,并且可以再次取出来应用。一句话概括就是数据的瞬时状态和持久状态的转变过程。
ORM简介
ORM是一种在关系型数据库和面向对象编程语言之间进行数据转换的技术。它试图通过在对象模型和数据库关系模型之间建立对应关系,从而达到通过JavaBean对象操作数据库表中数据的目的。
使用MyBatis框架实现数据库操作
搭建基于MyBatis框架的开发环境
在项目中使用MyBatis框架可以按照以下步骤进行:
(1)下载所需的jar文件
(2)创建项目并添加所需jar文件
(3)编写MyBatis框架的核心配置文件
(4)创建实体类
(5)创建Mapper接口
(6)创建SQL映射文件
(7)编写测试类
下面详细介绍在项目中使用MyBatis框架的每个步骤
1.下载所需的jar文件
可以从GitHub上下载所需的MyBatis框架组件,查看各版本的MyBatis,选择所需版本,进去后下载"mybatis-x.x.x.zip"文件
,解压后可得到mybatis-x.x.x.jar文件
2.创建项目并添加所需的jar文件
将mybatis-x.x.x.jar文件和日志组件log4j-x.x.x.jar及MySQL数据库驱动文件mysql-connector-java-x.x.x.jar复制到项目指定的jar文件存放目录,添加依赖
3.编写MyBatis框架的核心配置文件
由于越来越多框架技术被运用到项目中,配置文件数量也随之增加。便于分类管理,在项目中新建一个resources目录,用来放置各类配置文件。新建方法:右击项目==》new==》Directory,取名“resources”,右击该文件夹==》Mark Directory As==》Resources Root。使用MyBatis框架需要编写两类XML格式的配置文件:核心配置文件和SQL映射文件。由于IDEA对于MyBatis框架配置文件没有提供足够的支持,为了便于开发,可以在IDEA中为这两类配置文件设置代码模块。右击resources目录==》new==》Edit File Templates,如图所示。
模板如下
<?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> </configuration>
再次右击resources目录==》new后可看见多了个mybatis-config.xml的模块,选择它,为了和其他框架配置文件进行区分,习惯将此文件命名为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 properties settings typeAliases typeHandlers objectFactory plugins environments environment transactionManager dataSource databaseIdProvider mappers --> <configuration> <!-- 引入包含数据库连接参数的database.properties文件 --> <!-- properties子元素可省略,因为mybatis会先加载property元素中的设置,然后加载resource属性指定资源中的设置, 所以database.properties中定义的属性值会覆盖property元素中的同名属性值 --> <properties resource="database.properties"> <property name="driver" value="com.mysql.cj.jdbc.Driver"/> <property name="url" value="jdbc:mysql://localhost:3306/cvs_db?characterEncoding=utf8&useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC&useSSL=false"/> <property name="username" value="root"/> <property name="password" value="root"/> </properties> <!-- 1.设置mybatis框架的运行时行为 --> <settings> <!-- 使用Log4j作为mybatis框架的日志实现 --> <setting name="logImpl" value="LOG4J"/> <!-- 设置自动映射行为 --> <setting name="autoMappingBehavior" value="FULL"/> </settings> <!-- 为Java类配置一个简短的别名,避免SQL映射文件中使用冗长的完全限定类名,简化开发 --> <typeAliases> <!-- 方法一:一一配置,但是如果实体类过多,配置麻烦 --> <!-- <typeAlias type="cn.cvs.pojo.SysUser" alias="sysuser"/> <typeAlias type="cn.cvs.pojo.Supplier" alias="supplier"/> --> <!-- 方法二:指定包路径,Mybatis框架会扫描包路径下的实体类并自动设置别名, 别名默认为小写的非完全限定类名(不含包名的类名),如cn.cvs.pojo.SysUser的别名默认为sysuser --> <package name="cn.cvs.pojo"/> <!-- 常见的内置类型的默认别名为小写的非完全限定类名,如Boolean、String、Integer的别名分别是boolean、string、integer(或int), 而基本类型的别名是在其类名前加“_”,如boolean、byte、int的别名是_boolean、_byte、_int。 并且别名在使用中都是不区分大小写的--> <package name="java.lang"/> </typeAliases> <!-- 2.配置mybatis框架的运行环境 --> <!-- environments:可以配置多个环境 development:开发环境 --> <environments default="development"> <environment id="development"> <!--事务管理:配置事务管理器,采用jdbc事务,由应用自行管理事务--> <transactionManager type="JDBC"/> <!--数据源:pooled:mybatis提供的数据源,jndi:jndi数据源--> <dataSource type="POOLED"> <!--使用${}引用定义的参数,此处参数来自database.properties文件--> <property name="driver" value="${driver}"/> <property name="url" value="${url}"/> <property name="username" value="${username}"/> <property name="password" value="${password}"/> </dataSource> </environment> </environments> <!-- 3.配置需要引用的SQL映射文件的位置 --> <mappers> <!-- 这里引入UserMapper.xml 在UserMapper.xml是主要用于写sql语句的 --> <!-- 方法一:一一对应 --> <!-- <mapper resource="cn/cvs/dao/sysUser/SysUserMapper.xml"/>--> <!-- <mapper resource="cn/cvs/dao/supplier/SupplierMapper.xml"/>--> <!-- 方法二:对应包 --> <package name="cn/cvs/dao"/> </mappers> </configuration>
4.创建实体类
根据数据库中表结构创建对应的业务实体,使用私有属性存储对象状态,访问属性必须通过相应的getter和setter方法,符合面向对象封装的要求。
5.创建Mapper接口
在MyBatis框架中,Mapper接口是指用于绑定到SQL映射语句的接口,又称为映射器,通常与SQL映射文件配合使用。对应用而言,Mapper接口即为DAO接口,定义了对数据进行持久化操作的API。
6.创建SQL映射文件
定义了与用户操作相关的SQL映射文件,该文件是一个XML文件,先创建文件模板,步骤和上述创建mybatis-config.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:在同一个项目的时候,必须唯一 id:和方法名字一致 parameterType:传入参数的类型 resultType:返回参数的类型 --> <mapper namespace=""> </mapper>
示例如下:
<?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:在同一个项目的时候,必须唯一 id:和方法名字一致 parameterType:传入参数的类型 resultType:返回参数的类型 --> <mapper namespace="dao.CardDao"> <select id="selectList" resultType="card"> SELECT * FROM card LIMIT #{startIndex},#{pageSize} </select> <select id="selectListSize" resultType="int"> SELECT count(1) FROM card </select> </mapper>
7.编写测试类
使用JUnit进行测试,结果在测试台输出。
为了便于分类管理代码,可以在项目中建一个test目录,用来存放测试相关代码。步骤:右击项目==》new==》Package,取名test,右击test目录==》Mark Directory As==》Test Resources Root。打开Mapper接口,右击源代码编辑界面==》Go To==》test
注意:第二步这会有个fix,点击即可,我这是已经配好了,所以它没有显示
完成后,test目录下会出现一个测试类。
测试目录结构与接口目录接口一致,接下来看看测试类示例:
package cn.cvs.dao.supplier; import org.apache.ibatis.io.Resources; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlSessionFactoryBuilder; import org.apache.log4j.Logger; import org.junit.Test; import java.io.IOException; import java.io.InputStream; import static org.junit.Assert.*; public class SupplierMapperTest { Logger logger = Logger.getLogger(SupplierMapperTest.class); @Test public void count() throws IOException { //1.创建工厂对象 //a.读取mybatis核心配置文件 String resource = "mybatis-config.xml"; //b.获取对mybatis核心配置文件的输入流 InputStream is = Resources.getResourceAsStream(resource); //c.使用SqlSessionFactoryBuilder读取配置文件并构建SqlSessionFactory实例 SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is); //2.创建会话对象 SqlSession sqlSession = factory.openSession(); //3.创建接口实例,调用其方法执行相关sql int count = sqlSession.getMapper(SupplierMapper.class).count(); System.out.println("SysUserMapperTest count ========= >"+count); //4.关闭SqlSession sqlSession.close(); } }
需要测试某个方法时,点击此方法左侧的绿色箭头运行。此时一个MyBatis项目就已搭建完成了。