推广游戏网站怎么做,广告联盟平台自动赚钱,视频拍摄制作,推广排名1、什么是 MyBatis MyBatis 是一款优秀的持久层框架#xff0c;它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO#xff08;Plain O…1、什么是 MyBatis MyBatis 是一款优秀的持久层框架它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJOPlain Old Java Objects普通老式 Java 对象为数据库中的记录。
2、优点
灵活性高MyBatis不会对应用程序或数据库的现有设计强加任何影响开发人员可以使用他们已经熟悉的SQL语句、存储过程和数据库触发器等SQL可控性强对于复杂查询和多表关联查询时MyBatis的优势尤为明显因为可以更加灵活地控制生成的SQL语句并在需要的情况下针对不同的数据库实现进行优化。缓存机制好MyBatis提供了一级缓存和二级缓存可以有效地减少数据库访问次数提高响应速度而且它们的使用非常方便并且默认情况下处于开启状态。生态系统完善MyBatis有着非常强大的社区支持同时它也与SpringSpring Boot等流行框架或中间件无缝整合方便企业级项目的开发。
3、缺点
性能问题相比于Hibernate等ORM框架在大规模数据处理能力和并发性方面MyBatis的性能表现略逊一筹。配置复杂相比Hibernate等ORM框架MyBatis的配置文件相对较为复杂需要花费更多的时间和精力进行配置。映射错误难以追踪由于映射文件是通过XML描述符或注解进行的为了解决常见的SQL问题需要对SQL语句的编写和映射文件的正确描述非常敏感出现异常时排查起来也较为繁琐。
4、MyBatis的安装
dependenciesdependencygroupIdorg.mybatis/groupIdartifactIdmybatis/artifactIdversion3.5.7/version/dependency
/dependencies
自动生成Java代码和MyBatis映射文件
pluginsplugingroupIdorg.mybatis.generator/groupIdartifactIdmybatis-generator-maven-plugin/artifactIdversion1.4.0/versionconfiguration!-- MyBatis Generator配置文件的位置 --configurationFilesrc/main/resources/generatorConfig.xml/configurationFileoverwritetrue/overwriteverbosetrue/verbose/configuration/plugin
/plugins
5、数据库连接池
MyBatis并没有内置数据库连接池因此需要使用第三方的数据库连接池。常见的数据库连接池有如下几种
HikariCP性能最好的连接池也是目前最流行的连接池之一。Apache Commons DBCP2Apache官方开发的连接池支持连接池配置和管理、连接有效性验证、闲置连接回收等功能。Alibaba Druid阿里巴巴开发的连接池支持JDBC规范、多数据源、SQL防注入、监控等功能。
dependenciesdependencygroupIdcom.zaxxer/groupIdartifactIdHikariCP/artifactIdversion4.0.3/version/dependency
/dependencies
6、MyBatis配置方式
6.1、基于xml配置文件配置
?xml version1.0 encodingUTF-8?
!DOCTYPE configuration PUBLIC -//mybatis.org//DTD Config 3.0//ENhttp://mybatis.org/dtd/mybatis-3-config.dtd
configuration!-- 数据库连接信息 --environments defaultdevelopmentenvironment iddevelopmenttransactionManager typeJDBC/dataSource typecom.zaxxer.hikari.HikariDataSourceproperty namedriverClassName valuecom.mysql.jdbc.Driver/property namejdbcUrl valuejdbc:mysql://localhost:3306/test?useSSLfalseamp;serverTimezoneAsia/Shanghai/property nameusername valueroot/property namepassword valueroot//dataSource/environment/environments!-- 扫描映射文件 --mappersmapper resourcecom/example/demo/mapper/UserMapper.xml//mappers
/configuration
6.2、基于yaml配置文件配置
# MyBatis 配置
mybatis:# 别名配置typeAliasesPackage: com.example.demo.entity# Mapper XML文件存放路径mapperLocations: classpath*:mapper/*.xml# 数据库连接池配置datasource:url: jdbc:mysql://localhost:3306/test?useSSLfalseserverTimezoneAsia/Shanghaiusername: rootpassword: rootdriver-class-name: com.mysql.jdbc.Drivertype: com.zaxxer.hikari.HikariDataSourcehikari:minimumIdle: 5maximumPoolSize: 20idleTimeout: 300000connectionTimeout: 30000
6.3、基于注解配置文配置
/ 实体类
public class User {private Long id;private String username;private Integer age;// getter、setter方法省略
}// Dao接口
Mapper
public interface UserDao {Select(SELECT * FROM user WHERE id #{id})User findById(Long id);Insert(INSERT INTO user(username, age) VALUES (#{username}, #{age}))int save(User user);Update(UPDATE user SET username #{username}, age #{age} WHERE id #{id})int update(User user);Delete(DELETE FROM user WHERE id #{id})int deleteById(Long id);
}// 配置类
Configuration
MapperScan(com.example.demo.mapper)
public class MybatisConfig {Beanpublic SqlSessionFactory sqlSessionFactory(DataSource dataSource) throws Exception {SqlSessionFactoryBean sessionFactory new SqlSessionFactoryBean();sessionFactory.setDataSource(dataSource);PathMatchingResourcePatternResolver resolver new PathMatchingResourcePatternResolver();sessionFactory.setMapperLocations(resolver.getResources(classpath*:mapper/*.xml));return sessionFactory.getObject();}
}
7、MyBatis使用
7.1、Java类
Mapper
public interface UserMapper {User findById(Long id);int save(User user);int update(User user);int deleteById(Long id);
}
7.2、mapper文件
?xml version1.0 encodingUTF-8?
!DOCTYPE mapper PUBLIC -//mybatis.org//DTD Mapper 3.0//ENhttp://mybatis.org/dtd/mybatis-3-mapper.dtdmapper namespacecom.example.demo.mapper.UserMapper!-- 查询操作 --select idfindById parameterTypeLong resultTypeUserSELECT *FROM userWHERE id #{id}/select!-- 插入操作 --insert idsave parameterTypeUserINSERT INTO user(username, age)VALUES (#{username}, #{age})/insert!-- 更新操作 --update idupdate parameterTypeUserUPDATE user SETusername #{username},age #{age}WHERE id #{id}/update!-- 删除操作 --delete iddeleteById parameterTypeLongDELETE FROM userWHERE id #{id}/delete
/mapper
8、MyBatis的注意事项以及常见问题
在使用MyBatis时需要注意以下事项
避免使用SELECT *使用明确指出需要查询的字段而不是查询全部字段可以提高查询效率。显式指定参数类型在使用Mapper接口调用SQL查询时参数类型必须与Mapper接口方法参数类型一致或者符合JavaBean规范。使用动态SQL可以根据不同的条件排除或者包含某个SQL片段以达到避免重复代码的作用。使用缓存MyBatis支持多种缓存方式可以提高查询效率。但是需要注意缓存更新策略以免出现数据不一致问题。配置文件管理MyBatis的配置文件中包含了许多的配置信息需要注意配置信息的管理和维护。
在使用MyBatis过程中也存在一些常见问题例如
多表查询使用联合查询的性能问题。分页查询时使用游标或者取所有数据的性能问题。MyBatis缓存机制带来的数据不一致问题。SQL语句过于复杂导致难以调试和维护。数据库连接池的优化问题。