MyBatis数据输入,总体机制的概括
1. MyBatis数据输入
1.1 Mybatis总体机制概括
1.2 概念说明
注意:这里的简单类型不是指的基本数据类型。
1.3 单个简单类型参数
1.3.1 Mapper接口中的抽象方法
public interface EmpMapper { /** * 通过这个方法对应Mapper配置文件中的SQL语句 * @param empId 当前方法的参数对应SQL语句中#{empId}声明的参数 * @return 当前方法的返回值类型和resultType属性指定的类型一致 */ abstract public Emp selectById(long empId); } |
1.3.2 SQL语句
<!-- resultType属性:指定封装查询结果的Java实体类的全类名 Mybaits负责解析结果集,将解析得到的数据封装到设置的JavaBean类中。 --> <select id="selectById" resultType="com.hy.bean.Emp"> <!-- Mybatis负责把SQL语句中的#{empId}部分替换成"?"占位符 在#{}内部还是要声明一个见名知意的名称,一般与JavaBean中属性名保持一致 #{empId}这里是为了方便接收Java程序传过来的参数数据 --> select emp_id empId,emp_name empName,emp_pwd empPwd,emp_gender empGender , emp_salary empSalary from sys_emp where emp_id = #{empId} </select> |
1.4 复杂类型参数
1.4.1 实体类类型的参数
1) EmpMapper接口中抽象方法声明
abstract public int insert(Emp emp);
2)SQL语句
<insert id=”insert”>
insert into sys_emp(emp_name,emp_pwd,emp_gender,emp_salary)
values(#{empName},#{empPwd},#{empGender},#{empSalary})
</insert>
如果是实体类类型的参数,此时,#{}中的名字就不能随便写了,此时表达式中的名字,就需要和Emp实体类中getXxx方法名,去掉get,然后剩下的单词其首字母小写后的名字相对应。
mybaits会根据#{}表达式中的名字,根据反射机制,找到Emp中的getXxx方法,获取对应的数据。
1.4.2 对应关系如图:
1.5 零散的简单类型数据
1.6 Map类型参数
如果零散的简单类型太多了,可以使用Map类型
create table sys_emp( emp_id bigint auto_increment, emp_name varchar(20), emp_pwd varchar(20), emp_gender enum('m','f'), emp_salary double(10,5), primary key(emp_id) );
INSERT INTO `sys_emp` VALUES (null, '范冰冰', 'fbb', 'f', 100.5); INSERT INTO `sys_emp` VALUES (null, '李冰冰', 'lbb', 'f', 300); INSERT INTO `sys_emp` VALUES (null, '张彬彬', 'zbb', 'm', 599); INSERT INTO `sys_emp` VALUES (null, '万茜', 'wq', 'm', 4000); INSERT INTO `sys_emp` VALUES (null, '李若彤', 'lrt', 'm', 5000.8);
select * from `sys_emp`; |
2. Mybatis数据输出
2.1 返回单个简单类型
2.2 返回自增的主键
使用场景:保存订单Order对象 和 订单明细 List<OrderItem>。其中,OrderItem对应表t_order_item表,包含一个外键,指向t_order表中的主键。
insertWithKey,注意:返回值还是受影响的行数,它会将插入的主键,返回到传递过来对象指定的属性里面。
2.3 返回实体类型
假设我们没有写列的别名,则返回null,因为值无法注入,所以就算查询出来,也没意义,所以mybaits干脆返回一个null给你。
2.3.1 数据库表字段和实体类属性对应
给列的字段起别名
2.3.2 如何自动的进行匹配呢?
数据库表中字段的命名是按照规范来进行设计的emp_name,java类中的属性也是按规范设计的empName,那么每次都写别名感觉很麻烦,该如何处理???
2.4 返回Map类型
2.5 返回List类型
2.6 数据库表的字段和实体类属性的对应关系
2.6.1 给表的字段起别名
2.6.2 全局配置自动识别驼峰式命名规则
2.6.3 使用resultMap
使用resultMap标签定义对应关系,再再后面的SQL语句中引用这个对应关系。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性