美文网首页
Mybatis知识day02 CRUD操作

Mybatis知识day02 CRUD操作

作者: 小陈工 | 来源:发表于2022-04-16 07:24 被阅读0次

一、基于代理 Dao 实现 CRUD 操作

1.1 mybatis 环境搭建步骤:

第一步:创建 maven 工程 

第二步:导入坐标 

第三步:编写必要代码(实体类和持久层接口) 

第四步:编写 SqlMapConfig.xml 

第五步:编写映射配置文件 

第六步:编写测试类

1.2 查询操作

1.2.1 在持久层接口IUserDao中添加 findById 方法:

                User findById(Integer userId);

1.2.2 在用户的映射配置文件IUserDao.xml中配置:

参数说明:

        resultType属性: 用于指定结果集的类型。

        parameterType 属性:用于指定传入参数的类型。

        sql 语句中使用#{}字符: 它代表占位符,相当于原来 jdbc 部分所学的?,都是用于执行语句时替换实际的数据。 具体的数据是由#{}里面的内容决定的。 

1.2.3 在测试类中添加测试:

1.3 保存操作

1.3.1 在持久层接口IUserDao中添加方法:

                int saveUser(User user);

1.3.2 在用户的映射配置文件IUserDao.xml中配置:

参数说明: 

                parameterType 属性: 代表参数的类型,因为我们要传入的是一个类的对象,所以类型就写类的全名称。

                #{}中内容的写法: 由于我们保存方法的参数是 一个 User 对象,此处要写 User 对象中的属性名称。 它用的是 ognl 表达式。 

                ognl 表达式: 它是 apache 提供的一种表达式语言,全称是: Object Graphic Navigation Language 对象图导航语言,它是按照一定的语法格式来获取数据的。 语法格式就是使用 #{对象.对象}的方式。 

                #{user.username}它会先去找 user 对象,然后在 user 对象中找到 username 属性,并调用 getUsername()方法把值取出来。但是我们在 parameterType 属性上指定了实体类名称,所以可以省略 user. 而直接写 username。

1.3.3 添加测试类中的测试方法:

1.3.4 问题扩展:新增用户 id 的返回值:新增用户后,同时还要返回当前新增用户的 id 值,因为 id 是由数据库的自动增长来实现的,所以就相当于我们要在新增后将自动增长 auto_increment 的值返回。

1.4 更新操作

1.4.1 在持久层接口中添加更新方法:

                int updateUser(User user);

1.4.2 在用户的映射配置文件中配置:

1.4.3 加入更新的测试方法:

1.5  删除操作:

1.5.1 在持久层接口中添加删除方法:

                int deleteUser(Integer userId);

1.5.2 在用户的映射配置文件中配置:

1.5.3 加入删除的测试方法:

1.6 模糊查询操作:

1.6.1 在持久层接口中添加模糊查询方法:

            List findByName(String username);

1.6.2 在用户的映射配置文件中配置:

1.6.3 加入模糊查询的测试方法:

我们在配置文件中没有加入%来作为模糊查询的条件,所以在传入字符串实参时,就需要给定模糊查询的标识%。配置文件中的#{username}也只是一个占位符,所以 SQL 语句显示为“?”

1.6.4 模糊查询的另一种配置方式:

1.6.5 #{}与${}的区别: 

#{}表示一个占位符号:通过#{}可以实现preparedStatement向占位符中设置值,自动进行 java 类型和 jdbc 类型转换, #{}可以有效防止 sql 注入。 #{}可以接收简单类型值或 pojo 属性值。 如果parameterType 传输单个简单类型值,#{}括号中可以是 value 或其它名称。 

${}表示拼接sql 串,通过${}可以将parameterType传入的内容拼接在sql中且不进行 jdbc类型转换, ${}可以接收简单类型值或pojo属性值,如果parameterType传输单个简单类型值,${}括号中只能是value。

1.7 查询使用聚合函数查询总记录数:

1.7.1 在持久层接口中添加模糊查询方法:

                int findTotal();

1.7.2 在用户的映射配置文件中配置:

1.7.3 加入聚合查询的测试方法

1.8 Mybatis 与 JDBC 编程的比较:

1、数据库链接创建、释放频繁造成系统资源浪费从而影响系统性能,如果使用数据库链接池可解决此问题。 

解决: 在 SqlMapConfig.xml 中配置数据链接池,使用连接池管理数据库链接。 2、

2、Sql 语句写在代码中造成代码不易维护,实际应用 sql 变化的可能较大,sql 变动需要改变 java 代码。 

解决: 将 Sql 语句配置在 XXXXmapper.xml 文件中与 java 代码分离。 

3、向 sql 语句传参数麻烦,因为 sql 语句的 where 条件不一定,可能多也可能少,占位符需要和参数对应。 

解决: Mybatis 自动将 java 对象映射至 sql 语句,通过 statement 中的 parameterType 定义输入参数的 类型。 

4.对结果集解析麻烦,sql 变化导致解析代码变化,且解析前需要遍历,如果能将数据库记录封装成 pojo 对 象解析比较方便。 

解决: Mybatis 自动将 sql 执行结果映射至 java 对象,通过 statement 中的 resultType 定义输出结果的 类型。

二、SqlMapConfig.xml配置文件

2.1 SqlMapConfig.xml 中配置的内容和顺序:

2.2 properties(属性)

2.2.1 在使用 properties 标签配置时,我们可以采用两种方式指定属性配置:

    第一种就是在xml文件中配置

    第二种在classpath下定义db.properties文件:

2.2.2 properties 标签配置:

2.3 typeAliases(类型别名)

2.3.1 自定义别名:

相关文章

网友评论

      本文标题:Mybatis知识day02 CRUD操作

      本文链接:https://www.haomeiwen.com/subject/iopcertx.html