mybatis课程设计03--SQL的增删改查

燃尽图:

 

一、 MyBatis实现数据库操作01

1. 知识点引入

MyBatis操作数据库,在之前的内容中,已经实现了insert的操作。这里只是简单的照搬和使用,下面将对它们的使用方法做具体的解析。这次使用select操作,来具体说明一下mybatis操作数据库的使用方法。

2. 概念

select操作是数据库的查询操作,是SQL语句中非常常见的操作语句。

1.单条件查询

2.多条件查询

3. 无条件查询,查询信息列表时使用。

3. 示例 

//单条件查询

1.持久层接口中添加方法:User selectUserByUsername(String username)

按照条件username查找user信息

 

 

 

 

在映射的xml文件中添加SQL语句,如下:

 

 

 

这里应该重点指明两个地方:1.bean类的变量名和数据库表的字段是一致的,可以跟在select后面,直接查找。2.需要哪个字段的SQL查询结果,就把对应字段名(或bean的成员变量名)写在select后面即可,注意逗号隔开。

2.在持久层接口中添加方法:Integer selectUserByIdInteger id

根据id获取user对象

 

 

 

xml映射文件中添加SQL语句,如下:

 

 

 

当要查询的数据是表中所有字段时,可以直接使用符号*”来代替所有的。

这里可能已经注意到了,在select标签中有个属性“resultType”,这个字段是,当你的查询结果是一系列数据时,可以把这些数据封装到和数据库表相互对应的bean对象中。至于是怎么封装的,是mybatis来完成的。

值得一提的是,1.查询所需字段的数据时,把字段名跟在select后面,之间用逗号隔开即可;若查询的是所有字段数据,则可以用符号*来代替所有。2.上面的查询是建立在表的字段名和bean的变量名是一一对照,相同的。至于若有不同的情况,会在下面加以说明。

3.查询所有

在持久层接口添加方法:List<User> selectUserAll()

查询所有的user信息,返回list列表。

 

 

 

//xml映射文件中,添加SQL语句。

 

 

 

这里按理说是SQL操作的结果是一个list集合,但是在resultType中还是使用的bean类对象来接收的。是的,查询所有信息的列表,是一个集合,这个使用一个类对象接收接口,mybatis会自动检测,把多个user对象,封装成结果集。使用者只需把持久层方法的返回值数据类型,改为集合的形式即可。

 

4. 讲解思路

从常用的SQL语句的书写形式,引入xml映射文件的书写方式。从之前insert操作的形参user,引入SQL操作之后的返回数据类型user

根据需要,在select后跟上想要查询的字段名,多个字段的话,用逗号隔开即可。查询的数据会被mybatis封装到select标签中resultType标签指向的bean类对象中。

查询所有的信息列表时,在select标签中返回值数据类型resultType的内容仍然是和表对应的bean类。mybatis会把得到的user再次封装到结果集中,使用者只需在接口方法上配置正确的用来接收结果集的数据类型即可。

 

 

5. 提问

1.select操作时使用的字段名和使用符号*,各自代表怎么查询。

2.查询数据列表的数据封装是怎么实现的。

6. 小结

select查询时,后面跟多字段是查询对应字段的数据;后面跟符号*,是查询所有字段的数据。得到的查询结果,会被mybatis封装到select标签的resultType指向的bean类中。

当查询到的结果是一个信息列表时,返回数据类型resultType依旧是和表对应的bean类。mybatis会把查询到的结果集,封装成一个集合,使用者需要做的就是把持久层接口中的方法返回值数据类型,使用合适的集合来接收SQL操作的返回值。

 

 

二、 MyBatis实现数据库操作02

1. 知识点引入

在实际开发中,有很多的情况是数据库表的字段和bean类中的成员变量,不能够完全一一对应。针对这个问题,mybatis也有对应的解决办法。

7. 概念

在表字段和bean变量名不一致时,可以使用别名来达到数据的对应转移。

使用方法是在数据库字段后面加上bean类中对应的变量名即可。

8. 示例

//在持久层接口中添加方法:User02 selectUserByUsername(String username)

这里使用的User02是一个新建的类,里面的字段名和表的字段名不同。具体如下:

 

 

 

 

 

 

 

 

 

9. 讲解思路

1.l创建一个和表字段不一致的bean

2.l持久层接口中添加方法,返回值数据类型是新的bean

3.l在表字段和bean字段不一致的地方,使用别名。

 

10. 提问

1.使用符号*,必须要保证表字段和bean字段相互一致

2.怎么使用别名来解决表字段和bean字段不一致的问题?

11. 小结

在实际开发中,表字段和bean字段是很少一致的,但是使用mybatis也能解决这个字段不一致的问题。在xml映射文件的SQL语句中,select后面跟的字段名,如果和bean中的字段名不一致,那么就在该表字段名后面加上bean中想要对应的字段名。这种方法又称之为别名。

 

三、 多参数查询

1. 知识点引入

在实际开发中,不仅有单条件查询,还有很多的多条件查询的存在。在mybatis中,多条件查询有规定好的规则。

