mybatis一对一

mybatis入门使用

对着背影说爱祢 提交于 2019-12-02 21:30:00
1.编写mybatis.xml文件 <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"><configuration><!-- 配置 mybatis 的环境 --><environments default="mysql"><!-- 配置 mysql 的环境 --><environment id="mysql"><!-- 配置事务的类型 --><transactionManager type="JDBC"></transactionManager><!-- 配置连接数据库的信息:用的是数据源(连接池) --><dataSource type="POOLED"><property name="driver" value="com.mysql.jdbc.Driver"/><property name="url" value="jdbc:mysql://localhost:3306/ee50"/><property name="username" value="root"/><property name="password" value="1234"/></dataSource></environment><

MyBatis 示例-联合查询

人盡茶涼 提交于 2019-12-02 18:15:20
简介 MyBatis 提供了两种联合查询的方式,一种是嵌套查询,一种是嵌套结果。先说结论:在项目中不建议使用嵌套查询,会出现性能问题,可以使用嵌套结果。 测试类:com.yjw.demo.JointQueryTest,提供了对 嵌套查询 和 嵌套结果 的测试。 数据库表模型关系 学生信息级联模型关系: 链接 学生信息级联模型关系是一个多种类型关联关系,包含了如下几种情况: 其中学生表是我们关注的中心,学生证表和它是一对一的关联关系; 而学生表和课程成绩表是一对多的关系,一个学生可能有多门课程; 课程表和课程成绩表也是一对多的关系; 学生有男有女,而健康项目也有所不一,所以女性学生和男性学生的健康表也会有所不同,这些是根据学生的性别来决定的,而鉴别学生性别的就是鉴别器。 关联关系 在联合查询中存在如下几种对应关系: 一对一的关系; 一对多的关系; 多对多的关系,实际使用过程中是把多对多的关系分解为两个一对多的关系,以降低关系的复杂度; 还有一种是鉴别关系,比如我们去体检,男女有别,男性和女性的体检项目并不完全一样; 所以在 MyBatis 中联合分为这么3种:association、collection 和 discriminator。 association:代表一对一关系; collection:代表一对多关系; discriminator:代表鉴别器

Mybatis--resultType和resultMap

