MyBatis
mybatis学习过程中的笔记
Adela0916
主要记录学习过程中遇到的问题以及学习到的东西
展开
-
30.MyBatis——分页插件-pagehelper的使用
分页插件pagehelp的使用方法可以看它的官方文档:MyBatis分页插件-pagehelp原创 2021-03-26 16:32:55 · 231 阅读 · 0 评论 -
29.MyBatis_逆向工程
MyBatis Generator简介MyBatis Generator简称MBG,是一个专门为MyBatis框架使用者定制的代码生成器,可以快速的根据表生成对应的映射文件,接口,以及bean类。支持基本的增删改查,以及QBC风格的条件查询。但是表连接、存储过程等这些复杂sql的定义需要我们手工编写。官方文档地址http://www.mybatis.org/generator/MyBatis Generator使用步骤编写MyBatis Generator的配置文件(重要几处配置)1)jdbc原创 2021-03-23 14:29:04 · 127 阅读 · 0 评论 -
28.MyBatis_动态sql_foreach_mysql下foreach批量插入的两种方式
dao接口:public interface EmployeeDynamicSQLMapper { public void addEmps(@Param("emps") List<Employee> emps);}方法一:MySql下批量保存:可以foreach遍历mysql支持values(),(),()语法 <insert id="addEmps" > insert into tbl_employee (last_name,email,g原创 2021-03-17 11:35:14 · 309 阅读 · 0 评论 -
1.MyBatis学习---MyBatis与JDBC、Hibernate、JPA的区别
1.JDBC->DbUtils(QueryRunner)->jdbcTemolate: 只是工具,而框架是是整体解决方案。JDBC的流程:特点:功能简单;sql写在java代码里;硬编码高耦合的方式;Hibernate:全自动全映射ORM(Object Relation Mapping)框架;旨在消除sql,HQL.实际开发中,我们希望:sql语句交给我们开发人员编写,希望sql不失去灵活性。总结:为什么使用MyBatis.MyBatis是一个办自动化的持久层框架。JDBC:原创 2020-12-23 11:39:17 · 280 阅读 · 0 评论 -
2.MyBatis学习--第一个项目HelloWorld
建数据库建表新建一个数据库mybatis,创建一张表tbl_emoloyee.create table tbl_employee(id int(11) PRIMARY KEY AUTO_INCREMENT,last_name VARCHAR(255),gender CHAR(1),email VARCHAR(255))准备工作新建一个java项目MyBatis_01_hello,在src下新建一个bean包,在包中创建Employee。public class Employee原创 2020-12-23 17:09:50 · 111 阅读 · 0 评论 -
03.MyBatis学习-----全局配置文件_properties_引入外部配置文件
在MyBatis全局配置文件中,可以通过properties来引入外部配置文件,这里以引入外部数据库配置文件为例。1.创建dbconfig.properties配置文件,配置数据库的相关信息。jdbc.driver = com.mysql.jdbc.Driverjdbc.url = jdbc:mysql://localhost:3306/mybatisjdbc.username = rootjdbc.password = root2.在MyBatis全局配置文件中使用properties引入外原创 2020-12-26 11:34:42 · 434 阅读 · 0 评论 -
04.MyBatis学习--全局配置文件_settings_运行时行为设置
通常,在数据库设计时,字段名通常带有下划线,但是所创建的实体对象的相应属性是驼峰式,这让在查询select*时,会发现该属性值为空,并没有被绑定值,这时候通常有两种解决方式,一种是将该属性在查询语句中另起名称(与实体类定义的相同),另一种方式是通过settings进行设置。方法一:employee的数据库字段为last_name,而Employee实体类定义的属性是lastName.所以查询时: <select id="getEmpById" resultType="com.fzl.mybatis原创 2020-12-26 11:44:00 · 185 阅读 · 2 评论 -
05.MyBatis学习--全局配置文件_typeAliases_别名
通常,我们在xml映射文件中,的返回值类型都是写全类名,但是全类名太长,这时候,我们就可以通过起别名的方式来进行简化。1.在mybatis全局配置文件设置Emolyoyee的别名 <typeAliases> <typeAlias type="com.fzl.mybatis.bean.Employee"></typeAlias> </typeAliases>2.修改映射文件中的返回值类型:<select id="getEm原创 2020-12-26 15:51:00 · 211 阅读 · 1 评论 -
06.MyBatis学习--全局配置文件_enviroments_运行环境
environments:环境们,mybatis可以配置多种环境,default指定使用某种环境。可以达到快速切换环境 environment:配置一个具体的环境信息,必须有两个标签;id代表当前环境的唯一标识 transactionManager:事务管理器; type:事务管理器类型;JDBC(JdbcTransactionFactory)|MANAGED(Managed) 自定义事务管理器:实现Tr原创 2020-12-26 17:01:29 · 188 阅读 · 0 评论 -
07.MyBatis学习--全局配置文件_databaseIdProvider_多数据库支持
实现多数据库支持步骤在MyBatis中,可以通过databaseIdProvider来实现多数据库支持。databaseIdProvider:支持多数据库厂商type="DB_VENDOR":VendorDatabaseIdProvider,作用就是得到数据库厂商的标识(驱动getDatabaseProductName()),mybatis就能根据数据库厂商标识来执行不同的sql.厂商标识:MySQL,Oracle,SQL Server,xxx在mybatis全局配置文件中使用database原创 2020-12-26 17:18:01 · 440 阅读 · 0 评论 -
08.MyBatis学习--全局配置文件_mappers_sql映射注册
我们的sql映射文件需要在mybatis全局配置文件中注册。我们使用mappers标签来进行注册。 mapper:注册一个sql映射 注册配置文件: resource:引用类路径下的sql映射文件 mybatis/mapper/EmployeeMapper.xml url:引用网络路径或者磁盘路径下的sql映射文件 注册接口: class:引用(注册)接口, 1.有sql映射文件原创 2020-12-26 19:02:14 · 340 阅读 · 0 评论 -
09.MyBatis学习--映射文件_增删改查
增加一条员工信息在dao接口中创建新增员工信息的方法。返回值可以为int(返回的是更新记录条数),long,boolean(更新记录条数大于0则为true)型,也可以没有返回值public int addEmp(Employee employee);在sql映射文件中编写sql <insert id="addEmp"> insert into tbl_employee (last_name,gender,email) values (#{lastName},#原创 2020-12-27 15:08:08 · 203 阅读 · 0 评论 -
10.MyBatis学习--映射文件_insert_获取自增主键的值
获取自增主键的值:mysql支持自增主键,自增主键值的获取,mybatis也是利用statement.getGenreatedKeys();useGeneratedKeys="true":使用自增主键获取主键值策略keyProperty:指定对应的主键属性,也就是mybatis获取到主键值以后,将这个值封装给javaBean的哪个属性。示例:<!-- parameterType:参数类型,可以省略. 获取自增主键的值: mysql支持自增主键,自增主键值的获取,myb原创 2020-12-27 15:27:50 · 316 阅读 · 0 评论 -
11.MyBatis学习--映射文件_insert_获取非自增主键的值_selectKey
<!-- 获取非自增主键的值: Oracle不支持自增;Oracle使用序列来模拟自增; 每次插入的数据的主键是从序列中拿到的值;如何获取到这个值; --> <insert id="addEmp" databaseId="oracle"> <!-- keyProperty:查出的主键值封装给javaBean的哪个属性 order="BEFORE":当前sql在插入sql之前运行 AFTER:当前sql在插入sql之后运行 resu原创 2020-12-27 15:45:07 · 301 阅读 · 0 评论 -
12.MyBatis学习--映射文件_参数处理_单个参数&多个参数&命名参数
【单个参数】:mybatis不会做特殊处理, #{参数名/任意名}:取出参数值。【多个参数】:mybatis会做特殊处理。 多个参数会被封装成 一个map, key:param1...paramN,或者参数的索引也可以 value:传入的参数值 #{}就是从map中获取指定的key的值;异常:org.apache.ibatis.binding.BindingException: Parameter 'id' not found.原创 2020-12-27 18:42:42 · 234 阅读 · 0 评论 -
13.MyBatis报错:Error querying database. Cause: org.apache.ibatis.binding.BindingException: Parameter
我做的功能是根据id和lastName查找一条员工信息记录。public Employee getEmpByIdAndLastName(Integer id,String lastName); <select id="getEmpByIdAndLastName" resultType="com.fzl.mybatis.bean.Employee" databaseId="mysql"> select * from tbl_employee where id = #{id},原创 2020-12-27 18:42:57 · 4523 阅读 · 2 评论 -
14.MyBatis学习--映射文件_参数处理_#与$取值区别
#与$的区别#{}:可以获取map中的值或者pojo对象属性的值;${}:可以获取map中的值或者pojo对象属性的值;示例:select * from tbl_employee where id=${id} and last_name=#{lastName}执行该sql语句控制台可以打印出一下内容:Preparing: select * from tbl_employee where id=2 and last_name=?可以看出#和$的区别:#{}:是以预编译的形式,将参数设置到sq原创 2020-12-27 19:32:59 · 121 阅读 · 0 评论 -
15.MyBatis学习--映射文件_select_返回List
若select返回的是一个List集合,则resultType要写集合中元素的类型。示例:dao接口代码:查询所有的员工信息 public List<Employee> getAllEmps();sql映射文件代码:<!-- resultType: 如果返回的是一个集合,要写集合中元素的类型--> <select id="getAllEmps" resultType="com.fzl.mybatis.bean.Employee">原创 2020-12-27 19:55:01 · 256 阅读 · 1 评论 -
16.MyBatis学习--映射文件_select_记录封装map,即将查询结果封装成Map集合
一、查询一条记录,将其封装成Map集合返回。其中key为列名,value为其对应的值。只需要将resultType设置为map.在接口中创建查询方法。 //返回一条记录的map;key就是列名,值就是对应的值 public Map<String,Object> getEmpReturnMapById(Integer id);在sql映射文件中创建对应的查询语句。注意,将resultType设置为map型 <select id="getEmpReturnMapByI原创 2020-12-27 20:24:57 · 486 阅读 · 0 评论 -
17.MyBatis学习--映射文件_select_resultMap_自定义结果映射规则
在前面的文章中,提到过,项目里面的javaBean属性名与数据库表列名不对应的问题(例如,数据库表中last_name属性,在javaBean中,属性名为lastName),在前文中,我们通过在mybatis的全局配置文件中通过设置驼峰命名的方式解决了这个问题。在这片文章中,将采用另一种方式来解决这个问题。通过在全局配置文件中设置 <settings> <setting name="mapUnderscoreToCamelCase" value="true"/&g原创 2020-12-27 21:00:51 · 269 阅读 · 2 评论 -
18、MyBatis学习--映射文件_select_resultMap_关联查询_环境搭建以及级联属性封装结果以及association定义关联对象封装规则
一、场景查询Employee的同时查询员工对应的部门Employee === Department一个员工有与之对应的部门信息二、环境搭建Employee.javapublic class Employee { private Integer id; private String lastName; private String email; private String gender; private Department dept; public Employee(原创 2020-12-28 11:24:04 · 218 阅读 · 0 评论 -
19.MyBatis学习--映射文件_select_resultMap_关联查询_association分步查询&&延时加载
关联查询_association分步查询在上一篇文章文章中MyBatis学习–映射文件_select_resultMap_关联查询_环境搭建以及级联属性封装结果以及association定义关联对象封装规则,介绍了级联查询结果封装,这篇文章主要讲述如何实现分步查询。使用场景:1. 先按照员工id查询员工信息;2. 根据查询员工信息中的d_id值去部门表查出部门信息;3. 将部门信息设置到员工信息中。使用association进行分步查询示例在接口DepartmentMapper.java中创原创 2020-12-28 16:21:46 · 187 阅读 · 0 评论 -
20.MyBatis学习-映射文件_select_resultMap_关联查询_collection定义关联集合封装规则
概述MyBatis学习–映射文件_select_resultMap_关联查询_环境搭建以及级联属性封装结果以及association定义关联对象封装规则,主要通过association来实现关联查询,这篇文章通过collection定义关联集合封装规则来实现关联查询。两篇文章的区别:association主要解决的是多对一的问题(例如,多个员工属于同一部门,查询某个员工信息,同时查询其所属部门信息,这个员工只能隶属一个部门)collection主要针对一对多的问题(例如,一个部门下可以有很多员工,原创 2020-12-28 18:48:50 · 226 阅读 · 0 评论 -
21.MyBatis学习--映射文件_select_resultMap_关联查询_collection分步查询&延迟加载
一、概述在前的文章中介绍了通过association实现分步查询&延迟加载(MyBatis学习–映射文件_select_resultMap_关联查询_association分步查询&&延时加载),以及上一篇文章中通过collection实现级联查询结果集封装(MyBatis学习-映射文件_select_resultMap_关联查询_collection定义关联集合封装规则),这篇文章主要通过collection来实现分步查询&延迟加载。二、使用场景这里,以查询某一部门信原创 2020-12-28 19:46:19 · 203 阅读 · 0 评论 -
22.MyBatis学习--映射文件_select_resultMap_分步查询通过column传递多列值&fetchType
分步查询通过column传递多列值在前面,无论是通过association还是collection实现分步查询,我们通过column来传递的参数都是一个,column是可以传递多列值得。传递方法就是将多列值封装成map形式:column="{key1=column1,key2=column2}".例如:在DepartmentMapper.xml中分步查找部门信息及其下的员工信息。 <resultMap id="MyDeptStep" type="com.fzl.mybatis.bean.Dep原创 2020-12-28 20:01:37 · 458 阅读 · 0 评论 -
23.MyBatis学习--映射文件_select_resultMap_discriminator鉴别器
鉴别器<discriminator javaType=""></discriminator>鉴别器:mybatis可以使用discriminator判断某列的值,然后根据某列的值改变封装行为。例如:封装Employee:如果查出的是女生:就把部门信息查询出来,否则不查询;如果是男生,把last_name这一列的值赋值给email;在dao接口创建对应的查询方法public interface EmployeeMapper { public Employee原创 2020-12-29 15:43:52 · 182 阅读 · 0 评论 -
24.MyBatis学习--动态sql_if_判断&OGNL&where查询条件&trim_自定义字符串截取解决sql拼装出现的问题
前面的文章中一直介绍的都是静态sql,在实际开发过程中,我们会遇到条件查询的需求,根据所给的多个条件查询,mybatis提供了动态sql实现方法。需求条件查询员工信息条件:员工id或员工lastName或员工email或员工性别。相关文件Employee.javapublic class Employee { private Integer id; private String lastName; private String email; private String gen原创 2020-12-30 16:54:01 · 400 阅读 · 0 评论 -
25.MyBatis_动态sql_choose_分支选择---根据所带的条件中的一个进行查询
choose分支选择使用场景示例:查询员工信息,如果带了id就用id查,如果带了lastName就用lastName查,只会带入其中一个查询。相关文件(接上一篇文章:24.MyBatis学习–动态sql_if_判断&OGNL&where查询条件&trim_自定义字符串截取解决sql拼装出现的问题dao接口: public List<Employee> getEmployeeByConditionByChoose(Employee employee);创建原创 2021-03-11 15:46:30 · 490 阅读 · 0 评论 -
26.尚硅谷_MyBatis_动态sql_set_与if结合的动态更新--传来什么参数就修改什么参数,不用修改全部
适用场景在开发过程中,我们经常会遇到修改信息,但一条记录我们每次需要修改的字段不一样(比如,某一次只想要修改员工的姓名,下一次只想修改员工的邮箱,这时候我们不需要一次性修改员工的所有信息),可以使用set与if结合动态更新记录。创建接口EmployeeDynamicSQLMapper.java,在接口中定义条件查询方法。public interface EmployeeDynamicSQLMapper { public void updateEmp(Employee employee);原创 2021-03-11 16:10:43 · 238 阅读 · 0 评论 -
27.尚硅谷_MyBatis_动态sql_foreach_遍历集合
foreach遍历集合使用场景:遍历id为(1,3,4)的员工信息。创建接口EmployeeDynamicSQLMapper.java,在接口中定义条件查询方法。public interface EmployeeDynamicSQLMapper { //查询员工id'在给定集合中的 public List<Employee> getEmpsByConditionForeach(@Param("ids")List<Integer> ids);}创建Em原创 2021-03-11 16:37:01 · 219 阅读 · 0 评论