2. 概念

mybatis中多条件查询,不是简单的持久层接口方法的参数名和xml映射的SQL的字段名的一一对应。即使形参名和表字段名相对应,也不能正常操作数据库。

这里用到了mybatis的注解:@Param(“name”),在持久层接口方法的参数前面使用mybatis的注解@Param,里面自定义一个名字。之后在xml映射的SQL语句中使用#{name},即可把持久层接口方法的参数,传入到xml映射的SQL语句对应的位置。这样就能正常操作数据库了。

3. 示例

在持久层接口中添加方法

//多参数查询:

User selectUserByUsernamePassword(@Param("username")String username,@Param("password")String password);

 

 

 

 

mybatis注解@Param括号里面的字符串名字,引用的是后面对应的形参,在xml映射的SQL语句中,只需要在合适的位置,使用@Param注解里面的名字即可。如下:

 

 

 

4. 讲解思路

1.持久层接口的方法中,有多个参数传入xml映射的SQL语句中。mybatis不能像之前解析user类对象那样对应传入数据到SQL语句的指定位置,即使在SQL语句的指定位置用对应的方法对应的形参名字。想要解决这个问题,需要使用mybatis注解:@Param

2.mybatis注解@Param用在持久层接口方法的形参之前,param注解里面的名字,指向的是后面形参。在xml映射的SQL语句中,使用#{}引入注解@Param的名字,就能把持久层方法中的形参传到xml映射的SQL语句相对应的位置。

需要注意的是:当持久层接口方法中,只有一个形参时,是不需要用mybatis注解@Param的,这个是因为参数的唯一确定性。

5. 提问

1.持久层接口中方法有多个参数,怎么能正确的把形参传入指定的xml映射的SQL语句中

 

6. 小结

1.持久层接口方法中,有多个参数需要传入到xml映射的SQL语句中,这就需要使用mybatis的注解@Param了。该注解使用在持久层方法的参数之前,在@Param中定义一个注解名称,指向的是后面的形参。

2.通过mybatis的这层注解,可以在xml映射的SQL语句的需要位置调用持久层接口方法中的形参数据。这样就达到了持久层方法中多个形参和xml映射的SQL语句中限定条件的相互对应。

 

四、 SQL的增删改

1. 知识点引入

增删改在SQL操作中,有很大的相似性。通过JDBC的学习,了解到SQL的增删改的操作,返回值为受影响的行数。在这里,放在一起进行综合学习。

2. 概念

CURD是行业中SQL操作的增删改查操作的缩写,它们分别指的是:创建(Create)、更新(Update)、读取(Retrieve)和删除(Delete)操作。

3. 示例

在前面,已经学习过了insert操作,进行数据库信息的添加。这里对删除和修改进行展示:updatedelete

update

在持久层接口中添加方法

 

 

 

 

 

xml映射的SQL语句,如下:

 

 

delete

在持久层接口中添加方法

 

xml映射的SQL语句,如下:

 

 

 

 

 

 

update&delete的单元测试,如下:

 

4. 讲解思路

1.在之前学习JDBC时,做了DBUtil工具类。在工具类中,对SQL的操作,做了两种分类:a、查询。b、增删改。这是因为增删改在操作数据库时,有很多共同的特性,在操作完数据库之后,返回的是受影响的行数。

2.增:可以封装数据到类对象中,通过mybatis的解析,把数据添加到SQL语句的适当位置。

3.删:按条件删除,若持久层接口方法中的形参是基本数据类型(或者是其包装类)或者是String引用数据类型这几种数据类型,是不需要指定select标签中ParamType参数的数据类型。

4.改:update操作一般都有多个参数,在xml映射的SQL语句中是无法直接使用形参的,需要使用mybatis的注解@Param,注解的名字,指向的就是后面形参的数据,在xml映射的SQL语句中可以使用注解的名字,就间接的引入持久层接口方法的形参数据。

5. 提问

1.增删改和查的SQL操作,有哪些区别和联系

2.mybatis注解的使用方法?

 

6. 小结

1.select操作在SQL操作中,返回的是一个结果集。通过mybatis的处理,当只有一个查询结果是,直接返回一个和数据库表对应的bean对象。当查询结果是有多条数据,形成一个结果集,那么,持久层接口的对应方法,只用对应的集合类型接收即可。

2.增删改操作在SQL操作中,返回值是受影响的行数,可以比较持久层方法的返回值是否大于0,来判断是否操作数据库成功。

3.值得一提的是,当持久层接口的方法中有多个形参时,需要在每个形参前面加上mybatis注解@Param,注解名字指向的就是后面的形参数据,在xml映射的SQL语句中的适当位置使用注解名称,就能通过mybatis注解,间接地使xml映射的SQL引用到持久层接口方法中的形参数据。

 

百度云:

 

链接:https://pan.baidu.com/s/1XAlhb7PdBaRDAs4ucySrOQ
提取码:q1gd

 

posted @ 2020-09-07 09:39  好心晴  阅读(289)  评论(0)    收藏  举报