半城伤御伤魂 提交于 2019-12-02 16:33:28
一、概述 MyBatis中在查询进行select映射的时候,返回类型可以用resultType,也可以用resultMap,resultType是直接表示返回类型的,而resultMap则是对外部ResultMap的引用,但是resultType跟resultMap不能同时存在。 在MyBatis进行查询映射时,其实查询出来的每一个属性都是放在一个对应的Map里面的,其中键是属性名,值则是其对应的值。 ①当提供的返回类型属性是resultType时,MyBatis会将Map里面的键值对取出赋给resultType所指定的对象对应的属性。所以其实MyBatis的每一个查询映射的返回类型都是ResultMap,只是当提供的返回类型属性是resultType的时候,MyBatis对自动的给把对应的值赋给resultType所指定对象的属性。 ②当提供的返回类型是resultMap时,因为Map不能很好表示领域模型,就需要自己再进一步的把它转化为对应的对象,这常常在复杂查询中很有作用。 二、ResultType Blog.java public class Blog { private int id; private String title; private String content; private String owner; private List<Comment>

Mybatis面试题汇总

老子叫甜甜 提交于 2019-12-02 16:32:56
1、什么是Mybatis? Mybatis是一个半ORM(对象关系映射)框架,它内部封装了JDBC,开发时只需要关注SQL语句本身,不需要花费精力去处理加载驱动、创建连接、创建statement等繁杂的过程。程序员直接编写原生态sql,可以严格控制sql执行性能,灵活度高。 MyBatis 可以使用 XML 或注解来配置和映射原生信息,将 POJO映射成数据库中的记录,避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。 通过xml 文件或注解的方式将要执行的各种 statement 配置起来,并通过java对象和 statement中sql的动态参数进行映射生成最终执行的sql语句,最后由mybatis框架执行sql并将结果映射为java对象并返回。(从执行sql到返回result的过程)。 2、Mybaits的优点: 基于SQL语句编程,相当灵活,不会对应用程序或者数据库的现有设计造成任何影响,SQL写在XML里,解除sql与程序代码的耦合,便于统一管理;提供XML标签,支持编写动态SQL语句,并可重用。 与JDBC相比,减少了50%以上的代码量,消除了JDBC大量冗余的代码,不需要手动开关连接; 很好的与各种数据库兼容(因为MyBatis使用JDBC来连接数据库,所以只要JDBC支持的数据库MyBatis都支持) 能够与Spring很好的集成; 提供映射标签

mybatis框架中XxxxMaper.xml的文件

房东的猫 提交于 2019-12-02 16:32:13
我们知道在mybatis框架中,config.xml中会关联到许多的XxxxMapper的xml文件,这些文件又对应着一个个的接口,来观察下这些xml文件 从以下这个文件为例子: <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.briup.mappers.StudentMapper"> 首先是如何执行sql语句 <insert id="insertStudent" parameterType="Student"> INSERT INTO STUDENTS(STUD_ID,NAME,EMAIL,PHONE) VALUES(#{studId},#{name},#{email},#{phone}) </insert> ID属性为insertStudent,可以在当前xml文件中的名空间 com.briup.mappers.StudentMapper.insertStudent中唯一标识该sql语句。parameterType 属性是一个完全限定类名或者是一个类型别名alias。

mybatis学习笔记03-表关系

孤街浪徒 提交于 2019-12-02 15:56:24
环境 数据库表结构: 实体类结构: resultMap <resultMap id="唯一标识" type="返回结果的bean类型"> <id column="数据库字段名" property="bean中的属性名"/> <result property="bean中的属性名" column="数据库字段名"/> <association property="bean中的属性名(其他的bean对象)" fetchType="eager(立即加载)|lazy(延迟加载)" javaType="属性的类型" column="传入方法中作为参数的列的列名" select="cn.ann.mapper.UserMapper.getUserById(方法的完整路径名)"/> <collection property="bean中的属性名(bean对象集合)" ofType="集合的泛型类型" fetchType="eager(立即加载)|lazy(延迟加载)" column="传入方法中作为参数的列的列名" select="方法的完整路径名" resultMap="可以引用别的结果集映射配置"/> </resultMap> 注意: association 和 collection 中都可以配置自己的映射关系 关于 association 和 collection: association:

SSM(Spring-SpringMVC-Mybaits)常见面试题整理

流过昼夜 提交于 2019-12-02 05:34:34
一、Spring面试题 1、Spring 在ssm中起什么作用? Spring:轻量级框架 作用:Bean工厂,用来管理Bean的生命周期和框架集成。 两大核心: ①. IOC/DI(控制反转/依赖注入) :把dao依赖注入到service层,service层反转给action层,Spring顶层容器为BeanFactory。 ②. AOP:面向切面编程 2、Spring的事务? 编程式事务管理:编程方式管理事务,极大灵活性,难维护。 声明式事务管理:可以将业务代码和事务管理分离,用注解和xml配置来管理事务。 3、IOC 在项目中的作用? 作用:Ioc解决对象之间的依赖问题,把所有Bean的依赖关系通过配置文件或注解关联起来,降低了耦合度。 4、Spring的配置文件中的内容? 开启事务注解驱动 事务管理器 开启注解功能,并配置扫描包 配置数据库 配置SQL会话工厂,别名,映射文件 不用编写Dao层的实现类 5、Spring下的注解? 注册:@Controller @Service @Component 注入:@Autowired @Resourcebr/>请求地址:@RequestMapping 返回具体数据类型而非跳转:@ResponseBody 6、Spring DI 的三种方式? 构造器注入:通过构造方法初始化 setter方法注入:通过setter方法初始化 接口注入

mybatis的一些小细节

痞子三分冷 提交于 2019-12-01 23:56:49
Mybatis要解决的问题: 1. 将sql语句硬编码到java代码中,如果修改sql语句,需要修改java代码,重新编译。系统可维护性不高。 设想如何解决? 能否将sql单独配置在配置文件中。 2. 数据库连接频繁开启和释放,对数据库的资源是一种浪费。 设想如何解决? 使用数据库连接池管理数据库连接。 3. 向preparedStatement中占位符的位置设置参数时,存在硬编码(占位符的位置,设置的变量值) 设想如何解决? 能否也通过配置的方式,配置设置的参数,自动进行设置参数 4. 解析结果集时存在硬编码(表的字段名、字段的类型) 设想如何解决? 能否将查询结果集映射成java对象。 image 问题一. #{}和${}的区别是什么? #{}是预编译处理,${}是字符串替换。 Mybatis在处理#{}时,会将sql中的#{}替换为?号,调用PreparedStatement的set方法来赋值; Mybatis在处理 {}替换成变量的值。 使用#{}可以有效的防止SQL注入,提高系统安全性。 问题二. 当实体类中的属性名和表中的字段名不一样 ,怎么办 ? 第1种: 通过在查询的sql语句中定义字段名的别名,让字段名的别名和实体类的属性名一致 <select id=”selectorder” parametertype=”int” resultetype=”me.gacl

Mybatis中的resultType和resultMap

若如初见. 提交于 2019-12-01 23:33:16
一、概述 MyBatis中在查询进行select映射的时候,返回类型可以用resultType,也可以用resultMap, resultType是直接表示返回类型的,而resultMap则是对外部ResultMap的引用,但是resultType跟resultMap不能同时存在。 在MyBatis进行查询映射时,其实查询出来的每一个属性都是放在一个对应的Map里面的,其中键是属性名,值则是其对应的值。 ①当提供的返回类型属性是resultType时,MyBatis会将Map里面的键值对取出赋给resultType所指定的对象对应的属性。所以其实MyBatis的每一个查询映射的返回类型都是ResultMap,只是当提供的返回类型属性是resultType的时候,MyBatis对自动的给把对应的值赋给resultType所指定对象的属性。 ②当提供的返回类型是resultMap时,因为Map不能很好表示领域模型,就需要自己再进一步的把它转化为对应的对象,这常常在复杂查询中很有作用。 二、ResultType Blog.java public class Blog { private int id; private String title; private String content; private String owner; private List<Comment>

mybatis-关联查询(resultType&resultMap)

一个人想着一个人 提交于 2019-12-01 23:30:23
关联查询 数据模型 订单商品模型: 目标:分析表与表之间的关系。 分析步骤: 1、按模块去分析表,不要将系统全部表一次性分析 2、了解每个表存储了什么业务数据 3、了解表中关键字段(主键、外键、索引字段、非空字段) 4、了解表与表之间数据库级别的关系(外键关系) 5、表与表之间的业务关系(一对一、一对多、多对多) 注意:分析表与表之间的业务关系时一定要建立 在某种业务意义基础上 user表:存储了购买用户信息 网民,在电商系统中注册成为购买用户 orders表:存储了用户创建的订单信息 用户购买东西,一次不管购买多少商品只会创建一个订单 比如:张三一次购买手机、电脑,在orders表插入一条订单记录 orderdetail表:存储用户创建订单的详细信息,记录当时用户购买商品的购买信息 比如:张三一次购买手机、电脑,在orders表插入一条订单记录,在订单明细表插入两条记录,订单明细表每条记录对应一个商品信息 items商品表:存储了电商系统中的商品信息,用户在网站查看的商品信息就是来源与这张表 比如:网站销售手机,在这个表中插入很多的不同型号手机商品信息 orders—>user: 一个订单只能由一个用户创建,一对一关系 user—>orders: 一个用户可以创建多个订单,一对多关系 一对一查询 需求 查询订单关联查询用户信息 分析 使用mybatis开发持久层的dao接口时