Mybatis 输入映射和输出映射
来源:互联网 发布:最惨的动漫男主 知乎 编辑:程序博客网 时间:2024/06/05 20:41
1.如何使 Mapper.xml 文件和 Mapper 接口进行匹配 ?
(1) 接口的全类名要和 Mapper.xml 文件中的 namespace 对应 ! 默认Mapper.xml 文件和 Maper 接口需要在同一个包下。
<!--namespace: 名称空间. 是对当前 Mapper 文件的唯一标示.通常以 (实体类类名 + Mapper)结尾 -->< mapper namespace ="com.guigu.mybits.mapper.StudentMapper">......</ mapper>
(2) 接口中的方法名和所对应XML文件中的id相一致。
public interface StudentMapper { Student selectStudent(@Param("id") Integer StudentId); }
<!-- 映射一个查询语句 1. id 唯一标识改查询语句. 可以通过当前映射文件的 namespace 和 id 来唯一的定位到当前的 select. 2. resultType 指定返回值的类型. 通常为全类名. 3. 注意: 若类的属性名和数据表的列名不一致, 则可以使用别名--><select id="selectStudent" resultType="com.guigu.mybits.beans.Student" > select StudentId,Student_Name AS "StudentName",birth from students where StudentId = #{id}</select >
2. 关于为 Mapper 的方法传递参数
(1) 若传递一个参数, 则可以什么多不做. 在 Mapper.xml 文件中的参数名可以随便写.
建议使用 @Param 注解进行对应
在studentMapper.java中Student selectStudent(@Param("id") Integer id);
在StudentMapper.xml中<select id="selectStudent" resultType="com.atguigu.mybatis.beans.Student"> select id, last_name AS "lastName", birth from students where id = #{id}</select>
(2) 若传递多个参数, 则有 3 种方式.
① 传递一个对象. 然后使对象的 get方法对应的属性和 SQL 语句中的变量名相对应
void save(Student student);
<insert id="save"> INSERT INTO students (last_name, birth) VALUES (#{lastName}, #{birth} )</insert>
public class MyBitsTest { private ApplicationContext ctx = null; private StudentMapper studentMapper=null ; { ctx = new ClassPathXmlApplicationContext("beans.xml" ); studentMapper =ctx .getBean(StudentMapper.class); }@Test public void save1(){ Student student = new Student(); student.setStudentName( "hahah"); student.setBirth( new Date()); studentMapper.save(student); }}
② 传递一个 Map 类型的参数, 在具体使用参数时会调用 Map 的 get(参数名) 方法
void save3(Map<String, Object> params);
<insert id="save3"> INSERT INTO students(last_name, birth) VALUES(#{lastName}, #{birth})</insert>
@Test public void save3(){ Map<String,Object> params = new HashMap<>(); params.put( "StudentName","lmk" ); params.put( "birth",new Date()); studentMapper.save3(params); }
③ 使用多个 @Param 注解. 使变量名和 SQL 语句中变量名对应
void save2(@Param("lastName") String lastName,@Param("birth") Date birth);
<insert id="save2"> INSERT INTO students(last_name, birth) VALUES(#{lastName}, #{birth})</insert>
@Test public void save2(){ studentMapper.save2("abcd" ,new Date()); }
注意: 以上 3 种传递参数的方式不能混用.
3.parameterType(输入类型)
(1) 传递简单类型
参考上面的代码:使用#{}占位符,或者${}进行sql拼接。
(2) 传递pojo对象
参考上面的代码:Mybatis使用ognl表达式解析对象字段的值,#{}或者${}括号中的值为pojo属性名称。
(3) 传递pojo包装对象
查询条件可能是综合的查询条件,不仅包括用户查询条件还包括其它的查询条件(比如查询用户信息的时候,将用户购买商品信息也作为查询条件),这时可以使用包装对象传递输入参数。
包装对象:Pojo类中的一个属性是另外一个pojo。
4.resultType(输出类型)
(1) 输出简单类型
(2) 输出pojo对象
(3) 输出pojo列表
5.resultMap
resultType可以指定将查询结果映射为pojo,但需要pojo的属性名和sql查询的列名一致方可映射成功。
如果sql查询字段名和pojo的属性名不一致,可以通过resultMap将字段名和属性名作一个对应关系 ,resultMap实质上还需要将查询结果映射到pojo对象中。
resultMap可以实现将查询结果映射为复杂类型的pojo,比如在查询结果映射对象中包括pojo和list实现一对一查询和一对多查询。
需求:查询订单表order的所有数据
(1) 数据库
CREATE TABLE `orders` ( `id` int(11) NOT NULL AUTO_INCREMENT, `user_id` int(11) NOT NULL COMMENT '下单用户id', `number` varchar(32) NOT NULL COMMENT '订单号', `createtime` datetime NOT NULL COMMENT '创建订单时间', `note` varchar(100) DEFAULT NULL COMMENT '备注', PRIMARY KEY (`id`), KEY `FK_orders_1` (`user_id`), CONSTRAINT `FK_orders_id` FOREIGN KEY (`user_id`) REFERENCES `user` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8;
(2) Order对象:
package com.itheima.mybatis.pojo;import java.io.Serializable;import java.util.Date;public class Orders implements Serializable{ @Override public String toString() { return "Orders [id=" + id + ", userId=" + userId + ", number=" + number + ", createtime=" + createtime + ", note=" + note + "]"; } /** * */ private static final long serialVersionUID = 1L; private Integer id; private Integer userId; private String number; private Date createtime; private String note; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public Integer getUserId() { return userId; } public void setUserId(Integer userId) { this.userId = userId; } public String getNumber() { return number; } public void setNumber(String number) { this.number = number == null ? null : number.trim(); } public Date getCreatetime() { return createtime; } public void setCreatetime(Date createtime) { this.createtime = createtime; } public String getNote() { return note; } public void setNote(String note) { this.note = note == null ? null : note.trim(); }}
(3)Mapper.xml文件:创建OrderMapper.xml配置文件
<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd";><mapper namespace="com.itheima.mybatis.mapper.OrderMapper"> <resultMap type="Orders" id="orders"> <result column="user_id" property="userId"/> </resultMap> <select id="selectOrdersList" resultMap="orders"> SELECT id, user_id, number, createtime, note FROM orders </select></mapper>
(4) 编写接口如下:
public interface OrderMapper { // 查询订单表order的所有数据 public List<Orders> selectOrdersList();}
(5) 测试方法
public class MybatisMapperTest {// 查询订单表order的所有数据 @Test public void testOrderList() throws Exception { //加载核心配置文件 String resource = "sqlMapConfig.xml"; InputStream in = Resources.getResourceAsStream(resource); //创建SqlSessionFactory SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(in); //创建SqlSession SqlSession sqlSession = sqlSessionFactory.openSession(); OrderMapper mapper = sqlSession.getMapper(OrderMapper.class); List<Orders> ordersList = mapper.selectOrdersList(); for (Orders orders : ordersList) { System.out.println(orders); } }}
阅读全文
0 0
- mybatis 输入映射和输出映射
- mybatis进阶--输入映射和输出映射
- 【MyBatis】输入映射和输出映射
- Mybatis 输入映射和输出映射
- MyBatis中输入映射和输出映射
- Mybatis 输入和输出映射
- Mybatis 输入映射 输出映射 高级映射
- mybatis的输入和输出映射
- mybatis入门基础(四)----输入映射和输出映射
- 【MyBatis学习06】输入映射和输出映射
- mybatis入门基础(四)----输入映射和输出映射
- mybatis入门基础(四)----输入映射和输出映射
- mybatis入门基础(四)----输入映射和输出映射
- mybatis进阶--mapper输入映射和输出映射
- 【MyBatis学习06】输入映射和输出映射
- mybatis入门基础(四)----输入映射和输出映射
- 【MyBatis学习06】输入映射和输出映射
- MyBatis知识五 输入映射和输出映射
- JavaScript- 使用 atan2 来绘制 箭头 和 曲线
- 函数的 length 属性只能得到他的形参个数,而无法得知实参个数。
- tslib移植出现的小问题
- Android自定义View(三)--可点击的节点进度条
- 如何掌握所有的程序语言
- Mybatis 输入映射和输出映射
- IPU相关知识(二)
- QT界面设计并保存到文件(以JSON格式)
- [日推荐]『初次见』这里有故事,还有诗和远方!
- spring中的拦截器
- zabbix3.4 监控tomcat多实例(二)
- 没有通过申硕考试怎么办?
- Android mvc,mvp , mvvm三种设计模式的选择实践
- Coursera deep learning 吴恩达 神经网络和深度学习 第四周 编程作业 Building your Deep Neural Network