Mybatis进阶3--注解开发

news2024/11/22 15:47:36

先看:

Mybatis进阶1-CSDN博客

Mybatis进阶2-CSDN博客

mybatis注解开发

前置:不需要xxxMapper..xml文件(映射文件)

在核心配置文件中:<mappers>标签只能使用:<package name="扫描的包"/>;

@Insert注解

@Insert("插入的sql语句")

BrandMapper接口:

 /**
     *
     * @param brand 品牌类型
     * @return 返回受改变的行数
     */
    @Insert("insert into brand(name, people, status) VALUE (#{name},#{people},#{status})")
    public int addBrand(Brand brand);

测试:
 

 @Test
    public void testaddBrand()
    {
        SqlSession sqlSession=MybatisUtil.openSession();
        BrandMapper mapper = sqlSession.getMapper(BrandMapper.class);

        Brand brand=new Brand();
        brand.setName("小米");
        brand.setPeople(200);
        brand.setStatus(1);
        int i = mapper.addBrand(brand);
        if(i>0)
        {
            System.out.println("添加成功");
            sqlSession.commit();
        }
        sqlSession.close();

    }

结果:

可见注解开发不用写Mapper.xml(映射文件) 

@Select注解

BrandMapper接口:
 

 /**
     * 查询所有品牌信息
     * @return 返回品牌数组
     */
    @Select("select id, name, people, status from brand;")
    public List<Brand> findAllBrand();

    /**
     * 根据品牌id查询某个品牌的全部信息
     * @param id 要查询品牌的id
     * @return 返回某个品牌对象
     */
    @Select("select id, name, people, status from brand where id=#{id};")
    public Brand findBrandById(int id);

 /**
     * 根据多条件查询数据
     * @param name 品牌名
     * @param status 品牌状态
     * @return 返回品牌对象
     */
    @Select("select id, name, people, status from brand where name=#{name} and status=#{status};")
    public Brand findByCondition(@Param("name") String name, @Param("status") int status);

主键回填

 /**
     *
     * @param brand 品牌类型
     * @return 返回受改变的行数
     */
    @Insert("insert into brand(name, people, status) VALUE (#{name},#{people},#{status})")
    @Options(useGeneratedKeys = true,keyColumn = "id",keyProperty = "id")
    public int addBrand(Brand brand);

keyColumn是主键字段名字,keyProperty是Brand类的成员变量

当查询结果中的列名和实体类的属性名不一致时@Results

1.在SQL语句中,给列名起别名

2.在核心配置文件中,配置驼峰映射(解决下划线)

3.使用resultMap标签,设置查询结果和实体类的映射关系

4.(注解方法):使用@Results注解 

/**
     * 根据品牌id查询某个品牌的全部信息
     * @param id 要查询品牌的id
     * @return 返回某个品牌对象
     */
    @Select("select id as brand_id, name, people, status from brand where id=#{id};")
    @Results(id="BrandMap",
    value= {
            @Result(column = "brand_id",property = "id",id = true),//id属性是表明该字段是主键
            @Result(column = "name",property = "name")
    })
    public Brand findBrandById(int id);

 模糊查询

select id, name, people, status from brand where name like '%华%';
select id,name,people,status from brand where name like concat('%','华','%');

这两种方法都可以进行模糊查询,但是在java开发中,我们使用第二种,这样才可以使用

#{key}的方式取值。

/**
     * 通过name模糊查询
     * @param name 要查询的名字
     * @return 返回Brand对象数组
     */
    @Select("select id,name,people,status from brand where name like concat('%',#{name},'%')")
    public List<Brand> findBrandByLike(String name);

测试

 @Test
    public void testFindBrandByLike()
    {
        SqlSession sqlSession = MybatisUtil.openSession();
        BrandMapper mapper = sqlSession.getMapper(BrandMapper.class);
        List<Brand> brands = mapper.findBrandByLike("华");
        for (Brand brand : brands) {
            System.out.println(brand);
        }
    }

动态sql

我们要模糊查询某个品牌的名字,如果没有输入名字,,就查询status为1的所有品牌名

这个需求就需要使用动态SQL语句了

我们需要在dao层新创建一个MySqlProvider类

public class MySqlProvider {
    public String findNameByLike( String name)//拼接字符串
    {
        String sql="select id, name, people, status from brand where status=1 ";
        if(name!=null&&!(name.equals("")))
        {
            sql+=" and name like concat('%',#{name},'%')";
        }
        return sql;
    }
}

 BrandMapper接口

    @SelectProvider(type = MySqlProvider.class,method = "findNameByLike")//接收组装后的sql语句
    public List<Brand> findBrandByLike( String name);

