96SEO 2026-02-19 19:08 13
Maven简介1.3、Maven基本使用1.4、IDEA配置Maven1.6、依赖管理依赖范围

Mybatis快速入门2.3、解决SQL映射文件的警告提示2.4、Mapper代理开发
4.3、查看详情单个查询4.4、条件查询4.4.1、多条件查询4.4.2、动态条件查询4.4.3、单条件动态条件查询
4.5、添加4.6、修改功能4.6.1、修改全部字段4.6.2、修改动态字段
Maven是专门用于管理和构建Java项目的工具它的主要功能有
Maven提供了一套标准化的项目结构所有IDE使用Maven构建的项目结构完全一样所有IDE创建的Maven项目可以通用
Maven是一个项目管理和构建工具它基于项目对象模型(POM)的概念通过一小段描述信息来管理项目的构建、报告和文档
远程仓库(私服):一般由公司团队搭建的私有仓库当项目中使用坐标引入对应依赖jar包后首先会查找本地仓库中是否有对应的jar包:
还可以搭建远程仓库将来jar包的查找顺序则变为:本地仓库→远程仓库→中央仓库
Maven构建项目生命周期描述的是一次构建过程经历经历了多少个事件Maven对项目构建的生命周期划分为3套
设置搜索maven设置IDEA使用本地安装的Maven并修改配置文件路径
groupld:定义当前Maven项目隶属组织名称(通常是域名反写例如:
artifactld:定义当前Maven项目名称通常是模块名称例如order-service、goods-service)
创建模块选择Maven点击Next填写模块名称坐标信息点击finish创建完成编写HelloWorld并运行
选择右侧Maven面板点击号选中对应项目的pom.xml文件双击即可如果没有Maven面板选择
Settings选择Plugins搜索Maven选择第一个Maven
Helper点击Install安装弹出面板中点击Accept重启IDEA
在pom.xml中编写dependencies标签在dependencies标签中使用dependency引入坐标定义坐标的
groupld,artifactldversion点击刷新按钮使坐标生效
通过设置坐标的依赖范围(scope)可以设置对应jar包的作用范围:编译环境、测试环境、运行环境
框架就是一个半成品软件是一套可重用的、通用的、软件基础代码模型在框架的基础之上构建软件编写更加高效、规范、通用、可扩展
定义与SQL映射文件同名的Mapper接口并且将Mapper接口和SQL映射文件放置在同一下则可以使用包扫描的方式简化SQL映射文件的加载
org.apache.ibatis.io.Resources;
org.apache.ibatis.session.SqlSession;
org.apache.ibatis.session.SqlSessionFactory;
org.apache.ibatis.session.SqlSessionFactoryBuilder;import
{//1加载mybatis的核心配置文件获取sqlSessFactoryString
Resources.getResourceAsStream(resource);SqlSessionFactory
SqlSessionFactoryBuilder().build(inputStream);//2.获取SqlSession对象用它来执行SQLSqlSession
sqlSessionFactory.openSession();//3.执行sql语句//ListObject
sqlSession.selectList(test.selectAll);//获取UserMapper接口的代理对象UserMapper
sqlSession.getMapper(UserMapper.class);ListUser
usermapper.selectAll();//打印System.out.println(users);//关流sqlSession.close();}
3.0//ENhttps://mybatis.org/dtd/mybatis-3-config.dtd
configuration!--environments:配置数据库连接环境信息可以配置多个environment,通过default属性切换不同的environment即通过这个改变其数据库的不同--environments
iddevelopmenttransactionManager
valuecom.mysql.jdbc.Driver/property
valuejdbc:mysql://localhost:3306/mybatis?useSSLfalseamp;serverTimezoneUTC/property
value123456//dataSource/environment/environmentsmappers!--加载SQL的映射文件--mapper
resourcecom/mybatisDom/mapper/UserMapper.xml//mappers
3.0//ENhttps://mybatis.org/dtd/mybatis-3-mapper.dtd
namespacecom.i***ima.mapper.UserMapper!--statement--select
resultTypecom.i***ima.pojo.Userselect
com.i***ima.mapper.BrandMapper;
org.apache.ibatis.io.Resources;
org.apache.ibatis.session.SqlSession;
org.apache.ibatis.session.SqlSessionFactory;
org.apache.ibatis.session.SqlSessionFactoryBuilder;
Resources.getResourceAsStream(resource);SqlSessionFactory
SqlSessionFactoryBuilder().build(inputStream);//2.获取SQLsessionSqlSession
sqlSessionFactory.openSession();//3.
sqlSession.getMapper(BrandMapper.class);//4.执行方法ListBrand
brandMapper.selectAll();System.out.println(brands);sqlSession.close();}
3.0//ENhttps://mybatis.org/dtd/mybatis-3-mapper.dtd
namespacecom.i***ima.mapper.BrandMapper!--statement--!--数据库表的字段名称
不一样则不能自动封装数据起别名对不一样的列名起别名使其和实体类的属性名一样缺点每次查询都要定义一次别名sql片段缺点
不灵活resultMap1定义resultMap标签2在select标签中使用resultMap属性替换resultType属性--!--id:唯一标识type映射类型支持别名--resultMap
typecom.i***ima.pojo.Brand!--id:完成主键字段的映射column表的别名property实体类的属性名result完成一般字段的映射column表的别名property实体类的属性名--result
propertycompanyName//resultMapselect
resultMapbrandResultMapselect*from
,ordered,description,status/sqlselect
resultTypecom.i***ima.pojo.Brandselectinclude
3.0//ENhttps://mybatis.org/dtd/mybatis-3-config.dtd
configuration!--environments:配置数据库连接环境信息可以配置多个environment,通过default属性切换不同的environment--typeAliases
namecom.i***ima.pojo//typeAliasesenvironments
iddevelopmenttransactionManager
valuecom.mysql.jdbc.Driver/property
valuejdbc:mysql://localhost:3306/mybatis?useSSLfalseamp;serverTimezoneUTC/property
value123456//dataSource/environment/environmentsmappers!--加载SQL的映射文件--mapper
resourcecom/i***ima/mapper/BrandMapper.xml//mappers
起别名:在sql语句中对不一样的列名起别名别名和实体类属性名一样
com.i***ima.mapper.BrandMapper;
org.apache.ibatis.io.Resources;
org.apache.ibatis.session.SqlSession;
org.apache.ibatis.session.SqlSessionFactory;
org.apache.ibatis.session.SqlSessionFactoryBuilder;
Resources.getResourceAsStream(resource);SqlSessionFactory
SqlSessionFactoryBuilder().build(inputStream);//2.获取SQLsessionSqlSession
sqlSessionFactory.openSession();//3.
sqlSession.getMapper(BrandMapper.class);//4.执行方法Brand
brandMapper.selectByID(1);//打印结果System.out.println(brand1);sqlSession.close();}
内容]]可以将字符直接写入由于xml语句中许多符号无法直接打入
Brand();brand.setStatus(status);brand.setCompanyName(companyName);brand.setBrandName(brandName);*///使用Map集合处理Map
HashMap();map.put(status,status);map.put(companyName,companyName);map.put(brandName,brandName);//1.获取sqlSessionFactoryString
Resources.getResourceAsStream(resource);SqlSessionFactory
SqlSessionFactoryBuilder().build(inputStream);//2.获取SQLsessionSqlSession
sqlSessionFactory.openSession();//3.
sqlSession.getMapper(BrandMapper.class);//4.执行方法//
brandMapper.selectByCondition(status,
brandMapper.selectByCondition(brand);//4.3
brandMapper.selectByCondition(map);//打印结果System.out.println(brands);sqlSession.close();}
散装参数如果方法中有多个参数需要使用Param(SQL参数占位符名称)*
selectByCondition(Param(status)int
status,Param(companyName)String
companyName,Param(brandName)String
#{brandName}/if/where/select散装参数
如果方法中有多个参数需要使用Param(“SQL参数占位符名称”)
SQL语句会随着用户的输入或外部条件的变化而变化我们称为动态SQL
当第一个条件判断不满足要求后面的条件判断满足要求会导致后面语句的and出现在第一个条件判断中使得报错
Brand();brand.setStatus(status);brand.setCompanyName(companyName);brand.setBrandName(brandName);*///使用Map集合处理Map
HashMap();map.put(status,status);map.put(companyName,companyName);//map.put(brandName,brandName);//1.获取sqlSessionFactoryString
Resources.getResourceAsStream(resource);SqlSessionFactory
SqlSessionFactoryBuilder().build(inputStream);//2.获取SQLsessionSqlSession
sqlSessionFactory.openSession();//3.
sqlSession.getMapper(BrandMapper.class);//4.执行方法//
brandMapper.selectByCondition(status,
brandMapper.selectByCondition(brand);//4.3
brandMapper.selectByCondition(map);//打印结果System.out.println(brands);sqlSession.close();}接口文件没有变化
tb_brand!--当第一个条件判断不满足要求后面的条件判断满足要求会导致后面语句的and出现在第一个条件判断中使得报错解决方案1.
where关键字--!--where//第一种解决方案11--!--第二种解决方案--whereif
Brand();brand.setStatus(status);brand.setCompanyName(companyName);brand.setBrandName(brandName);//1.获取sqlSessionFactoryString
Resources.getResourceAsStream(resource);SqlSessionFactory
SqlSessionFactoryBuilder().build(inputStream);//2.获取SQLsessionSqlSession
sqlSessionFactory.openSession();//3.
sqlSession.getMapper(BrandMapper.class);//4.执行方法//使用brand对象进行查询ListBrand
brandMapper.selectByConditionSingle(brand);//打印结果System.out.println(brands);sqlSession.close();}
resultTypecom.Smulll.pojo.Brandselect
#{brandName}/wheno***rwise11/o***rwise/choose/select!--
--------------------------------------------------
resultTypecom.Smulll.pojo.Brandselect
tb_brandwherechoose!--类似于switch--when
#{brandName}/wheno***rwise!--类似于default--11/o***rwise/choose/where/select4.5、添加
(#{brandName},#{companyName},#{ordered},#{description},#{status});
openSession():默认开启事务进行增删改操作后需要使sqlSession.commit();手动提交事务openSession(true):可以设置为自动提交事务(关闭事务)
Brand();brand.setStatus(status);brand.setCompanyName(companyName);brand.setBrandName(brandName);brand.setOrdered(order);brand.setDescription(description);//1.获取sqlSessionFactoryString
Resources.getResourceAsStream(resource);SqlSessionFactory
SqlSessionFactoryBuilder().build(inputStream);//2.获取SQLsession
sqlSessionFactory.openSession(true);//3.
sqlSession.getMapper(BrandMapper.class);//4.执行方法brandMapper.add(brand);//提交事务sqlSession.commit();sqlSession.close();}添加-主键返回
(#{payment},#{paymentType},#{status});
goods_price,count,order_id)values
(#{goodsName},#{goodsPrice},#{count},#{orderld});
Brand();brand.setStatus(status);brand.setCompanyName(companyName);brand.setBrandName(brandName);brand.setOrdered(order);brand.setDescription(description);brand.setId(id);//1.获取sqlSessionFactoryString
Resources.getResourceAsStream(resource);SqlSessionFactory
SqlSessionFactoryBuilder().build(inputStream);//2.获取SQLsession
sqlSessionFactory.openSession(true);//3.
sqlSession.getMapper(BrandMapper.class);//4.执行方法brandMapper.update(brand);//提交事务sqlSession.commit();sqlSession.close();}
#{brandName},company_name#{companyName},ordered#{ordered},description#{description},status#{status}where
Brand();//brand.setStatus(status);//brand.setCompanyName(companyName);//brand.setBrandName(brandName);brand.setOrdered(order);//brand.setDescription(description);brand.setId(id);//1.获取sqlSessionFactoryString
Resources.getResourceAsStream(resource);SqlSessionFactory
SqlSessionFactoryBuilder().build(inputStream);//2.获取SQLsession
sqlSessionFactory.openSession(true);//3.
sqlSession.getMapper(BrandMapper.class);//4.执行方法brandMapper.update(brand);//提交事务sqlSession.commit();sqlSession.close();}接口文件
company_name#{companyName},/ifif
description#{description},/ifif
Brand();brand.setId(id);//1.获取sqlSessionFactoryString
Resources.getResourceAsStream(resource);SqlSessionFactory
SqlSessionFactoryBuilder().build(inputStream);//2.获取SQLsession
sqlSessionFactory.openSession(true);//3.
sqlSession.getMapper(BrandMapper.class);//4.执行方法brandMapper.deleteById(brand);//提交事务sqlSession.commit();sqlSession.close();}接口文件
{7,8};//1.获取sqlSessionFactoryString
Resources.getResourceAsStream(resource);SqlSessionFactory
SqlSessionFactoryBuilder().build(inputStream);//2.获取SQLsession
sqlSessionFactory.openSession(true);//3.
sqlSession.getMapper(BrandMapper.class);//4.执行方法brandMapper.deleteByIds(ids);//提交事务sqlSession.commit();sqlSession.close();}接口
接口方法中可以接收各种各样的参数MyBatis底层对于这些参数进行不同的封装处理方式
参数占位符名称一致Collection封装为Map集合可以使用Param注解替换Map集合中默认的arg键名
map.put(collection,Collection集合)List封装为Map集合可以使用Param注解替换Map集合中默认的arg键名
map.put(List,List集合)Array封装为Map集合可以使用Param注解替换Map集合中默认的arg键名
多个参数封装为Map集合可以使用Param注解替换Map集合中默认的arg键名
map.put(param2,参数2)MyBatis提供了ParamNameResolver类来进行参数封装
建议:将来都使用Param注解来修改Map集合中默认的键名并使用修改后的名称来获取值这样可读性更高
id);查询Select添加Insert修改Update删除Delete
使用注解来映射简单语句会使代码显得更加简洁但对于稍微复杂一点的语句,Java注解不仅力不从心还会址你本就复杂的SQL语句更加期乱不堪。
因此。
如果你需要的一些很亮杂的涯作最好用XML来映射语句。
选择何种方式来配置映射以及认为是否应该要统一映射语句定义的形式完全取决于你和你的团队。
换句话说永远不要拘泥于一种方式你可以很轻松的在基于注解和XML的语句映射方式间自由移植和切换。
作为专业的SEO优化服务提供商,我们致力于通过科学、系统的搜索引擎优化策略,帮助企业在百度、Google等搜索引擎中获得更高的排名和流量。我们的服务涵盖网站结构优化、内容优化、技术SEO和链接建设等多个维度。
| 服务项目 | 基础套餐 | 标准套餐 | 高级定制 |
|---|---|---|---|
| 关键词优化数量 | 10-20个核心词 | 30-50个核心词+长尾词 | 80-150个全方位覆盖 |
| 内容优化 | 基础页面优化 | 全站内容优化+每月5篇原创 | 个性化内容策略+每月15篇原创 |
| 技术SEO | 基本技术检查 | 全面技术优化+移动适配 | 深度技术重构+性能优化 |
| 外链建设 | 每月5-10条 | 每月20-30条高质量外链 | 每月50+条多渠道外链 |
| 数据报告 | 月度基础报告 | 双周详细报告+分析 | 每周深度报告+策略调整 |
| 效果保障 | 3-6个月见效 | 2-4个月见效 | 1-3个月快速见效 |
我们的SEO优化服务遵循科学严谨的流程,确保每一步都基于数据分析和行业最佳实践:
全面检测网站技术问题、内容质量、竞争对手情况,制定个性化优化方案。
基于用户搜索意图和商业目标,制定全面的关键词矩阵和布局策略。
解决网站技术问题,优化网站结构,提升页面速度和移动端体验。
创作高质量原创内容,优化现有页面,建立内容更新机制。
获取高质量外部链接,建立品牌在线影响力,提升网站权威度。
持续监控排名、流量和转化数据,根据效果调整优化策略。
基于我们服务的客户数据统计,平均优化效果如下:
我们坚信,真正的SEO优化不仅仅是追求排名,而是通过提供优质内容、优化用户体验、建立网站权威,最终实现可持续的业务增长。我们的目标是与客户建立长期合作关系,共同成长。
Demand feedback