中国著名的做网站渗透,网站会对特殊的ip做跳转,苏州全网网站建设,杭州seo网站排名优化本章概要
简介持久层框架对比快速入门#xff08;基于Mybatis3方式#xff09;
1.1 简介
https://mybatis.org/mybatis-3/zh/index.html MyBatis最初是Apache的一个开源项目iBatis, 2010年6月这个项目由Apache Software Foundation迁移到了Google Code。随着开发团队转投G…本章概要
简介持久层框架对比快速入门基于Mybatis3方式
1.1 简介
https://mybatis.org/mybatis-3/zh/index.html MyBatis最初是Apache的一个开源项目iBatis, 2010年6月这个项目由Apache Software Foundation迁移到了Google Code。随着开发团队转投Google Code旗下 iBatis3.x正式更名为MyBatis。代码于2013年11月迁移到Github。 MyBatis 是一款优秀的持久层框架它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJOPlain Old Java Objects普通老式 Java 对象为数据库中的记录。 社区会持续更新开源项目版本会不断变化我们不必每个小版本都追关注重大更新的大版本升级即可。 此处使用3.5.11版本
1.2 持久层框架对比
JDBC SQL 夹杂在Java代码中耦合度高导致硬编码内伤维护不易且实际开发需求中 SQL 有变化频繁修改的情况多见代码冗长开发效率低 Hibernate 和 JPA 操作简便开发效率高程序中的长难复杂 SQL 需要绕过框架内部自动生成的 SQL不容易做特殊优化基于全映射的全自动框架大量字段的 POJO 进行部分映射时比较困难。反射操作太多导致数据库性能下降 MyBatis 轻量级性能出色SQL 和 Java 编码分开功能边界清晰。Java代码专注业务、SQL语句专注数据开发效率稍逊于 Hibernate但是完全能够接受
开发效率HibernateMybatisJDBC 运行效率JDBCMybatisHibernate
1.3 快速入门基于Mybatis3方式
准备数据模型
CREATE DATABASE mybatis-example;USE mybatis-example;CREATE TABLE t_emp(emp_id INT AUTO_INCREMENT,emp_name CHAR(100),emp_salary DOUBLE(10,5),PRIMARY KEY(emp_id)
);INSERT INTO t_emp(emp_name,emp_salary) VALUES(tom,200.33);
INSERT INTO t_emp(emp_name,emp_salary) VALUES(jerry,666.66);
INSERT INTO t_emp(emp_name,emp_salary) VALUES(andy,777.77);项目搭建和准备
项目搭建 mybatis-base-helloworld 依赖导入 pom.xml dependencies!-- mybatis依赖 --dependencygroupIdorg.mybatis/groupIdartifactIdmybatis/artifactIdversion3.5.11/version/dependency!-- MySQL驱动 mybatis底层依赖jdbc驱动实现,本次不需要导入连接池,mybatis自带! --dependencygroupIdmysql/groupIdartifactIdmysql-connector-java/artifactIdversion8.0.25/version/dependency!--junit5测试--dependencygroupIdorg.junit.jupiter/groupIdartifactIdjunit-jupiter-api/artifactIdversion5.3.1/version/dependency
/dependencies实体类准备 包com.atguigu.entity public class Employee {private Integer empId;private String empName;private Double empSalary;//getter | setterOverridepublic String toString() {return Employee{ empId empId , empName empName \ , empSalary empSalary };}
}准备 Mapper 接口和 MapperXML 文件 MyBatis 框架下SQL语句编写位置发生改变从原来的Java类改成XML或者注解定义 推荐在XML文件中编写SQL语句让用户能更专注于 SQL 代码不用关注其他的JDBC代码。如果拿它跟具有相同功能的 JDBC 代码进行对比你会立即发现省掉了将近 95% 的代码
一般编写SQL语句的文件命名XxxMapper.xml Xxx一般取表名Mybatis 中的 Mapper 接口相当于以前的 Dao。但是区别在于Mapper 仅仅只是建接口即可我们不需要提供实现类具体的SQL写到对应的Mapper文件该用法的思路如下图所示 定义mapper接口 包com.atguigu.mapper package com.atguigu.mapper;
import com.atguigu.entity.Employee;/*** t_emp表对应数据库SQL语句映射接口!* 接口只规定方法,参数和返回值!* mapper.xml中编写具体SQL语句!*/
public interface EmployeeMapper {/*** 根据员工id查询员工数据方法* param empId 员工id* return 员工实体对象*/Employee selectEmployee(Integer empId);}定义mapper xml 位置 resources/mappers/EmployeeMapper.xml ?xml version1.0 encodingUTF-8 ?
!DOCTYPE mapperPUBLIC -//mybatis.org//DTD Mapper 3.0//ENhttps://mybatis.org/dtd/mybatis-3-mapper.dtd
!-- namespace等于mapper接口类的全限定名,这样实现对应 --
mapper namespacecom.atguigu.mapper.EmployeeMapper!-- 查询使用 select标签id 方法名resultType 返回值类型标签内编写SQL语句--select idselectEmployee resultTypecom.atguigu.entity.Employee!-- #{empId}代表动态传入的参数,并且进行赋值!后面详细讲解 --select emp_id empId,emp_name empName, emp_salary empSalary fromt_emp where emp_id #{empId}/select
/mapper注意
方法名和SQL的id一致方法返回值和resultType一致方法的参数和SQL的参数一致接口的全类名和映射配置文件的名称空间一致
准备MyBatis配置文件 mybatis框架配置文件 数据库连接信息性能配置mapper.xml配置等 习惯上命名为 mybatis-config.xml这个文件名仅仅只是建议并非强制要求。将来整合 Spring 之后这个配置文件可以省略所以操作时可以直接复制、粘贴。
?xml version1.0 encodingUTF-8 ?
!DOCTYPE configuration
PUBLIC -//mybatis.org//DTD Config 3.0//EN
http://mybatis.org/dtd/mybatis-3-config.dtd
configuration!-- environments表示配置Mybatis的开发环境可以配置多个环境在众多具体环境中使用default属性指定实际运行时使用的环境。default属性的取值是environment标签的id属性的值。 --environments defaultdevelopment!-- environment表示配置Mybatis的一个具体的环境 --environment iddevelopment!-- Mybatis的内置的事务管理器 --transactionManager typeJDBC/!-- 配置数据源 --dataSource typePOOLED!-- 建立数据库连接的具体信息 --property namedriver valuecom.mysql.cj.jdbc.Driver/property nameurl valuejdbc:mysql://localhost:3306/mybatis-example/property nameusername valueroot/property namepassword valueroot//dataSource/environment/environmentsmappers!-- Mapper注册指定Mybatis映射文件的具体位置 --!-- mapper标签配置一个具体的Mapper映射文件 --!-- resource属性指定Mapper映射文件的实际存储位置这里需要使用一个以类路径根目录为基准的相对路径 --!-- 对Maven工程的目录结构来说resources目录下的内容会直接放入类路径所以这里我们可以以resources目录为基准 --mapper resourcemappers/EmployeeMapper.xml//mappers/configuration运行和测试
/*** projectName: com.atguigu.test** description: 测试类*/
public class MyBatisTest {Testpublic void testSelectEmployee() throws IOException {// 1.创建SqlSessionFactory对象// ①声明Mybatis全局配置文件的路径String mybatisConfigFilePath mybatis-config.xml;// ②以输入流的形式加载Mybatis配置文件InputStream inputStream Resources.getResourceAsStream(mybatisConfigFilePath);// ③基于读取Mybatis配置文件的输入流创建SqlSessionFactory对象SqlSessionFactory sessionFactory new SqlSessionFactoryBuilder().build(inputStream);// 2.使用SqlSessionFactory对象开启一个会话SqlSession session sessionFactory.openSession();// 3.根据EmployeeMapper接口的Class对象获取Mapper接口类型的对象(动态代理技术)EmployeeMapper employeeMapper session.getMapper(EmployeeMapper.class);// 4. 调用代理类方法既可以触发对应的SQL语句Employee employee employeeMapper.selectEmployee(1);System.out.println(employee employee);// 4.关闭SqlSessionsession.commit(); //提交事务 [DQL不需要,其他需要]session.close(); //关闭会话}
}说明
SqlSession代表Java程序和数据库之间的会话。HttpSession 是 Java 程序和浏览器之间的会话SqlSessionFactory是“生产”SqlSession 的“工厂”。工厂模式如果创建某一个对象使用的过程基本固定那么我们就可以把创建这个对象的相关代码封装到一个“工厂类”中以后都使用这个工厂类来“生产”我们需要的对象。
SqlSession 和 HttpSession 区别
HttpSession工作在 Web 服务器上属于表述层。 代表浏览器和 Web 服务器之间的会话。 SqlSession不依赖 Web 服务器属于持久化层。 代表 Java 程序和数据库之间的会话。