MyBatis注解开发
1.加入mybatis的starter , mysql驱动(8…32)
pom
<!--mybatis启动器-->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>3.0.2</version>
</dependency>
<dependency>
<groupId>com.mysql</groupId>
<artifactId>mysql-connector-j</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter-test</artifactId>
<version>3.0.2</version>
<scope>test</scope>
</dependency>
</dependencies>
2.创建实体类 XXXPO ,XXXEntity ,XXXDomain
package com.powernode.mybatis.module;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* @author pigO
* @version 1.0
* @date 2023-10-11
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {
private String userId;
private String cardType;
private String cardNo;
private String userName;
private String userSex;
private String userAge;
private String userRole;
}
表
3.创建Mapper接口, 在接口中定义方法, 在方法的上面使用合适的注解
定义UserMapper
package com.powernode.mybatis.mapper;
import com.powernode.mybatis.module.User;
import org.apache.ibatis.annotations.*;
import org.springframework.stereotype.Repository;
/**
* @author pigO
* @version 1.0
* @date 2023-10-11
*/
@Repository
public interface UserMapper {
}
@Select: 查询 ,使用@Results和@Result做结果映射。
@Select("""
select user_id, card_type, card_no, user_name,
user_sex, user_age, user_role
from user
where user_id = #{userId}
""")
@Results(id = "baseResultMap", value = {
@Result(id = true, column = "user_id", property = "userId"),
@Result(column = "card_type", property = "cardType"),
@Result(column = "card_no", property = "cardNo"),
@Result(column = "user_name", property = "userName"),
@Result(column = "user_sex", property = "userSex"),
@Result(column = "user_age", property = "userAge"),
@Result(column = "user_role", property = "userRole"),
}
)
User selectById(@Param("userId") String id);
或者使用@ResultMap映射
@Results(id = "baseResultMap", value = {
@Result(id = true, column = "user_id", property = "userId"),
@Result(column = "card_type", property = "cardType"),
@Result(column = "card_no", property = "cardNo"),
@Result(column = "user_name", property = "userName"),
@Result(column = "user_sex", property = "userSex"),
@Result(column = "user_age", property = "userAge"),
@Result(column = "user_role", property = "userRole"),
}
)
@Select("")
User userMapper();
@Select("""
select user_id, card_type, card_no, user_name,
user_sex, user_age, user_role
from user
where user_id = #{userId}
""")
@ResultMap("baseResultMap")
User selectById(@Param("userId") String id);
运行结果
@Insert:新增
@Insert("""
insert into user (user_id, card_type, card_no, user_name, user_sex, user_age, user_role)
values (#{userId}, #{cardType}, #{cardNo}, #{userName}, #{userSex}, #{userAge}, #{userRole})
""")
int insertUser(User user);
运行结果
@Update: 更新
@Update("""
update user set user_name = #{userName} where user_id = #{userId}
""")
int updateUserName(String userId, String userName);
运行结果
@Delete: 删除
@Delete("""
delete from user where user_id = #{userId}
""")
int deleteUserById(String userId);
运行结果
4.在启动上面,加入@MapperScan
@MapperScan(basePackages = “com.powernode.mybatis.mapper”)
package com.powernode.mybatis;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@MapperScan(basePackages = "com.powernode.mybatis.mapper")
@SpringBootApplication
public class Lesson05MybatisApplication {
public static void main(String[] args) {
SpringApplication.run(Lesson05MybatisApplication.class, args);
}
}
5.application.properties
1) 定义数据库连接
2) mybatis设置
日志
驼峰命名支持
# 配置数据源
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/springmvc?serverTimezone=Asia/Shanghai&userUnicode=true&characterEncoding=utf8&autoReconnect=true&useSSL=false
spring.datasource.username=root
spring.datasource.password=0602
#驼峰命名
mybatis.configuration.map-underscore-to-camel-case=true
#日志
mybatis.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
一对一
@Results({
@Result(id = true, column = "id", property = "id")
@Result(column = "user_id", property = "userId")
@Result(column = "title", property = "title")
@Result(column = "summary", property = "summary"),Result(column ="read_count",property = "readCount")
@Result(column = "create_time", property = "createTime")
@Result(column = "update_time",property = "updateTime")
//articleDetail 为一个对象时,可以使用@One注解
@Result(column ="id", property = "articleDetail"
one = @One(select = "com.bjpowernode.mybatis.mapper.ArticleoneToOneMapper.selectDetail"fetchType = FetchType.LAZY))//懒加载
}
Article selectAlArticle(Integer id);
一对多
@Results({
@Result(id = true, column = "id", property = "id")
@Result(column = "user_id", property = "userId")
@Result(column = "title", property = "title")
@Result(column = "summary", property = "summary"),Result(column ="read_count",property = "readCount")
@Result(column = "create_time", property = "createTime")
@Result(column = "update_time",property = "updateTime")
//articleDetail 为多个值时,可以使用@Many注解
@Result(column = "id", property = "comments"
many = @Many(select = "com.bjpowernode.mybatis.mapper,ArticleCommentMapper,selectComments",
fetchType = FetchType .LAZY))//懒加载
}
ArticleEntity selectArticleComment(Integer id);
连接池设置
spring:
datasource:
type: com.zaxxer.hikari.HikariDataSourcedriver-class-name: com.mysql.cj.jdbc.Driverurl:jdbc:mysql://localhost:3306/blog?serverTimezone=Asia/Shanghaiusername: root
password: 123456
hikari:
auto-commit: true# # connections = ((cpu 核心数*2) + 磁盘数量)近似值。默认 10maximum-pool-size: 10
#最小连接数,默认 10,不建议设置。默认与maximum-pool-size 一样大小。推荐使用固定大小的连接池
minimum-idle: 10
#获取连接时,检测语句
connection-test-query: select 1
#
#连接超时,默认 30 秒
# 控制客户端在获取池中 Connection 的等待时间,
# 如果没有连接可用的情况下超过该时间,则抛出 SQLException 异常
##
connection-timeout: 20000
#其他属性
data-source-properties:cachePrepStmts: truedataSource.cachePrepStmtst: truedataSource.prepStmtCacheSize: 250dataSource.prepStmtCacheSqlLimit: 204dataSource.useServerPrepStmts: true
MyBatis的项设置,在application 文件中“mybatis”开头进行设置全部设置参考:https://mybatis.org/mybatis-3/zh/configuration.html#settings