Mybatis进阶3--注解开发

先看:

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.mfbz.cn/a/596493.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

open-webui+ollama本地部署Llama3

前言 Meta Llama 3 是由 Meta 公司发布的下一代大型语言模型&#xff0c;拥有 80 亿和 700 亿参数两种版本&#xff0c;号称是最强大的开源语言模型。它在多个基准测试中超越了谷歌的 Gemma 7B 和 Mistral 7B Instruct 模型。 安装 1.gpt4all https://github.com/nomic-ai/…

记一次动态规划的采坑之旅, 741摘樱桃 https://leetcode.cn/problems/cherry-pickup/description/

首次看题目时&#xff0c;发现是困难。立马想到了&#xff0c;动态规划。 再看题目&#xff0c; 摘樱桃&#xff0c;还要返回摘两次&#xff0c;求摘最多的樱桃。 大脑第一反应就是&#xff1a; 先使用动态规划&#xff0c;找到 0 0 到 n-1 n-1处走过的最大樱桃&#xff0c; 并…

【码银送书第十九期】《图算法:行业应用与实践》

作者&#xff1a;嬴图团队 01 前言 在当今工业领域&#xff0c;图思维方式与图数据技术的应用日益广泛&#xff0c;成为图数据探索、挖掘与应用的坚实基础。本文旨在分享嬴图团队在算法实践应用中的宝贵经验与深刻思考&#xff0c;不仅促进业界爱好者之间的交流&#xff0c;…

AI不只是技术,更是一种思维方式

一、AI思维 1.个人&#xff1a;提升自己的综合能力&#xff0c;成为一名懂技术、懂设计、懂硬件、懂市场运营等知识的综合型人才 2.数据&#xff1a;从全局视角看数据流向&#xff0c;挖掘数据价值 3.产品&#xff1a;运用新技术&#xff0c;发掘新需求点&#xff0c;探索产…

AI智体的分级:从基于规则到基于LLM

摘要&#xff1a; AI智体被定义为感知环境、做出决策和采取行动的人工实体。受SAE&#xff08;汽车工程师学会&#xff09;自动驾驶6个级别的启发&#xff0c;AI智体也根据效用和强度进行分类&#xff0c;分为以下几个级别&#xff1a;L0——无AI&#xff0c;有工具&#xff0…

马常旭新歌《如愿》:音乐界的“旭日”再现

在这个春暖花开的季节&#xff0c;音乐界又迎来了一股清新的“旭日”气息。是的&#xff0c;就在2024年4月17日&#xff0c;马常旭的新歌《如愿》&#xff08;旭日版&#xff09;在网易云音乐上线了&#xff01;一年的等待&#xff0c;终于迎来了他的音乐回归&#xff0c;给我们…

C语言知识点补充——ASCLL码表

1、ASCLL码表 ASCII码表&#xff08;American Standard Code for Information Interchange&#xff09;是一种用于将字符编码为数字的标准。它定义了128个字符的编码方式&#xff0c;包括数字、字母、标点符号和控制字符等。每个字符都对应一个唯一的7位或8位二进制数 2、Ascl…

贪吃蛇项目(小白保姆级教程)

游戏介绍 游戏背景&#xff1a; 贪吃蛇游戏是经典的游戏项目之一&#xff0c;也是很简单的小游戏 实现背景&#xff1a; 这里我们是基于32位的Win32_API进行实现的 需要的知识点&#xff1a; C语言函数、枚举、结构体、动态内存管理、预处理指令、链表、Win32_API等 适合人群&a…

java中的字符串(String)常量池理解

下面创建String对象的方式一样吗&#xff1f; 上述程序创建对象类似&#xff0c;为什么s1和s2引用对象一样&#xff0c;但是s3和s4不一样呢&#xff1f; 在java程序中&#xff0c;许多基本类型的字面常量会经常用到&#xff0c;例如2,3.11&#xff0c;“hyy”等。为了提升程序…

C语言动态内存管理malloc、calloc、realloc、free函数、内存泄漏、动态内存开辟的位置等的介绍

