目录
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,