当前位置: 首页 > news >正文

Web基础(六):Mybatis

目录一、作用二、环境准备​三、XML无接口开发四、Mapper接口开发五、查询一、作用代替jdbc解决jdbc的硬编码、繁杂代码问题1. 硬编码注册驱动获取连接 - mybatis-conf.xml2. 繁杂代码定义sql语句 - XxxMapper.xml二、环境准备一三步走1. maven配置创建maven项目设置 - 构建工具 - maven主路径、配置路径2. pom.xml导入依赖mybatis、mysql、junit、slf4j-api、logback-classic、logback-core3. resource配置文件mybatis核心配置、sql映射、logback配置二mybatis核心配置文件注意核心配置文件标签要遵循MyBatis官网的结构顺序1. 加载数据源配置驱动信息、数据库连接信息environments default默认数据源id environment id数据源id transactionManager typeJDBC/ dataSource typePOOLED property namedriver valuecom.mysql.cj.jdbc.Driver/ property nameurl valuejdbc:mysql://localhost:3306/数据库名?useSSLfalse/ property nameusername value用户名/ property namepassword value密码/ /dataSource /environment /environments2. 加载sql映射1逐个加载映射mapperresource属性指定sql映射路径2批量加载映射packagename属性指定sql映射包全名!--1. 逐个加载映射-- mappers mapper resourcecom/liu/mybatis/mapper/XxxMapper.xml/ /mappers !--2. 批量加载映射-- mappers package namecom.liu.mybatis.mapper/ /mappers3. 起类别名typeAliases typeAlias type类全限定名 alias类别名/ /typeAliases三sql映射1. 映射根配置namespace 属性作用区分不同映射1 XML 无接口自定义唯一名称区分映射2 Mapper 接口填写接口全类名绑定接口!--1. XML无接口开发自定义-- mapper namespaceXxxMapper /mapper !--2. Mapper接口开发接口全限定名-- mapper namespacecom.liu.mybatis.mapper.XxxMapper /mapper2. sql声明标签1标签类型select/insert/update/delete2属性idresultType / resultMap注意resultType和resultMap - type填实体类的全限定名/别名!--1. resultType-- select idsqlID resultType结果集要封装成的目标实体类 select * from tb_user /select !--2. resultMap-- resultMap idresultMapID type结果集要封装成的目标实体类 result column字段名 property字段别名/ /resultMap select idsqlID resultMapresultMapID /select3. sql内容编写1参数占位符① #{}预编译占位符防 SQL 注入自动加引号② ${}字符串直接拼接有注入风险不加引号2特殊字符处理①转义字符lt; gt; amp;②CDATA 区![CDATA[ 内容 ]]3模糊查询 like关键字4动态 SQL 标签①where剔除开头多余 and/or无查询条件时不生成where语句②if条件成立拼接 SQL③choose多条件单选类似if-else if-else!--1. if标签-- select * from tb_brand where if test条件/if /where !--2. choose标签-- select * from tb_brand where choose when test条件/when otherwise/otherwise /choose /where​三、XML无接口开发一准备pojo起类别名二核心配置文件三sql映射四测试执行sql1. 加载配置文件获取SqlSessionFactory对象1InputStream inputStream Resources.getResourceAsStream(mybatis核心配置文件路径);2SqlSessionFactory sqlSessionFactory new SqlSessionFactoryBuilder().build(inputStream);2. 获取SqlSession对象用于执行sqlsqlSessionFactory.openSession()3. 执行sqlsqlSession.selectList(namespace.sqlId)4. 释放资源sqlSession.close()?xml version1.0 encodingUTF-8 ? !DOCTYPE mapper PUBLIC -//mybatis.org//DTD Mapper 3.0//EN http://mybatis.org/dtd/mybatis-3-mapper.dtd !--XML无接口开发namespace为自定义-- mapper namespaceUserMapper select idselectAll resultTypecom.liu.mybatis.pojo.User select * from tb_user /select /mapperpublic class selectAll { public static void main(String[] args) throws IOException { //1. 加载核心配置文件获取SqlSessionFactory对象 String resource mybatis-config.xml; InputStream inputStream Resources.getResourceAsStream(resource); SqlSessionFactory sqlSessionFactory new SqlSessionFactoryBuilder().build(inputStream); //2. 获取SqlSession对象用于执行sql SqlSession sqlSession sqlSessionFactory.openSession(); //3. 执行sql ListUser sl sqlSession.selectList(UserMapper.selectAll); System.out.println(sl); //4. 释放资源 sqlSession.close(); } }四、Mapper接口开发一准备pojo起类别名二Mapper接口三sql映射四执行sql1. 加载配置文件获取SqlSessionFactory对象2. 获取SqlSession对象3. 获取Mapper代理对象用于执行sqlsqlSession.getMapper(XxxMapper.class)4. 执行sqlxxxMapper.接口方法()5. 释放资源public interface BrandMapper { //返回值类型与sql封装类型对应MyBatis根据接口返回值类型自动封装sql查询结果。 //方法名与sql声明ID一致 ListBrand selectAll(); }!--Mapper接口开发namespace为接口全限定名-- mapper namespacecom.liu.mybatis.mapper.BrandMapper resultMap idbrandResultMap typeBrand result columnbrand_name propertybrandName/ result columncompany_name propertycompanyName/ /resultMap select idselectAll resultMapbrandResultMap select id,brand_name,company_name,ordered,description,status from tb_brand /select /mapperTest public void testSelectBrand() throws IOException { //1. 加载核心配置文件获取SqlSessionFactory对象 String resource mybatis-config.xml; InputStream inputStream Resources.getResourceAsStream(resource); SqlSessionFactory sqlSessionFactory new SqlSessionFactoryBuilder().build(inputStream); //2. 获取SqlSession对象用于执行sql SqlSession sqlSession sqlSessionFactory.openSession(); //3. 获取UserMapper接口的代理对象 BrandMapper brandMapper sqlSession.getMapper(BrandMapper.class); //4. 执行sql ListBrand brands brandMapper.selectAll(); System.out.println(brands); //5. 释放资源 sqlSession.close(); }五同名规则1. 接口与映射的名字、目录相同2. 接口方法名与sql声明ID相同3. 接口方法返回值类型与sql结果集要封装成的目标实体类对应4. 传递参数1散装参数散装参数名与sql占位符名称相同2实体类参数实体类属性名与sql占位符名称相同3Map集合参数键名与sql占位符名称相同五、查询1. 查询所有2. 通过id查询3. 多条件查询4. 多条件动态查询5. 单条件动态查询
http://www.zskr.cn/news/1341073.html

