作者:mobiledu2502856653 | 来源:互联网 | 2023-10-14 15:10
前言 什么是 Mybatis 环境搭建 Maven 依赖 mysql mysql-connector-java 5.1.40 runtime com.alibaba druid-spring-boot-starter 1.1.9
org.mybatis.spring.boot mybatis-spring-boot-starter 2.0.0
数据库连接池配置(Druid) ##单一数据源 spring.datasource.url=jdbc\:mysql\://127.0.0.1\:3306/vivachekcloud_pzhdermyy?useUnicode\=true&characterEncoding\=UTF-8&zeroDateTimeBehavior\=convertToNull&useSSL\=false spring.datasource.username=root spring.datasource.password=123456 spring.datasource.type=com.alibaba.druid.pool.DruidDataSource spring.datasource.driver-class-name=com.mysql.jdbc.Driver #初始化连接大小 spring.datasource.druid.initial-size=0 #连接池最大使用连接数量 spring.datasource.druid.max-active=20 #连接池最小空闲 spring.datasource.druid.min-idle=0 #获取连接最大等待时间 spring.datasource.druid.max-wait=6000 spring.datasource.druid.validation-query=SELECT 1 #spring.datasource.druid.validation-query-timeout=6000 spring.datasource.druid.test-on-borrow=false spring.datasource.druid.test-on-return=false spring.datasource.druid.test-while-idle=true #配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 spring.datasource.druid.time-between-eviction-runs-millis=60000 #置一个连接在池中最小生存的时间,单位是毫秒 spring.datasource.druid.min-evictable-idle-time-millis=25200000 #spring.datasource.druid.max-evictable-idle-time-millis= #打开removeAbandoned功能,多少时间内必须关闭连接 spring.datasource.druid.removeAbandoned=true #1800秒,也就是30分钟 spring.datasource.druid.remove-abandoned-timeout=1800 # spring.datasource.druid.log-abandoned=true spring.datasource.druid.filters=mergeStat #spring.datasource.druid.verifyServerCertificate #spring.datasource.filters=stat,wall,log4j # 通过connectProperties属性来打开mergeSql功能;慢SQL记录 spring.datasource.connectionProperties=druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
基础概念 配置 xml 文件存放的位置 application.properties 中设置 @org.springframework.context.annotation.Configuration @ConditionalOnClass({ SqlSessionFactory.class, SqlSessionFactoryBean.class }) @ConditionalOnSingleCandidate(DataSource.class) @EnableConfigurationProperties(MybatisProperties.class) @AutoConfigureAfter(DataSourceAutoConfiguration.class) public class MybatisAutoConfiguration implements InitializingBean {}
public class MybatisProperties {//前缀public static final String MYBATIS_PREFIX = "mybatis";/*** Mybatis配置文件的位置*/private String configLocation;/*** Mybatis的Mapper的xml文件的位置*/private String[] mapperLocations;
## xml文件放置在/src/main/resource/mapper/文件夹下 mybatis.mapper-locations=classpath*:/mapper/**/*.xml
配置类中设置 配置扫描 Mybatis 的 interface @Mapper @Mapper public interface UserInfoMapper {int insert(UserInfo record);int insertSelective(UserInfo record);}
@MapperScan @MapperScan({"com.xxx.dao"}) public class ApiApplication {}
基本的 crud 查询 SELECT name,age,id FROM PERSON WHERE ID = #{id}
Person selectPersonById(int id);
变更 insert into Author (id,username,password,email,bio)values (#{id},#{username},#{password},#{email},#{bio}) update Author setusername = #{username},password = #{password},email = #{email},bio = #{bio}where id = #{id} delete from Author where id = #{id}
#{}和${}的区别 自增 ID 的返回 关于 Mysql 的文章中有提到,设计一个表最好要有一个自增 ID,无论这个 ID 你是否用到,具体原因不在解释,可以翻看之前的文章。
有了自增 ID,插入之后并不能自动返回,但是我们又需要这个 ID 值,那么如何返回呢?
标签提供了两个属性用来解决这个问题,如下:
假设插入Person
,并且 person 表中的自增主键 id 需要返回,XML 文件如下:
insert into person(name,age)values(#{name},#{age});
SQL 代码片段 ${alias}.id,${alias}.username,${alias}.password
select , from some_table t1cross join some_table t2
开启驼峰映射 select user_id from user_info
上面的user_id
和User
中的userId
根本不对应,也就映射不进去,此时查询的结果就是 userId 是 null,当然我们可以使用别名的方式,SQL 可以改写为select user_id as userId from user_info
另外一种方式是不用别名,直接开启 Mybatis 的驼峰映射规则,会自动映射,开启的方式很简单,就是在application.properties
文件配置一下,如下:
mybatis.configuration.map-underscore-to-camel-case=true