mybatis一对一

Mybatis学习笔记-注解配置开发

一世执手 提交于 2020-02-05 01:42:21
总览 : 1. 准备工作 创建一个database以及以及user表,account表(使用mysql) 实体类User 实体类Account dao.UserDao dao.AccountDao 2. XML配置文件 mybatis-config.xml.xml(放在resources目录下) 3. 运行测试 UserDaoTest AccountDaoTest 4. 注: 项目目录结构 log4j.properties jdbcConfig.properties pom.xml 1.准备工作  (1) 创建一个database以及user表,account表,role表,role_user表(使用mysql) 返回文章开头 #创建mybatis数据库 CREATE DATABASE mybatis ; #使用数据库 USE mybatis #存在则删除user表 DROP TABLE IF EXISTS `user` ; #创建user表 CREATE TABLE `user` ( `id` int ( 11 ) NOT NULL auto_increment , `username` varchar ( 32 ) NOT NULL COMMENT '用户名称' , `birthday` datetime default NULL COMMENT '生日' , `sex`

mybatis面试题

让人想犯罪 __ 提交于 2020-02-04 14:32:32
1.对mybatis的理解,优点和缺点 mybatis是一个持久层的开源框架,对JDBC进行了封装,是一个不完全的orm映射,通过xml进行sql语句的统一管理 优点: 1.基于sql语句,把sql语句在xml里统一管理,解耦 2.因为用JDBC连接,所以可以与数据库更好的兼容 3.能够与spring有很好的集成 缺点: sql语句工作量大 数据库移植性差 映射的什么不映射的什么? 只对输入输出映射,不对sql映射 2.什么项目建议使用mybatis? 因为mybatis注重sql语句是一个灵活的dao层解决方案,所以对需求变化特别大的,性能要求高的,如互联网项目,是一个不错的选择 3.#{}和${}区别 1.#{}相当于占位符,就是原始JDBC中的? 2. KaTeX parse error: Expected 'EOF', got '#' at position 30: … 3.当传入的值是基本类型时,#̲{}中可以随便写,但 {}中要写value,当是对象类型时,都要和对象的属性名对应 4.mapper代理开发 1.mapper映射文件要和mapper接口同名最好同包 2.mapper映射文件的命名空间(namespace)要是对应的mapper接口的全路径名 3.mapper映射文件中标签的输入参数要和mapper接口中方法的形参一致 4

Mybatis的关联映射(1-1,1-n,n-n)

人走茶凉 提交于 2020-02-04 11:31:55
Mybatis的关联映射(1-1,1-n,n-n) 一对一 一对多 多对多 一张表的一对多(自查询) 一对一 表:address 与 students 1.嵌套结果: 一条sql语句,在select后b把两张表中要查询出来的所有的列名写出来,一个列名对应一个属性值(两个对象中的属性),最后一一映射起来。association标签有两个属性、有子标签(从以下代码中可以看出,select 后的所有列,在resultMap中都有对应的column与之匹配。注意1.column与select后的列名的名称一定要各自对应,并且property的属性值a一定要在对应的类中有对应的setA()方法。) <!--Address的所有属性的映射--> <resultMap id="AddressResultMap" type="com.briup.review.OneToOne.Address"> <id column="addr_id" property="addrId"></id> <result column="city" property="city"></result> </resultMap> <!--Students的基本属性的映射(不包括对象属性)--> <resultMap id="StudentBaseResultMap" type="com.briup.review

Mybatis延迟加载

醉酒当歌 提交于 2020-02-03 21:26:28
延迟加载测试观察延迟加载的方式 1.延迟加载 输出语句为: System.out.println(account.getAid()); 测试结果 可以看出,只需要获取id,所以就不用再获取account的user属性 通过日志可以看出只会有一个查询语句 select * from account 2.非延迟加载(积极加载) 会有两条查询语句 Mybatis的延迟加载,两种配置方式: 注意: 如果配置了全局为延迟加载,在映射文件中配置了积极加载,那么改映射文件配置的那个方法,将会积极加载。 1.在核心配置文件中配置(全局配置) <settings> <setting name="lazyLoadingEnabled" value="true"/> </settings> 2.在映射文件中配置(局部配置) <association fetchType="lazy" property="user" javaType="user" column="userId" select="com.william.dao.UserDao.findId"></association> 一、目录结构 二、maven <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns

SSM框架--mybatis

醉酒当歌 提交于 2020-02-03 07:15:19
五.mybatis相关 1.jdbc介绍 JDBC是Java制定的接口,数据库产商依照该接口编写与自家数据库配套的实现类。比如MySQL、Oracle、SqlServer等都有自己的不同实现,这些实现类的集合既是我们笼统意义上的“驱动”。 2.preparedstatement和statement的区别 数据库系统会对sql语句进行预编译处理(如果JDBC驱动支持的话),预处理语句将被预先编译好,语法语义解析优化sql语句,指定执行计划执行并返回结果 但是很多情况,我们的一条sql语句可能会反复执行,或者每次执行的时候只有个别的值不同(比如select 的where子句值不同,update的set子句值不同,insert 的values值不同).如果每次都需要经过上面的词法语义解析,语句优化,制定执行计划等,则效率就明显不行了 所谓预编译语句就是将这类语句的值用占位符替代,可以视为将sql语句模板或者说参数化 什么是预编译(将这条sql(解析完成)语句放入缓存执行计划中,如果有相同的sql语句进来,就会直接执行该sql(解析完成)语句,省去解析的过程) 下面列出PreparedStatement的几点优势。 1.PreparedStatement可以写动态参数化的查询用PreparedStatement你可以写带参数的sql查询语句

Mybatis一对一结果映射