相关文章:

  • ChatGPT-Web-Midjourney-Proxy的GPTs功能详解:打造专属AI助手的终极指南
  • 0602光刻机 第六篇:EUV超精密光学系统(S级 长期死磕突破)超精密反射镜技术壁垒
  • BetterCodable快速入门指南:5分钟学会属性包装器的强大功能
  • Squash架构深度剖析:从Plank到Debug Attachment的完整实现
  • 5分钟上手Learn X by doing Y:初学者快速入门教程
  • Swift OpenAPI Generator事件流处理:构建实时双向通信的Swift应用终极指南
  • weather_landscape编码原理深度解析:24小时天气数据的视觉化艺术
  • 创业团队如何通过统一API管理多个AI项目的模型调用
  • Plexdrive开发者指南:如何贡献代码与扩展功能
  • CANN/asc-devkit:SIMT bfloat16x2 floor函数
  • CANN/asc-devkit SIMT bfloat16数学函数
  • RustSec平台注册表揭秘:跨平台开发的7个最佳安全实践
  • snnTorch性能优化:10个技巧让你的SNN训练速度提升300%
  • 终极指南:如何在普通电脑上运行BitNet 1-bit大语言模型
  • UDEV Gothic技术实现深度剖析:字体合成、字形优化与元数据处理
  • SPlisHSPlasH粘度模拟技术详解:从标准方法到最新算法
  • 【卷卷观察】Google I/O 2026 炸场:AI 不再跟你聊天了,它开始替你干活了
  • gibMacOS终极指南:三步完成macOS组件下载与系统部署
  • 终极歌词神器:5分钟学会用LDDC为你的音乐库添加完美歌词
  • BDE最佳实践:避免常见陷阱的20个专业建议 [特殊字符]
  • 实战测试10款降AIGC平台:只选真正管用的那一款!
  • AI大模型不是硕士专属!普通人想转行?这4条高薪赛道任你选!
  • 知识竞赛电子计分板 vs 手工计分板:差距有多大
  • Magma高可用部署:如何构建企业级可靠网络基础设施
  • 中小企业如何利用Taotoken的Token Plan实现AI成本可控
  • Android Bug Bounty终极指南:从零开始到提交高质量漏洞报告的完整实战流程 [特殊字符]
  • 软考高项案例分析9:项目采购管理
  • 如何利用Machine Learning Experiments训练你的第一个神经网络模型
  • Wallaby自定义查询:扩展测试框架的灵活性
  • 深入解析AVRDUDESS:图形化AVR编程工具实战手册