@selectProvider源码

@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD})
public @interface SelectProvider {
    Class<?> type();

    String method() default "";
}

测试

 @Test
    public void testFindBrandByLike()
    {
        SqlSession sqlSession = MybatisUtil.openSession();
        BrandMapper mapper = sqlSession.getMapper(BrandMapper.class);
        List<Brand> brands = mapper.findBrandByLike(null);
        for (Brand brand : brands) {
            System.out.println(brand);
        }
    }

结果:

权限管理

1.权限        //相当于 职责

2.用户        //相当于 职员(职员就职于一个职位)

3.角色        //相当于 职位(有多个职责) 

权限管理基础表:权限表,用户表,角色表

问题1:一个用户可以有多个角色吗  y

问题2:一个角色可以被多个用户使用吗 y

问题3:一个角色可以有多个权限吗 y

问题4:一个权限可以被多个角色使用 y

权限管理需要的表:用户表<=用户角色表=>角色表<=角色权限表=>权限表

这就是权限5张表

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1647028.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

visio studio 中.NET Core(.net8.0)框架和.net framewok 框架有什么区别?

更新vs到2022版本后&#xff0c;新建项目时就多出不少选项&#xff0c;这里来个大家分享下.NET Core&#xff08;.net8.0&#xff09;框架和.net framewok的区别 如下图&#xff0c;不带后缀的就是使用.NET Core框架&#xff0c;后续选项是.net8.0。 .net framewok框架选项&am…

PDF高效编辑:一键批量,PDF转图片的快速解决方案

在数字化时代&#xff0c;PDF文件已成为工作和学习中不可或缺的一部分。然而&#xff0c;有时我们可能需要将PDF转换为图片&#xff0c;以便更轻松地编辑、共享或处理。为了满足这一需求&#xff0c;许多高效的PDF编辑工具应运而生&#xff0c;其中“办公提效工具”一键批量PDF…

ESP8266做主机 手机网络助手为从机

ATCIFSR查看地址&#xff0c;一般ESP8266 为192.168.4.1 在手机上下载网络调试助手&#xff0c;打开TCP客户端 创建后192.168.4.1 端口8089然后连接ESP8266热点。 ESP向手机发数据前先发送要发几个数据ATCIPSEND0,8表示发8个&#xff0c;然后再发8个数 上面创建好热点后&…

MFC实现点击列表头进行排序

MFC实现点击列表头排序 1、添加消息处理函数 在列表窗口右键&#xff0c;类向导。选择 IDC_LIST1&#xff08;我的列表控件的ID&#xff09;&#xff0c;消息选择LVN_COLUMNCLICK。 2、消息映射如下 然后会在 cpp 文件中生成以下函数 void CFLashSearchDlg::OnLvnColumnclic…

权益商城系统源码,支持多种支付方式

权益商城系统源码&#xff0c;支持多种支付方式&#xff0c;后台商品管理&#xff0c;订单管理&#xff0c;串货管理&#xff0c;分站管理&#xff0c; 会员列表&#xff0c;分销日志&#xff0c;应用配置。 上传到服务器&#xff0c;修改数据库信息&#xff0c;导入数据库&a…

rust调用SQLite实例

rusqlite库介绍 Rusqlite是一个用Rust编写的SQLite库&#xff0c;它提供了对SQLite数据库的操作功能。Rusqlite的设计目标是提供一个简洁易用的API&#xff0c;以便于Rust程序员能够方便地访问和操作SQLite数据库。 Rusqlite的主要特点包括&#xff1a; 遵循Rust的类型系统和…

Mysql数据在磁盘上的存储结构

一. 前言 一行数据的存储格式大致如下所示: 变长字段的长度列表&#xff0c;null值列表&#xff0c;数据头&#xff0c;column01的值&#xff0c;column02的值&#xff0c;column0n的值… 二. 变长字段 在MySQL里有一些字段的长度是变长的&#xff0c;是不固定的&#xff0c;…

21_Scala集合_可变数组ArrayBuffer

文章目录 ArrayBuffer1.创建可变数组ArrayBuffer2.增加数据3.删除数据4.修改数据5.查询数据Appendix ArrayBuffer ArrayBuffer可变数组–感觉优点类似于Java的ArrayList 1.创建可变数组ArrayBuffer –请注意下面的mutable import scala.collection.mutable.ArrayBuffer //m…

在Linux上使用Selenium驱动Chrome浏览器无头模式

大家好&#xff0c;我们平时在做UI自动化测试的时候&#xff0c;经常会用到Chrome浏览器的无头模式&#xff08;无界面模式&#xff09;&#xff0c;并且将测试代码部署到Linux系统中执行&#xff0c;或者平时我们写个爬虫爬取网站的数据也会使用到&#xff0c;接下来和大家分享…

