java后台管理系统项目学习day07--mybatis集合用法和$注意事项

这篇博客详细介绍了mybatis中集合的使用,包括array、list和map的用法,以及如何处理排序、CRUD操作和转义字符问题。强调了在使用#{}和${}时的注意事项,以及自动提交事务和防止SQL注入的方法。最后总结了mybatis处理多值传递的策略和最佳实践。
摘要由CSDN通过智能技术生成

1、指定字段排序练习:

1-1、按照age排序

1-1-1、测试类中添加代码

在这里插入图片描述

代码如下:

 /*
    3、按照name排序,默认是升序排序
     */
    @Test
    public void findOrderName(){
   
        Demo_User_Mapper demo_user_mapper = session.getMapper(Demo_User_Mapper.class);
        String column = "age";
        List<Demo_User> list =demo_user_mapper.find4(column);
        System.out.println(list);
        session.close();
    }

1-1-2、接口中添加代码

在这里插入图片描述
代码如下:

List<Demo_User> find4(String column);

1-1-3、映射文件添加代码

在这里插入图片描述
添加代码如下:

 <!---根据字段name排序,默认排序是升序排序-->
    <select id="find4" resultType="com.gt.pojo.Demo_User">
        select * from demo_user order by #{
   column}
    </select>

1-1-4、测试结果

运行测试代码后,发现排序的结果是错的
在这里插入图片描述
然后修改数据库中的SQL语句后,发现排序的结果却一样了
在这里插入图片描述
所以通过两者的对比后,发现是一对分号引起的,那么就说明在mybatis中使用#{参数}获取数据时,会默认的给数据添加一对" "号

1-1-4-1、使用${}来解决

数据库查询结果和代码中查询结果保持一致,说明问题解决
在这里插入图片描述
解决的原因:因为使用#{}可以预编译,SQL语句中将参数替换成了?号,
而使用${}获取数据时,他是直接把参数传递过来了
在这里插入图片描述

1-1-4-2、补充说明(语法规范)

1、使用#{参数} 获取数据时,默认有预编译的效果,也可以防止sql注入攻击,并且默认为数据添加一对" "号.
2、如果以 字段名称 为参数来获取数据时,一般使用${}方式,但是 这种方式一定要慎重再慎重使用.,因为有可能出现 sql注入攻击问题

2、CRUD操作

mybatis中核心知识基本已经讲完,现在进行CUD练习,前面几乎都在讲R,那这里就不单独拿出来测试了。
C:Create增加
R:Retrieve查询
U:Update修改
D:Delete删除

2-1、C操作

2-1-1、测试类中添加代码

在这里插入图片描述
代码如下:

//插入名为二哈,年纪3,性别雄
    @Test
    public void creat(){
   
        Demo_User_Mapper demo_user_mapper = session.getMapper(Demo_User_Mapper.class);
        //因为只插入一条数据,所以用new对象的方式插入数据
        //由于在数据库中id是主键自增,因此id可以为null
        Demo_User user = new Demo_User(null,"二哈",3,"雄");
        //目的是为了知道数据是否插入
        int rows = demo_user_mapper.creatUser(user);
        System.out.println("受影响行数"+rows);
        session.close();
    }

2-1-2、接口中添加代码

在这里插入图片描述
代码如下:

int creatUser(Demo_User user);

2-1-3、映射文件添加代码

在这里插入图片描述
代码如下:

<!-- 插入名为二哈,年纪3,性别雄
      1、mybatis在执行插入操作,会自动返回影响的行数,比如在数据库中
        只要执行完sql语句都会反馈n行受影响。
      2、mybatis规定:在执行插入或者更新操作时,是没有resultType这个属性的
   -->
    <insert id="creatUser" >
        insert into demo_user value (null,#{
   name},#{
   age},#{
   sex})
    </insert>

2-1-4、测试结果

运行测试如下
在这里插入图片描述
为了验证数据是否真的插入,打开数据库确认
在这里插入图片描述
经过检查确认发现,sql明明执行了,但是数据库里没有数据

2-1-5 事务提交

上述情况出现原因:因为使用的mybatis是原生的。所以mybatis规定:默认事务是开启的,当进行插入或者更新时,需要事务提交,那这样数据才能进入数据库

1、事务的概念:是应用程序中一系列严密的操作,所有操作必须成功完成,否则在每个操作中所作的所有更改都会被撤消。
2、结束事务有两种情况:
第一种:当事务中的所以步骤全部成功执行时,事务提交。
第二种:如果其中一个步骤失败,将发生回滚操作,撤消撤消之前到事务开始时的所有操作。
3、事务有4个特点(简称ACID):
------------------------原子性:一个事务是不可分割的最小单位,事务中包含的各操作要么都做,要么都不做。

------------------------一致性:一个事务在执行之前和执行之后都必须处于一致性状态。
->>>事务执行的结果必须是使数据库从一个一致性状态变到另一个一致性状态。因此当数据库 只包含成功事务 提交的结果时,就说 数据库处于一致性状态。如果数据库系统 运行中发生故障,有些事务尚未完成就 被迫中断,这些未完成事务对数据库所做的修改却有一部分已经完成,那这时数据库就处于一种不正确的状态,这就是 不一致的状态

--------------------------隔离性:一个事务的执行不能其它事务干扰。即一个事务内部的操作及使用的数据对其它并发事务是隔离的,并发执行的各个事务之间不能互相干扰
->>>就好比你上厕所时,不影响你玩手机打游戏,自己意会啊!!!!

--------------------------持久性:也称永久性,指一个事务一旦提交,它对数据库中的数据的改变就应该是永久性的,接下来的不管什么其它操作或故障不应该对其执行结果有任何影响。
->>>你和你女朋友谈恋爱,你许诺你女朋友:爱他爱的海枯石烂,永远只爱她一个人

在测试的代码中进行修改
在这里插入图片描述

修改代码如下:

 //插入名为二哈,年纪3,性别雄
    /**
     * 事务说明:mybatis中默认是开启事务的
     *         所以在进行插入或者更新操作时,
     *         必须要提交事务的
     */
    @Test
    public void creat(){
   
        Demo_User_Mapper demo_user_mapper = session.getMapper(Demo_User_Mapper.class);
        //因为只插入一条数据,所以用new对象的方式插入数据
        //由于在数据库中id是主键自增,因此id可以为null
        Demo_User user = new Demo_User(null,"二哈",3,
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值