MyBatis框架-开发方式+参数传递+#{}、${}+返回值处理+查询结果封装为对象+resultType

本文主要是介绍MyBatis框架-开发方式+参数传递+#{}、${}+返回值处理+查询结果封装为对象+resultType,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、开发方式

MyBatis-Dao层Mapper接口化开发

二、注意事项

1、Mapper接口与Mapper.xml映射文件要满足4个对应

(1)Mapper接口的全类名必须与Mapper映射文件中的namespace相同

(2)Mapper接口中的每一个方法名在Mapper映射文件中都要有一个id为方法名的标签相对应

(3)Mapper映射文件中的标签的参数类型必须与Mapper接口中的对应方法的参数类型相同

(4)Mapper映射文件中的标签的结果类型必须与Mapper接口中的对应方法的结果类型相同

三、参数传递

1、单参数传递

直接使用方法的参数名传递参数

Admin findAdminById(int id);
<select id="findAdminById" parameterType="int" resultType="Admin">select * from admin where id = #{id}</select>

2、少参数传递

使用注解标签传递参数

Admin login(@Param("acc") String account, @Param("pwd") String password);
<select id="login" resultType="Admin">select * from admin where account = #{acc} and password = #{pwd}</select>

3、多参数传递

使用对象传递参数

void saveAdmin(Admin admin);
<insert id="saveAdmin" parameterType="admin">insert into admin(account,password,gender)value(#{account},#{password},#{gender})</insert>

注意:执行增删改sql语句时必须要提交数据库事务(一次与数据库交互的过程管理)

两种提交数据库事务的方式

方式一

给定参数设置为自动提交数据库事务

sqlSessionFactory.openSession(true);

方式二

调用方法手动提交数据库事务

sqlSession.commit();

对比两种方式,最好使用第二种,可以使得多条sql在遇到异常时保持状态一致,要么都提交成功,要么都提交失败,避免出现交钱不下单问题

四、#{}表达式和${}表达式

1、#{}表达式

(1)作用:传递参数值

(2)传递方式:预编译方式传递

(3)优点:安全,避免出现or 1=1表内数据全部删除的情况

2、${}表达式

(1)作用:传递列名

(2)传递方式:字符串拼接方式传递

(3)优点:

优点一:通过加‘’可实现参数值传递

优点二:可以实现排序列名传递数据显示列名传递两个功能

五、insert标签的3个属性,获取插入数据的主键值

1、useGeneratedKeys 设置方法是否返回此条数据的主键值

2、keyColumn 设置类中谁来接收主键值

3、keyProperty 设置表中谁为主键(只针对当前返回主键值这个过程)

 <insert id="saveAdmin" parameterType="admin" useGeneratedKeys="true" keyColumn="id" keyProperty="id">insert into admin(account,password,gender)value(#{account},#{password},#{gender})</insert>

六、单元测试

1、功能:实现对单个方法进行测试

2、配置:

将junit包导入到项目中

<dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version><scope>provided</scope>
</dependency>

3、使用:注意:单元测试的方法必须是public访问权限修饰符

@Testpublic void find(){System.out.println("你好");}

七、查询接口

1、返回值为一个值

int findAdminCount();
<select id="findAdminCount" resultType="java.lang.Integer">select count(*) from admin</select>

2、返回值为一个对象

Admin findAdminById(int id);
<select id="findAdminById" parameterType="int" resultType="Admin">select * from admin where id = #{id}</select>

3、返回值为多个对象

List<Admin> findAdmins();
<select id="findAdmins" resultType="com.ffyc.mybatispro.model.Admin">select * from admin</select>

注意:必须使用集合去接收返回回来的多个对象,否则就会

八、单表自动将查询结果中的记录封装为一个对象需要注意的事项

1、模型类中一定要有无参构造方法,否则就会

并且在模型类中一定要对私有属性全部实现get和set方法

2、数据库表中的列名一定要与对应模型类中的属性名相同,否则就会

快捷方式:java中使用标准驼峰命名,数据库中使用下划线连接命名,可以开始全局设置实现自动转换,即就是adminPhone与admin_phone相对应

实现方式:在全局配置中添加此配置

<setting name="mapUnderscoreToCamelCase" value="true"/>

九、方法中传递String类型的参数时,必须使用注解标签@Param与参数值绑定才能将将参数值正确传到sql中,否则就会

正确做法:

List<Admin> findAdmins(@Param("col") String col);
<select id="findAdmins" resultType="com.ffyc.mybatispro.model.Admin" parameterType="string">select * from admin order by ${col}</select>

十、resultType特殊处理结果集

1、作用:

处理模型类的属性名与数据库列名不对应的问题

2、使用

<resultMap id="adminMap" type="admin"><id property="id" column="id"></id><result property="account" column="account"></result><result property="password" column="password"></result><result property="gender" column="gen"></result><result property="adminPhone" column="admin_phone"></result></resultMap><select id="findAdminById" parameterType="int" resultMap="adminMap">select id,password,account,gen as gender,admin_phone from admin where id = #{id}</select>

解析:resultMap中的id属性是POJO类,是唯一标识,sql语句的查询结果被对应的resultMap接收,type属性是结果类,内部的id标签映射主键,result标签映射非主键,property设置POJO类的属性名,column设置查询结果的列名

这篇关于MyBatis框架-开发方式+参数传递+#{}、${}+返回值处理+查询结果封装为对象+resultType的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1026451

相关文章

mybatis的整体架构

mybatis的整体架构分为三层: 1.基础支持层 该层包括:数据源模块、事务管理模块、缓存模块、Binding模块、反射模块、类型转换模块、日志模块、资源加载模块、解析器模块 2.核心处理层 该层包括:配置解析、参数映射、SQL解析、SQL执行、结果集映射、插件 3.接口层 该层包括:SqlSession 基础支持层 该层保护mybatis的基础模块,它们为核心处理层提供了良好的支撑。

无人叉车3d激光slam多房间建图定位异常处理方案-墙体画线地图切分方案

墙体画线地图切分方案 针对问题:墙体两侧特征混淆误匹配,导致建图和定位偏差,表现为过门跳变、外月台走歪等 ·解决思路:预期的根治方案IGICP需要较长时间完成上线,先使用切分地图的工程化方案,即墙体两侧切分为不同地图,在某一侧只使用该侧地图进行定位 方案思路 切分原理:切分地图基于关键帧位置,而非点云。 理论基础:光照是直线的,一帧点云必定只能照射到墙的一侧,无法同时照到两侧实践考虑:关

活用c4d官方开发文档查询代码

当你问AI助手比如豆包,如何用python禁止掉xpresso标签时候,它会提示到 这时候要用到两个东西。https://developers.maxon.net/论坛搜索和开发文档 比如这里我就在官方找到正确的id描述 然后我就把参数标签换过来

【生成模型系列(初级)】嵌入(Embedding)方程——自然语言处理的数学灵魂【通俗理解】

【通俗理解】嵌入(Embedding)方程——自然语言处理的数学灵魂 关键词提炼 #嵌入方程 #自然语言处理 #词向量 #机器学习 #神经网络 #向量空间模型 #Siri #Google翻译 #AlexNet 第一节:嵌入方程的类比与核心概念【尽可能通俗】 嵌入方程可以被看作是自然语言处理中的“翻译机”,它将文本中的单词或短语转换成计算机能够理解的数学形式,即向量。 正如翻译机将一种语言

cross-plateform 跨平台应用程序-03-如果只选择一个框架,应该选择哪一个?

跨平台系列 cross-plateform 跨平台应用程序-01-概览 cross-plateform 跨平台应用程序-02-有哪些主流技术栈? cross-plateform 跨平台应用程序-03-如果只选择一个框架,应该选择哪一个? cross-plateform 跨平台应用程序-04-React Native 介绍 cross-plateform 跨平台应用程序-05-Flutte

Spring框架5 - 容器的扩展功能 (ApplicationContext)

private static ApplicationContext applicationContext;static {applicationContext = new ClassPathXmlApplicationContext("bean.xml");} BeanFactory的功能扩展类ApplicationContext进行深度的分析。ApplicationConext与 BeanF

数据治理框架-ISO数据治理标准

引言 "数据治理"并不是一个新的概念,国内外有很多组织专注于数据治理理论和实践的研究。目前国际上,主要的数据治理框架有ISO数据治理标准、GDI数据治理框架、DAMA数据治理管理框架等。 ISO数据治理标准 改标准阐述了数据治理的标准、基本原则和数据治理模型,是一套完整的数据治理方法论。 ISO/IEC 38505标准的数据治理方法论的核心内容如下: 数据治理的目标:促进组织高效、合理地

ural 1026. Questions and Answers 查询

1026. Questions and Answers Time limit: 2.0 second Memory limit: 64 MB Background The database of the Pentagon contains a top-secret information. We don’t know what the information is — you

Thymeleaf:生成静态文件及异常处理java.lang.NoClassDefFoundError: ognl/PropertyAccessor

我们需要引入包: <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-thymeleaf</artifactId></dependency><dependency><groupId>org.springframework</groupId><artifactId>sp

Spring+MyBatis+jeasyui 功能树列表

java代码@EnablePaging@RequestMapping(value = "/queryFunctionList.html")@ResponseBodypublic Map<String, Object> queryFunctionList() {String parentId = "";List<FunctionDisplay> tables = query(parent