MyBatis使⽤动态SQL注解@SelectProvider、@InrtProvid。。。
MyBatis使⽤动态SQL注解@SelectProvider、@InrtProvider、@UpdateProvider、
@DeleteProvider
MyBatis 3.x 版本提供了以下4个CRUD的⾼级注解。
@SelectProvider:⽤于构建动态查询SQL。
@InrtProvider:⽤于构建动态新增SQL。
@UpdateProvider:⽤于构建动态更新SQL。
@DeleteProvider:⽤于构建动态删除SQL。
动态SQL注解主要⽤于编写动态SQL。这⾥以@SelectProvider为例,它主要包含两个注解属性,其中,type表⽰⼯具类,method表⽰⼯具类的某个⽅法(⽤于返回具体的SQL语句)。
⼀、准备⼯作
1.创建数据表
-- 判断数据表是否存在,存在则删除
DROP TABLE IF EXISTS tb_ur;
-- 创建“⽤户信息”数据表
CREATE TABLE IF NOT EXISTS tb_ur
(
ur_id INT AUTO_INCREMENT PRIMARY KEY COMMENT'⽤户编号',
ur_name VARCHAR(50)NOT NULL COMMENT'⽤户名称',
blog_url VARCHAR(50)NOT NULL COMMENT'博客地址',
blog_remark VARCHAR(50)COMMENT'博客备注'
)COMMENT='⽤户信息表';
-- 添加数据
INSERT INTO tb_ur(ur_name,blog_url,blog_remark)VALUES('拒绝熬夜啊的博客','/weixin_43296313/','您好,欢迎访问拒绝熬夜啊的博客');
2.添加l配置信息
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.38</version>
</dependency>
<dependency>
<groupId&batis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.3</version>
</dependency>
3.配置相关信息
spring:
#DataSource数据源
datasource:
url: jdbc:mysql://localhost:3306/mybatis_test?uSSL=fal&
白银盘里一青螺的上一句urname: root
password: root
driver-class-name: sql.jdbc.Driver
#MyBatis配置
mybatis:
type-alias-package: hl10mybatisdynamicsqlanno.api.pojo #别名定义
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl #指定 MyBatis 所⽤⽇志的具体实现,未指定时将⾃动查找map-underscore-to-camel-ca:true#开启⾃动驼峰命名规则(camel ca)映射
lazy-loading-enabled:true#开启延时加载开关
aggressive-lazy-loading:fal#将积极加载改为消极加载(即按需加载),默认值就是fal
lazy-load-trigger-methods:""#阻挡不相⼲的操作触发,实现懒加载
cache-enabled:true#打开全局缓存开关(⼆级环境),默认值就是true
4.创建实体类
package;
import AllArgsConstructor;
import Data;
import NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class UrInfo {
private int urId;//⽤户编号
private String urName;//⽤户名称
private String blogUrl;//博客地址
private String blogRemark;//博客备注
}
5.创建mapper层
package;
import UrInfo;
import*;
import SQL;
import Repository;
@Mapper
@Repository
public interface UrMapper {
/**
* 根据⽤户ID,获取⽤户信息
*/
@SelectProvider(type = UrSqlBuilder.class, method ="buildGetUrByIdSql")
public UrInfo getUrById(@Param("urId")int urId);
/**
* 新增⽤户,并获取⾃增主键
*/
@InrtProvider(type = UrSqlBuilder.class, method ="buildInrtUrSql")
@Options(uGeneratedKeys =true, keyColumn ="ur_id", keyProperty ="urId")
public int inrtUr(UrInfo ur);
/**
* 修改⽤户
* 修改⽤户
*/
爱因斯坦的发明有哪些
@UpdateProvider(type = UrSqlBuilder.class, method ="buildUpdateUrSql")
public int updateUr(UrInfo ur);
/**
怎么炸酥肉
* 删除⽤户
*/
@DeleteProvider(type = UrSqlBuilder.class, method ="buildDeleteUrSql")
public int deleteUr(@Param("urId")int urId);
//建议将SQL Builder以映射器接⼝内部类的形式进⾏定义
public class UrSqlBuilder {
public String buildGetUrByIdSql(@Param("urId")int urId){
return new SQL(){
{
SELECT("*");
FROM("tb_ur");
WHERE("ur_id = #{urId}");
}
}.toString();
}
public String buildInrtUrSql(UrInfo ur){
return new SQL(){
{
10寸蛋糕几个人吃INSERT_INTO("tb_ur");
VALUES("ur_name","#{urName}");
VALUES("blog_url","#{blogUrl}");
VALUES("blog_remark","#{blogRemark}");
}
}.toString();
}
public String buildUpdateUrSql(UrInfo ur){
return new SQL(){
{
UPDATE("tb_ur");
SET("ur_name = #{urName} ,blog_url=#{blogUrl} ,blog_remark=#{blogRemark}");
WHERE("ur_id = #{urId}");
屏幕一直闪}
}.toString();
}
public String buildDeleteUrSql(@Param("urId")int urId){
return new SQL(){
{
DELETE_FROM("tb_ur");
WHERE("ur_id = #{urId}");
}
}.toString();
}
关于勤奋的议论文}
}
6.启动类
package;
import MapperScan;
import SpringApplication;
import SpringBootApplication;
@SpringBootApplication
@MapperScan(baPackages ="hl10mybatisdynamicsqlanno.api.mapper") public class Hl10MybatisDynamicSqlAnnoApplication {
public static void main(String[] args){
SpringApplication.run(Hl10MybatisDynamicSqlAnnoApplication.class, args);
}
}
⼆、测试
查询操作
/**
* 根据⽤户ID,获取⽤户信息
* @author pan_junbiao
*/
@Test
public void getUrById(){
//获取⽤户编号为1的⽤户信息
UrInfo urInfo = UrById(1);
//打印结果
System.out.println("⽤户编号:"+ UrId());
System.out.println("⽤户姓名:"+ UrName());
System.out.println("博客地址:"+ BlogUrl());
System.out.println("备注信息:"+ BlogRemark());
}
手机话费查询结果
新增操作
/**
* 新增⽤户,并获取⾃增主键
* @author pan_junbiao
*/
@Test
public void inrtUr()
{
//创建新⽤户
UrInfo urInfo = UrById(1);
urInfo.tUrName("拒绝熬夜啊的博客");
urInfo.tBlogUrl("/weixin_43296313/");
urInfo.tBlogRemark("您好,欢迎访问拒绝熬夜啊的博客");
//执⾏新增操作
int result = urMapper.inrtUr(urInfo);
//打印结果
System.out.println("新增⽤户完成!");
System.out.println("执⾏结果:"+ result);
System.out.println("⾃增主键:"+ UrId());
}
执⾏结果
修改操作
/**
* 修改⽤户
* @author pan_junbiao
*/
@Test
public void updateUr(){
//修改⽤户
UrInfo urInfo = UrById(2);
urInfo.tUrName("拒绝熬夜啊的博客_02");
urInfo.tBlogUrl("/weixin_43296313/"); urInfo.tBlogRemark("您好,欢迎访问拒绝熬夜啊的博客");
//执⾏修改操作
int result = urMapper.updateUr(urInfo);
//打印结果
党的历史简述System.out.println("修改⽤户完成!");
System.out.println("修改结果:"+ result);
}
执⾏结果
删除操作
/**
* 删除⽤户
* @author pan_junbiao
*/
@Test
public void deleteUr(){
//执⾏修改操作
int result = urMapper.deleteUr(2);
//打印结果
System.out.println("删除⽤户完成!");
System.out.println("删除结果:"+ result);
}
执⾏结果