前端框架 Vue 主要用来做什么的?

Vue.js 是一个流行的前端框架&#xff0c;主要用于构建交互式的用户界面。它的设计目标是通过简单的 API 提供高效的数据驱动视图层。Vue 具有响应式数据绑定和组件化的特性&#xff0c;使得开发者可以轻松地构建复杂的单页面应用 (SPA) 和动态网页。 1. 数据驱动视图 Vue 的…

IIS部署vue项目 IIS重写URL

【第一步】安装IIS {1&#xff09;打开控制面板 -> 打开程序和功能 -> 打开启用或关闭windows功能 &#xff08;2&#xff09;找到 Internet Information Services 勾选【web管理工具】和【万维网服务】&#xff0c;然后 确定 【第二步】安装URL重写模块 1). 安装URL …

企业微信hook接口协议,ipad协议http,设置是否自动同意

设置是否自动同意 参数名必选类型说明uuid是String每个实例的唯一标识&#xff0c;根据uuid操作具体企业微信 请求示例 {"uuid":"bc4800492083fdec4c1a7e5c94","state":1 //1 是需要验证同意&#xff08;需要手动点击同意&#xff09; 0关闭验证…

下一代自动化,国外厂商如何通过生成性AI重塑RPA?

企业自动化的未来趋势是什么&#xff1f;科技巨头们普遍认为&#xff0c;由生成性AI驱动的AI Agent将成为下一个重大发展方向。尽管“AI Agent”这一术语尚无统一定义&#xff0c;但它通常指的是那些能够根据指令通过模拟人类互动&#xff0c;在软件和网络平台上执行复杂任务的…

Skywalking的重要功能详解

学习本篇文章之前首先要了解一下Sky walking的基础知识 分布式链路追踪工具Sky walking详解 一&#xff0c;Sky walking监控数据库 在admin服务中&#xff0c;连接数据库查询user表中所有数据 引入依赖 <dependency><groupId>mysql</groupId><artifactI…

分享几个.NET开源的AI和LLM相关项目框架

前言 现如今人工智能&#xff08;AI&#xff09;技术的发展可谓是如火如荼&#xff0c;它们在各个领域都展现出了巨大的潜力和影响力。今天大姚给大家分享4个.NET开源的AI和LLM相关的项目框架&#xff0c;希望能为大家提供一些参考。如果你有更好的推荐&#xff0c;欢迎RP投稿或…

YOLOv5入门(四)训练自己的目标检测模型

前言 通过前面几篇文章&#xff0c;已经完成数据集制作和环境配置&#xff08;服务器&#xff09;&#xff0c;接下来将继续实践如何开始训练自己数据集~ 往期回顾 YOLOv5入门&#xff08;一&#xff09;利用Labelimg标注自己数据集 YOLOv5入门&#xff08;二&#xff09;处…

Oceanbase all-in-one单机版部署,通过MySQL客户端连接OB租户,DBEAVER 客户端连接MySQL租户。

一.Oceanbase all-in-one单机版部署 1.修改资源限制。 vim /etc/security/limits.conf root soft nofile 655350 root hard nofile 655350 * soft nofile 655350 * hard nofile 655350 * soft stack unlimited * hard stack unlimited * soft nproc 655360 * hard nproc 6553…

webstorm 常用插件

安装插件步骤&#xff1a; 打开软件&#xff0c;文件 -- 设置-- 插件 -- 输入插件名称 -- 安装 代码截图: code screenShots 先选中代码&#xff0c;按 ctrl shift alt a&#xff0c;就可截取选中的代码颜色注释: comments highlighter 对注释的文字改变颜色高亮成对符号: h…

RK3568 学习笔记 : 精简 u-boot env 默认复杂的多种引导启动设置

前言 环境&#xff1a; 正点原子 Atompi-CA1 RK3568 开发板、正点原子 DLRK3568 开发板&#xff0c;&#xff08;一时脑热买了两块 RK3568 开发板&#xff09;&#xff0c;Atompi-CA1 RK3568 开发板比较小巧&#xff0c;利于一些前期的嵌入式 Linux 开发学习与实践。 RK3568 开…

分享5款PDF编辑软件

PDF编辑不易&#xff0c;有需要的朋友可以试试这5款专业软件&#xff0c;每一个都能直接在PDF文件上编辑&#xff0c;不同的软件对PDF可编辑的范围不同&#xff0c;大家可以按需求选用。 1.edge浏览器 Edge浏览器不仅是浏览网页的得力助手&#xff0c;还悄然成为了轻量级PDF管…