孤街醉人 提交于 2020-02-03 05:08:12
目录结构 创建数据库相应的表 一个账户对应一个用户 accout CREATE TABLE `account` ( `aid` int(11) NOT NULL AUTO_INCREMENT, `accountname` varchar(20) DEFAULT NULL, `money` float(10,2) DEFAULT NULL, `userId` int(11) DEFAULT NULL, PRIMARY KEY (`aid`), KEY `userId` (`userId`), CONSTRAINT `account_ibfk_1` FOREIGN KEY (`userId`) REFERENCES `user` (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8; user CREATE TABLE `user` ( `id` int(11) NOT NULL AUTO_INCREMENT, `username` varchar(20) DEFAULT NULL, `PASSWORD` varchar(20) DEFAULT NULL, `sex` varchar(2) DEFAULT NULL, `birthday` date DEFAULT NULL, PRIMARY KEY (`id`) )

【教程】Mybatis 使用 -- Day 03【多表和事务】

佐手、 提交于 2020-01-31 21:09:39
文中代码托管在码云平台,点击进入 文章目录 连接池 事务控制以及设计方法 事务的基本概念 Mybatis中的事务操作 Mybatis 基于XML配置的动态SQL语句的使用 多表查询 一对多 一对一 多对多 连接池 连接池可以减少获取连接所消耗的时间和性能,就像一个容器,把连接初始化后放在这个容器里,当要用的时候就取出连接,可以说连接池就是一个用于存储连接的容器,该容器使用 集合 实现,该集合必须是 线程安全 的,不能两个线程拿到统一的连接,该集合还必须有队列的特性( 先进先出 ) Mybatis连接池提供了 3 种方式的配置 (1)配置的位置:主配置文件的 dataSource 标签,其type属性就是表示采用何种连接池,其值有三种: ❤ POOLED 采用传统的java.sql.DataSource规范中的连接,Mybatis中有针对规范的实现,每次使用的时候就从池中获取一个来用 ❤ UNPOOLED 采用传统的获取连接的方式,虽然也实现了java.sql.DataSource接口,但是并没有使用池的思想,每次使用的时候就创建一个新的连接来用 ❤ JNDI 采用服务器提供的JNDI技术实现来获取DATaSource对象,不同的服务器所能拿到的DataSource是不同的,如果不是web或者maven的var工程是不能使用的 。 (2)POOLED工作流程:首先查看空闲区

Mybatis

心不动则不痛 提交于 2020-01-29 16:29:03
Mybatis知识点 需要进行配置,查看前面的配置笔记 分为两种写法,一种是注解,一种是xml文件 事务 缓存 注解写法 把JdbcTemplate改成Mybatis // 把前面写个接口的service层的代码改成这个 // service/TestService.java @Repository // 同 @Controller public class TestService { @Autowired private TestDao testDao; // 通过JdbcTemplate的方法才能操作数据库 public ArrayList get(TestBean testBean) { return testDao.get(testBean); } } // dao/TestDao.java public interface TestDao { @Select("select * from t_user where id = #{id}") ArrayList<TestBean> get(TestBean testBean); // 这个ArrayList是返回值的意思,select的返回值有bean,list // 其他的几个注解,增,改,删都是返回的数字Integer } 注解有哪些 // 常用的 @Insert:实现新增 @Update:实现更新 @Delete

mybatis框架学习

耗尽温柔 提交于 2020-01-27 08:15:44
1.mybatis入门知识 mybatis是一个持久层框架,所以在使用的时候一定要导入mybatis和mysql依赖。 在使用映射文件开发的时候要在配置文件中告知 mybatis 映射配置的位置,在使用注解开发的时候除了告知 mybatis 映射配置的位置,还要把IUserDao.xml文件删掉,否则会出现包扫描错误。 注解直接添加在持久层就可以 mybatis映射文件中的parameterType和resultType分别为持久层中的参数类型和返回值 2.resultMap 结果类型 返回值类型可以用resultMap进行封装,resultMap 可以实现将查询结果映射为复杂类型的 pojo,比如在查询结果映射对象中包括 pojo 和 list 实现一对一查询和一对多查询。 在使用resultMap进行封装时,映射文件也要用resultMap封装时设置的id 3.mybatis连接池 连接池就是用于存储连接的一个容器。 容器其实就是一个集合对象,该集合必须是线程安全的,不能两个线程拿到统一连接。(该集合还必须能实现队列的特性:先进先出) 在 Mybatis 的 SqlMapConfig.xml 配置文件中,通过来实现 Mybatis 中连接池的配置。 4.mybatis的动态sql 动态sql的if标签 ,if就是对其进行判断,需要注意的是空字符串要用“ ”用单引号包双引号

[转帖]Mybatis十八连环问!这谁顶得住?

落花浮王杯 提交于 2020-01-24 01:24:04
Mybatis十八连环问!这谁顶得住? http://www.itpub.net/2020/01/19/5130/ 1、#{}和${}的区别是什么? 答:${}是Properties文件中的变量占位符,它可以用于标签属性值和sql内部,属于静态文本替换,比如${driver}会被静态替换为com.mysql.jdbc.Driver。#{}是sql的参数占位符,Mybatis会将sql中的#{}替换为?号,在sql执行前会使用PreparedStatement的参数设置方法,按序给sql的?号占位符设置参数值,比如ps.setInt(0, parameterValue),#{item.name}的取值方式为使用反射从参数对象中获取item对象的name属性值,相当于param.getItem().getName()。 2、Xml映射文件中,除了常见的select|insert|updae|delete标签之外,还有哪些标签? 答:还有很多其他的标签,<resultMap>、<parameterMap>、<sql>、<include>、<selectKey>,加上动态sql的9个标签,trim|where|set|foreach|if|choose|when|otherwise|bind等,其中<sql>为sql片段标签,通过<include>标签引入sql片段,<selectKey