文章目录 前言一、为什么存在动态内存管理二、动态内存函数的介绍1. malloc函数2. 内存泄漏3. 动态内存开辟位置4. free函数5. calloc 函数6. realloc 函数7. realloc 传空指针 总结 前言 C语言动态内存管理malloc、calloc、realloc、free函数、内存泄漏、动态内存开辟的位置等…

25.哀家要长脑子了---哈希表

1.525. 连续数组 - 力扣&#xff08;LeetCode&#xff09; 在我对通义千问的一番折磨下&#xff0c;终于弄清楚一点点了。哈希表存储前缀和数组值 用一个counter来记录nums中0、1数量差值的变化。 哈希表map存储某个特定的counter值首次出现的位置。counter的计算&#xff1a;…

【LeetCode 121】买卖股票的最佳时机

思路 思路&#xff1a; 所谓代码的复杂性来源于业务的复杂性&#xff0c;如果能够想清楚业务实现逻辑&#xff0c;就能够轻松写出代码&#xff1b; 假设当前是第i天&#xff0c;如何在第i天赚到最多的钱&#xff1f;需要在第i天之前以最低价买入股票&#xff1b; 所以需要求…

13 【PS作图】人物绘画理论-脸型

三庭五眼 三庭&#xff1a;脸的长度比例 &#xff08;1&#xff09;发际线到眉毛 &#xff08;2&#xff09;眉毛到鼻底 &#xff08;3&#xff09;鼻底到下巴 三个部分大致为三等分 五眼&#xff1a;脸的宽度比例 以眼睛长度为单位&#xff0c;把脸的宽度分成五等分&#x…

[极客大挑战 2019]PHP

1.通过目录扫描找到它的备份文件&#xff0c;这里的备份文件是它的源码。 2.源码当中涉及到的关键点就是魔术函数以及序列化与反序列化。 我们提交的select参数会被进行反序列化&#xff0c;我们要构造符合输出flag条件的序列化数据。 但是&#xff0c;这里要注意的就是我们提…

求解亲和数

【问题描述】 古希腊数学家毕达哥拉斯在自然数研究中发现&#xff0c;220的所有真约数&#xff08;即不是自身 的约数&#xff09;之和为&#xff1a; 1245101120224455110284。而284的所有真约数为1、2、4、71、142&#xff0c;加起来恰好为220。人 们对这样的数感到很惊奇&am…

五种主流数据库:窗口函数

SQL 窗口函数为在线分析系统&#xff08;OLAP&#xff09;和商业智能&#xff08;BI&#xff09;提供了复杂分析和报表统计的功能&#xff0c;例如产品的累计销量统计、分类排名、同比/环比分析等。这些功能通常很难通过聚合函数和分组操作来实现。 本文比较了五种主流数据库实…

嵌入式学习67-C++(多线程,自定义信号合槽,串口通信)

知识零碎&#xff1a; QmessageBox 报错提示框 GPS传感器获取到的 经纬度信息并不是真实的物理坐标&#xff0c;还需要转换 signals&#xff1a; …

【JAVA入门】Day03 - 数组

【JAVA入门】Day03 - 数组 文章目录 【JAVA入门】Day03 - 数组一、数组的概念二、数组的定义2.1 数组的静态初始化2.2 数组的地址值2.3 数组元素的访问2.4 数组遍历2.5 数组的动态初始化2.6 数组的常见操作2.7 数组的内存分配2.7.1 Java内存分配2.7.2 数组的内存图 一、数组的概…

234234235

c语言中的小小白-CSDN博客c语言中的小小白关注算法,c,c语言,贪心算法,链表,mysql,动态规划,后端,线性回归,数据结构,排序算法领域.https://blog.csdn.net/bhbcdxb123?spm1001.2014.3001.5343 给大家分享一句我很喜欢我话&#xff1a; 知不足而奋进&#xff0c;望远山而前行&am…

周刊是聪明人筛选优质知识的聪明手段!

这是一个信息过载的时代&#xff0c;也是一个信息匮乏的时代。 这种矛盾的现象在 Python 编程语言上的表现非常明显。 它是常年高居编程语言排行榜的最流行语言之一&#xff0c;在国外发展得如火如荼&#xff0c;开发者、项目、文章、播客、会议活动等相关信息如海如潮。 但…
最新文章