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);

测试:
 

 @Testpublic 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);

测试

 @Testpublic 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 "";
}

测试

 @Testpublic 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.hqwc.cn/news/670683.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用docker安装redis

使用docker安装redis ①拉取镜像 docker pull redis:6.2.6② 创建容器 docker run -d --name forum-redis --restartalways -p 6379:6379 redis:6.2.6 redis-server --requirepass "dong97"③链接测试 打开Redis Desktop Manager&#xff0c;输入host、port、pas…

MySQL之查询 拿下 * 。*

DQL数据查询语言 对上述的的查询操作进行代码演示&#xff08;续上一篇学生表代码进行处理&#xff09; 下面是上一篇的代码分享 下面进行简单的查询操作 字符串如果强行进行算数运算默认只为0 查询时常用的单行函数列举 未完待续

【005_音频开发_基础篇_ALSA_Codec_驱动-MA120x0P功放】

005_音频开发_基础篇_ALSA_Codec_驱动-MA120x0P功放 文章目录 005_音频开发_基础篇_ALSA_Codec_驱动-MA120x0P功放创作背景MA120X0P输出模式BTLSEPBTLSEBTL 硬件配置方式/硬件Limiter限幅器限幅器作用过程 主要寄存器操作指令 ma120x0p.cma120x0p.h 创作背景 学历代表过去、能…

OpenNJet应用引擎——云原生时代的Web服务新选择

文章目录 OpenNJet应用引擎——云原生时代的Web服务新选择引言&#xff1a;数字化转型的推动力&#xff1a;OpenNJet应用引擎为什么选择OpenNJet&#xff1f; OpenNJet的核心优势1. 云原生功能增强2. 安全加固3. 代码重构与性能优化4. 动态加载机制5. 多样化的产品形态6. 易于集…

Python批量修改图片文件名中的指定名称

批量处理图像时&#xff0c;图片名有时需要统一&#xff0c;本教程仅针对图片中名如&#xff1a;0001x4.png&#xff0c;批量将图片名中的x4去除&#xff0c;只留下0001.png的情况。 如果想要按照原图片顺序批量修改图片名&#xff0c;参考其它博文&#xff1a;按照原顺序批量…

Day13-JavaWeb开发-事务管理(回顾/进阶)AOP基础(入门/概念)AOP进阶(通知类型/顺序/切点表达式)AOP案例

1. 事务管理 1.1 事务管理-事务回顾 1.2 事务管理-事务进阶 rollbackFor propagetion 2. AOP基础 2.1 AOP基础-快速入门 2.2 AOP基础-核心概念 3. AOP进阶 3.1 AOP进阶-通知类型 3.2 AOP进阶-通知顺序 3.3 切入点表达式-execution 3.4 切入点表达式-annottation 3.5 AOP进阶…

KAN:Kolmogorov–Arnold Networks

KAN: Kolmogorov–Arnold Networks 论文链接&#xff1a;https://arxiv.org/abs/2404.19756 代码链接&#xff1a;https://github.com/KindXiaoming/pykan 项目链接&#xff1a;https://kindxiaoming.github.io/pykan/intro.html Abstract 受Kolmogorov-Arnold表示定理的启…

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

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

Sarcasm detection论文解析 |基于情感背景和个人表达习惯的有效讽刺检测方法

论文地址 论文地址&#xff1a;https://link.springer.com/article/10.1007/s12559-021-09832-x#/ 论文首页 笔记框架 基于情感背景和个人表达习惯的有效讽刺检测方法 &#x1f4c5;出版年份:2022 &#x1f4d6;出版期刊:Cognitive Computation &#x1f4c8;影响因子:5.4 &…

【LeetCode刷题记录】437. 路径总和 III

437 路径总和 III 给定一个二叉树的根节点 root &#xff0c;和一个整数 targetSum &#xff0c;求该二叉树里节点值之和等于 targetSum 的 路径 的数目。 路径 不需要从根节点开始&#xff0c;也不需要在叶子节点结束&#xff0c;但是路径方向必须是向下的&#xff08;只能从…

商城数据库88张表结构完整示意图41~50(十二)

四十一&#xff1a; 四十二&#xff1a; 四十三&#xff1a; 四十四&#xff1a; 四十五&#xff1a; 四十六&#xff1a; 四十七&#xff1a; 四十八&#xff1a; 四十九&#xff1a; 五十&#xff1a;

双重检验锁方式实现单例模式

单例模式&#xff08;Singleton Pattern&#xff09;&#xff1a;是指在内存中只会创建且仅创建一次对象的设计模式。在程序中多次使用同一个对象且作用相同时&#xff0c;为了防止频繁地创建对象使得内存飙升&#xff0c;单例模式可以让程序仅在内存中创建一个对象&#xff0c…