My Batis

本文介绍了如何在项目中添加MyBatis和MySQL依赖,配置数据库连接,设置Mapper,以及如何使用MyBatis实现增删改查功能,包括查询、删除、修改、插入和like查询的安全处理。

1.创建项目时,需要添加两个依赖
(1)MyBatis Framework
(2)MySQL Driver

2.在application.properties里面设置数据库的相关连接信息

3.设置mybatis相关信息

先再resource里面创建一个文件夹:mybatis
mybatis.mapper-locations=classpath:mybatis/*Mapper.xml 这里的mybatis是在resource里面创建的一个文件夹的名字,要对应
mybatis.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
logging.level.com.example.demo=debug

4.配置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">
<mapper namespace=""></mapper>

使用MyBatis实现增、删、改、查功能

①查询userinfo表中的所有用户信息

在接口中定义方法

在xml中实现接口,查询使用<select>标签

id:是接口中定义的方法的名称

resultType是这个方法的返回类型,这个类型为userinfo,将这个类型的路径方法resultType中

②根据Id进行查询

(1)使用#{}获取数据

此时id的类型在数据库中定义为int,传递时必需使用包装类定义

在xml中实现取数据时,此时的id和Param里面的要对应,并且Param里面的要和数据库对应

(2)使用${}获取数据

#{}和${}的区别:

Ⅰ:${}在控制台打印的sql语句,直接将数据进行替换,读取时及时执行

#{}在控制台打印的sql语句,预执行,将代码中要输入的参数变成" ?"占位符

Ⅱ:${}不安全,存在sql注入;#{}是安全的,不存在sql注入

结论:#{}虽然是安全的,但是不能完全替代${}

${} 的使用场景:当业务需要进行传递SQL命令时,只能使用${},不能是哦也能够#{},但是使用了${},那么传递的参数一定要被穷举,否则不能被使用

③根据Id进行删除,删除返回的类型是受影响的行数,所以方法的返回结果用int接受

删除可以不用设置resultType

在测试delUserById这个方法时,如果想要测试业务但是并不想影响数据库的内容,可以在测试方法上加上注释@Transactional

④根据用户id进行修改,返回的结果也是受影响的行数

传递的是一个userinfo对象,在xml中取其中的参数也是用#{}进行读取

⑤插入一个新的用户,返回的结果是一个受影响的行数

⑥like查询

在使用like查询的时候,在xml文件中不能够使用#{}来读取数据

like的SQL语句:select * from userinfo where username like '% 三 %';

因为#{}是预执行,它会认为"% 三 %"是一个值,所以执行报错。使用${}读取时,是可以完成相应的要求的,但是${}会存在SQL注入,并且使用${}的前提是可以被穷举的,所以此时两个方法都不合适

采用数据库内置的函数:concat()来实现。

这个是完整源码 python实现 Django 【python毕业设计】基于Python的天气预报(天气预测分析)(Django+sklearn机器学习+selenium爬虫)可视化系统.zip 源码+论文+sql脚本 完整版 数据库是mysql 本研究旨在开发一个基于Python的天气预报可视化系统,该系统结合了Django框架、sklearn机器学习库和Selenium爬虫技术,实现对天气数据的收集、分析和可视化。首先,我们使用Selenium爬虫技术从多个天气数据网站实时抓取气象数据,包括温度、湿度、气压、风速等多项指标。这些数据经过清洗和预处理后本研究旨在开发一个基于Python的天气预报可视化系统,该系统结合了Django框架、sklearn机器学习库和Selenium爬虫技术,实现对天气数据的收集、分析和可视化。首先,我们使用Selenium爬虫技术从多个天气数据网站实时抓取气象数据,包括温度、湿度、气压、风速等多项指标。这些数据经过清洗和预处理后,将其存储在后端数据库中,以供后续分析。 其次,采用s,将其存储在后端数据库中,以供后续分析。 其次,采用sklearn机器学习库构建预测模型,通过时间序列分析和回归方法,对未来天气情况进行预测。我们利用以往的数据训练模型,以提高预测的准确性。通过交叉验证和超参数优化等技术手段,我们优化了模型性能,确保其在实际应用中的有效性和可靠性。 最后,基于Django框架开发前端展示系统,实现天气预报的可视化。用户可以通过友好的界面查询实时天气信息和未来几天内的天气预测。系统还提供多种图表类型,包括折线图和柱状图,帮助用户直观理解天气变化趋势。 本研究的成果为天气预报领域提供了一种新的技术解决方案,不仅增强了数据获取和处理的效率,还提升了用户体验。未来,该系统能够扩展至其他气象相关的应用场景,为大众提供更加准确和及时的气象服务。
<think> 我们正在讨论MyBatis框架的使用和开发相关内容。根据之前的引用,我们知道MyBatis是一个持久层框架,它简化了数据库操作,允许直接使用SQL语句,并可以通过XML或注解配置。引用中还提到了tk.mybatisMyBatis-Plus,这些是对MyBatis的扩展,进一步简化了开发,尤其是CRUD操作。 用户的问题是想了解MyBatis的使用和开发相关内容,包括使用方法、开发应用等。我们需要结合引用内容,系统地介绍MyBatis的核心使用方法和开发技巧。 ### 回答结构: 1. **MyBatis基础介绍**:简要回顾MyBatis的特点和核心概念。 2. **MyBatis的配置与使用**:包括XML配置和注解开发两种方式。 3. **高级特性与扩展**:介绍tk.mybatisMyBatis-Plus的使用,以及它们如何简化开发。 4. **开发建议**:结合引用内容,给出使用注解和XML的选择建议以及最佳实践。 5. **示例代码**:展示关键操作的代码示例,如CRUD操作、动态SQL等。 ### 注意事项: - 引用内容要自然融入,在相关位置添加引用标识。 - 使用代码块展示示例,并注明语言类型。 - 语言要清晰易懂,结构分明。 现在开始组织回答: </think> ### MyBatis框架开发与应用详解 结合引用内容,MyBatis作为轻量级持久层框架,其核心价值在于简化SQL操作与对象映射。以下是关键开发方法与实践建议: --- #### 一、MyBatis核心开发模式 1. **XML配置与注解开发对比** | 方式 | 适用场景 | 优势 | 局限 | |---------------|-----------------------------------|---------------------------------------|---------------------------------------| | **XML配置** | 复杂SQL、动态查询 | 代码解耦,SQL可读性强[^1] | 需维护额外XML文件 | | **注解开发** | 简单CRUD操作(如单表查询) | 零配置快速开发,减少文件切换[^4] | 复杂SQL可读性差(如多表关联)[^5] | **开发建议**: - 混合模式:简单操作用注解,复杂业务用XML(引用[4]原则) ```java // 注解示例:单表查询 @Select("SELECT * FROM contract WHERE id=#{id}") Contract selectById(Long id); // XML示例:动态条件查询(contractMapper.xml) <select id="selectContracts" resultType="Contract"> SELECT * FROM contract <where> <if test="status!=null">AND status=#{status}</if> <if test="startDate!=null">AND sign_date >= #{startDate}</if> </where> </select> ``` --- #### 二、高效CRUD开发实践 1. **MyBatis-Plus增强功能(引用[3])** - **依赖配置**: ```xml <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.5.3</version> </dependency> ``` - **核心特性**: - 自动生成基础SQL(无需手写`insert/update`) - 分页插件:`Page<Contract> page = new Page<>(1, 10);` - 条件构造器:`QueryWrapper<Contract>.eq("status","APPROVED")` 2. **tk.mybatis扩展(引用[2])** - **实体注解**:简化字段映射 ```java @Table(name = "t_contract") // 表名映射 public class Contract { @Id // 主键标识 private Long id; @Column(name = "sign_date") // 字段映射 private Date signDate; } ``` - **Mapper继承**:通用CRUD接口 ```java public interface ContractMapper extends Mapper<Contract> {} // 直接获得selectByExample、updateByPrimaryKey等方法 ``` --- #### 三、关键开发技巧 1. **动态SQL优化** - 使用`<script>`标签支持注解动态SQL: ```java @Select("<script>SELECT * FROM contract WHERE id IN " + "<foreach item='item' collection='ids' open='(' separator=',' close=')'>" + "#{item}</foreach></script>") List<Contract> selectByIds(@Param("ids") List<Long> ids); ``` 2. **结果集映射策略** - **注解嵌套映射**(解决复杂关联查询)[^5]: ```java @Results({ @Result(property="id", column="id"), @Result(property="parties", column="id", many=@Many(select="selectContractParties")) }) @Select("SELECT * FROM contract WHERE id=#{id}") Contract selectContractWithParties(Long id); ``` --- #### 四、Spring Boot集成流程 1. **配置步骤** ```yaml # application.yml mybatis: mapper-locations: classpath:mapper/*.xml # XML路径 type-aliases-package: com.example.model # 实体类包名 configuration: map-underscore-to-camel-case: true # 自动驼峰转换 ``` 2. **事务控制** ```java @Service public class ContractService { @Transactional // 声明式事务 public void approveContract(Long id) { contractMapper.updateStatus(id, "APPROVED"); auditLogMapper.insert(new AuditLog("Contract Approved")); } } ``` --- ### 典型问题解决方案 | 场景 | 方案 | 技术点 | |--------------------------|-------------------------------------|----------------------------| | **多数据源操作** | `@DS("slave")`注解(MyBatis-Plus) | 动态数据源路由[^3] | | **逻辑删除** | `@TableLogic`注解 | 自动添加`deleted=0`条件[^2]| | **乐观锁控制** | `@Version`注解 | 版本号冲突检测[^2] | > **最佳实践**: > 1. 生产环境优先使用**XML+MyBatis-Plus**组合(复杂SQL可维护性更强)[^3][^4] > 2. 性能敏感场景开启二级缓存:`@CacheNamespace(flushInterval=60000)` > 3. 避免N+1查询:用`@Many/@One`替代循环单条查询[^5]
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值