前言
这里主要说两种方式来连接MySQL。
小型项目可以直接用JdbcTemplate。
大型项目可以考虑集成Mybatis。
还有一个JPA的方式
https://www.psvmc.cn/article/2024-01-16-spring-jpa.html
Spring Data JPA 是基于 Hibernate 的,所有优缺点也很明显。
优点
- 可以不用写SQL。
- 可以自动建表。
缺点
- 性能会差一点。
- 灵活性相对较低。
版本匹配
Spring Boot最新的版本报错
降低版本就可以了
https://www.psvmc.cn/article/2024-01-15-idea-jdk-version.html
添加依赖
1 | <dependency> |
配置
application.properties配置文件中增加数据库参数,信息内容如下:
1 | spring.datasource.url=jdbc:mysql://127.0.0.1:3306/zbi_source |
Mapper
如果你的项目需求相对简单,对代码的可读性和维护性要求较高,可以选择注解方式;
如果你的项目需求比较复杂,对动态SQL的需求较多,或者你更倾向于将数据访问逻辑与Java代码分离的方式,可以选择XML配置方式。
注解方式
两种方式任选其一即可。
配置扫描的方式
方式1
添加@Mapper
和@Repository
注解,这样就不用在Application中配置扫描的包了。
UserMapper.java
1 | package cn.psvmc.zapicall.mapper; |
方式2
不配置注解,在Application中添加扫描的包。
UserMapper.java
1 | package cn.psvmc.zapicall.mapper; |
Application上要添加注解
1 | "cn.psvmc.zapicall.mapper") ( |
简单的语句只需要使用@Insert、@Update、@Delete、@Select这4个注解即可,动态SQL语句需要使用@InsertProvider、@UpdateProvider、@DeleteProvider、@SelectProvider等注解。
具体可参考MyBatis官方文档:https://mybatis.org/mybatis-3/zh_CN/java-api.html。
映射字段
1 | "select * from t_user where id=#{id}") ( |
添加判断条件
在 MyBatis 中使用注解的方式编写 Mapper ,您可以通过使用 @SelectProvider
注解来添加判断条件。
@SelectProvider
注解允许您指定一个 Provider 类,该类包含根据不同条件生成 SQL 语句的方法。
首先,创建一个 Provider 类,它包含生成 SQL 语句的方法。
方法的参数可以接受不同的参数,根据这些参数生成不同的 SQL 语句。
这里以生成一个包含条件判断的查询语句为例:
1 | public class UserProvider { |
然后,在 Mapper 接口的方法上使用 @SelectProvider
注解,并指定 Provider 类和方法:
1 | import cn.psvmc.cxzapi.model.UserModel; |
现在,您可以在调用 Mapper 方法时传入不同的条件,以根据条件生成不同的 SQL 语句:
1 | List<UserModel> result = userMapper.getUserListByNameAndAge("林",10); |
注意
在编写动态 SQL 语句时,使用XML方式的时候可以使用 MyBatis 提供的条件判断标签,如
<if>
、<choose>
等,以动态生成不同的查询条件。但在注解方式下,无法直接使用这些标签,需要通过自定义 Provider 方法来实现判断条件的拼装。
XML方式
添加扫描配置
application.properties
中添加配置
1 | mybatis.mapper-locations=classpath*:mapper/*.xml |
映射类
UserMapper.java
1 | package cn.psvmc.zapicall.mapper; |
XML
resources
中 添加mapper
文件夹 在文件夹中新建
UserMapper.xml
1 |
|
mybatis.type-aliases-package
配置后我们的实体类的包名就可以省略了
上面的可以简写为:
1 |
|
其它示例
1 |
|
jdbcType
在MyBatis中,jdbcType用于定义数据库和Java类型之间的映射关系。
它是通过XML映射文件或注解来配置的。
jdbcType的值可以是以下之一:
- VARCHAR:对应于Java中的String类型。
- CHAR:对应于Java中的String类型。
- LONGVARCHAR:对应于Java中的String类型。
- NCHAR:对应于Java中的String类型。
- NVARCHAR:对应于Java中的String类型。
- CLOB:对应于Java中的String类型。
- NUMERIC:对应于Java中的BigDecimal类型。
- DECIMAL:对应于Java中的BigDecimal类型。
- BIT:对应于Java中的Boolean类型。
- BOOLEAN:对应于Java中的Boolean类型。
- TINYINT:对应于Java中的Byte类型。
- SMALLINT:对应于Java中的Short类型。
- INTEGER:对应于Java中的Integer类型。
- BIGINT:对应于Java中的Long类型。
- REAL:对应于Java中的Float类型。
- FLOAT:对应于Java中的Double类型。
- DOUBLE:对应于Java中的Double类型。
- BINARY:对应于Java中的byte array类型。
- VARBINARY:对应于Java中的byte array类型。
- LONGVARBINARY:对应于Java中的byte array类型。
- DATE:对应于Java中的java.sql.Date类型。
- TIME:对应于Java中的java.sql.Time类型。
- TIMESTAMP:对应于Java中的java.sql.Timestamp类型。
其他示例
1 |
|
插件
为了方便开发我们可以安装插件MyBatisX
实体类
1 | package cn.psvmc.zapicall.bean; |
Service
UserService.java
1 | package cn.psvmc.zapicall.service; |
Controller
1 | package cn.psvmc.zapicall.controller; |
日志打印
SQL执行打印日志
1 | mybatis.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl |
设置日志格式
1 | logging.pattern.console=%green([%d{yyyy-MM-dd HH:mm:ss.SSS}]) %cyan(%thread) %highlight(%-5level) %magenta(%logger{36}) %yellow(%L) - %gray(%msg%n) |
访问
启动项目,通过浏览器访问: