传智播客mybatis课堂笔记
20150317mybatis课堂笔记

mybatis第一天mybatis基础知识教学思路:整个教学思路以订单商品的项目作为驱动。
mybatis第一天:基础知识mybatis是一个java持久层框架,java中操作关系型数据库用的是jdbc,mybatis是对jdbc的一个封装。
1、从一个jdbc程序开始,通过jdbc 程序找到使用原生态的jdbc开发程序,存在哪些问题??通过学习mybatis,mybatis是如何解决这些问题。
2、mybatis的架构(重点)3、mybatis的入门程序(重点)实现用户的查询、添加、修改、删除。
4、mybatis开发dao的两种方法。
(重点)原始的dao开发方式(dao接口和dao实现都需要编写)mapper代理方式(只需要写dao接口)5、输入映射类型和输出映射类型。
6、动态sql第二天:高级知识高级映射查询(一对一、一对多、多对多)(重点)查询缓存延迟加载mybatis和spring整合(重点)mybatis逆向工程。
1开发环境jdk1.7.0_72eclipse:eclipse-3.7-indigomysql:mysql5.11.1创建数据库先导入sql_table.sql,再导入sql_data.sql(记录系统的初始化数据)通常需要提供初始化数据的数据库脚本。
2jdbc编程中问题企业开发中,根据项目大小、特点进行技术选型,jdbc操作数据库时效率是很高的,jdbc也是技术选型的参考。
2.1jdbc程序参考教案需要数据库的驱动包:上边是mysql的驱动,下边是oracle的驱动。
2.2jdbc问题总结1、数据库连接频繁的创建和关闭,缺点浪费数据库的资源,影响操作效率设想:使用数据库连接池2、sql语句是硬编码,如果需求变更需要修改sql,就需要修改java代码,需要重新编译,系统不易维护。
设想:将sql语句统一配置在文件中,修改sql不需要修改java代码。
3、通过preparedStatement向占位符设置参数,存在硬编码(参数位置,参数)问题。
mybatis第二天课堂笔记高级映射 查询缓存 和spring整合

mybatis第二天高级映射查询缓存和spring整合课程复习:mybatis是什么?mybatis是一人持久层框架,mybatis是一个不完全的ORM框架。
sql语句需要程序员自己去编写,但是mybatis也有映射(输入参数映射、输出结果映射)。
mybatis入门门槛不高,学习成本低,让程序员把精力放在sql语句上,对sql语句优化非常方便,适用与需求变化较多项目,比如互联网项目。
mybatis框架执行过程:1、配置mybatis的配置文件,SqlMapConfig.xml(名称不固定)2、通过配置文件,加载mybatis运行环境,创建SqlSessionFactory会话工厂SqlSessionFactory在实际使用时按单例方式。
3、通过SqlSessionFactory创建SqlSessionSqlSession是一个面向用户接口(提供操作数据库方法),实现对象是线程不安全的,建议sqlSession应用场合在方法体内。
4、调用sqlSession的方法去操作数据。
如果需要提交事务,需要执行SqlSession的commit()方法。
5、释放资源,关闭SqlSessionmybatis开发dao的方法:1、原始dao 的方法需要程序员编写dao接口和实现类需要在dao实现类中注入一个SqlSessionFactory工厂。
2、mapper代理开发方法(建议使用)只需要程序员编写mapper接口(就是dao接口)程序员在编写mapper.xml(映射文件)和mapper.java需要遵循一个开发规范:1、mapper.xml中namespace就是mapper.java的类全路径。
2、mapper.xml中statement的id和mapper.java中方法名一致。
3、mapper.xml中statement的parameterType指定输入参数的类型和mapper.java的方法输入参数类型一致。
mybatis 知识点

Mybatis 知识点什么是 MybatisMybatis 是一个开源的持久层框架,它提供了一个可以自定义 SQL 映射的方式,以及可以很方便地进行数据库查询和操作的功能。
相比于传统的 ORM 框架,Mybatis 更加灵活,适用于复杂的 SQL 查询和自定义 SQL 语句的情况。
Mybatis 的优点1.灵活性:Mybatis 允许开发者自定义 SQL 映射,可以根据需要编写任意复杂的 SQL 查询语句,更加灵活地操作数据库。
2.性能优化:Mybatis 提供了多种性能优化的手段,比如查询缓存和预编译语句等,可以减少数据库的访问次数,提高系统性能。
3.易于集成:Mybatis 与 Spring 框架完美集成,可以很方便地与 SpringBoot 一起使用,简化开发流程。
Mybatis 的基本使用1. 引入依赖在 Maven 项目的 pom.xml 文件中,添加以下依赖:<dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>2.1.4</version></dependency>2. 配置数据源在 application.properties 文件中配置数据源信息:spring.datasource.url=jdbc:mysql://localhost:3306/mydbername=rootspring.datasource.password=1234563. 创建实体类和 Mapper 接口创建与数据库表对应的实体类和对应的 Mapper 接口,如下所示:public class User {private Long id;private String name;private Integer age;// 省略 getter 和 setter 方法}public interface UserMapper {List<User> getAllUsers();User getUserById(Long id);void addUser(User user);void updateUser(User user);void deleteUser(Long id);}4. 编写 SQL 映射文件在 resources 目录下创建一个 sqlmap 目录,并在该目录下编写 XML 格式的 SQL 映射文件,如下所示:<!-- UserMapper.xml --><mapper namespace="erMapper"><select id="getAllUsers" resultType="er">SELECT * FROM user;</select><select id="getUserById" resultType="er">SELECT * FROM user WHERE id = #{id};</select><insert id="addUser">INSERT INTO user(name, age) VALUES(#{name}, #{age});</insert><update id="updateUser">UPDATE user SET name = #{name}, age = #{age} WHERE id = #{id};</update><delete id="deleteUser">DELETE FROM user WHERE id = #{id};</delete></mapper>5. 配置 Mybatis在 application.properties 文件中配置 Mybatis 相关的配置项,如下所示:mybatis.mapper-locations=classpath*:sqlmap/**/*.xmlmybatis.configuration.map-underscore-to-camel-case=true6. 注入 Mapper在需要使用 Mapper 的地方进行注入,并调用相应的方法即可:@Servicepublic class UserServiceImpl implements UserService {@Autowiredprivate UserMapper userMapper;@Overridepublic List<User> getAllUsers() {return userMapper.getAllUsers();}// 省略其他方法实现}Mybatis 高级特性动态 SQLMybatis 提供了动态 SQL 的支持,可以根据不同的条件生成不同的 SQL 语句,实现更加灵活的查询。
(完整word版)传智播客C经典入门课堂笔记-苏坤

今天学习的第一句话:Console.WriteLine(“你想显示的内容。
”);第二句话:Console.ReadKey();当程序执行到Console.ReadKey();时,程序会停到这里,等待用户从键盘上键入一个键,用户键入这个键之后,程序才会继续执行。
在C#中,每一句话都必须以“分号”结束C#中的注释,什么是注释呢?对我程序进行的解释,注释是给人看的。
下面的一对指示可以折叠代码。
#region内容#endregionMSIL:微软中间语言Microsoft Inter mediate LanguageCLR:公共语言运行时Common Language RuntimeCLS公共语言规范Common Language SpecificationCTS:通用类型系统Common Type SystemJIT:即时编译器Just In Time第二天课程:复习--Console.WriteLine()可以用CW加Tab键。
这样就能直接打出Console.WriteLine();变量1:变量:变量代表着一块内存空间,我们可以通过变量名称向内存存\取数据。
有变量就不需要我们记忆复杂的内存地址。
向内存申请一块内存空间的语法:数据类型变量名;整数在我们C#中的数据类型叫intInt nuber;Double:小数Char:字符型只能存储一个字符,并且存储的这个字符要求用单引号引起来String 类型:字符串,就是把0个或1个或多个字符连接起来。
字符串要求用双引号引起来。
Decimal 类型:用来表示钱和货币,失精度不至于丢失。
注意:在C#开发环境中,直接写一个有小数点的数字,这个数字是double类型。
在一个小孩苏idan后面加个m\M,就告诉编译器这是个decimal类型应该写成:money = 100.34m;变量的命名规则:1.必须以“字母”_或@符号开头、2.后面可以跟任意“字母”,数字,下划线。
MyBatis部分笔记

mybatis入门小结:mybatis一个半自动化的持久层框架(SQL抽取出来进行手动编写),支持定制化SQL。
1、接口式编程原生:Dao ==> DaoImplmybatis:Mapper ==> xxMapper.xml2、SqlSession代表和数据库的一次回话,用完就要关闭3、SqlSession和Connection一样是非线程安全的,不能写成员变量,每次使用都应该new新的对象4、mapper接口没有实现类,但是mybatis会为接口类型生成一个代理对象5、连个配置文件1)全局配置文件mybatis-config.xml:包含事务管理器,数据源等信息。
2)SQL映射文件:保存了每个SQL语句映射信息,唯一标识,返回结果类型等信息,通过这种方式将关键SQL语句抽取出来自己写。
<!-- 写好的映射文件一定要注册到全局mybatis-config.xml配置文件之间去--><mapper resource="EmployeeMapper.xml" />mybatis基本使用过程:1.得到sqlSessionFactory对象2.获取sqlSession对象3.获取接口的实现类对象会为接口自动创建一个代理对象,代理对象执行增删改查操作4.mapper的接口的方法每个线程都应该有它自己的SqlSession 实例。
SqlSession 的实例不能共享使用,它也是线程不安全的。
因此最佳的范围是请求或方法范围。
SqlSession 的实例不是线程安全的,因此是不能被共享的。
mybatis关于缓存?两级缓存:一级缓存:(本地缓存):sqlSession级别的缓存。
一级缓存是一直开启的;SqlSession级别的一个Map 与数据库同一次会话期间查询到的数据会放在本地缓存中。
以后如果需要获取相同的数据,直接从缓存中拿,没必要再去查询数据库;一级缓存失效情况(没有使用到当前一级缓存的情况,效果就是,还需要再向数据库发出查询):1、sqlSession不同。
mybatis第一天课堂笔记

mybatis 第一天mybatis的基础知识课程安排:mybatis和springmvc通过订单商品案例驱动第一天:基础知识(重点,内容量多)对原生态jdbc程序(单独使用jdbc开发)问题总结mybatis框架原理(掌握)mybatis入门程序用户的增、删、改、查)mybatis开发dao两种方法:原始dao开发方法(程序需要编写dao接口和dao实现类)(掌握)mybaits的mapper接口(相当于dao接口)代理开发方法(掌握)mybatis配置文件mybatis核心:mybatis输入映射(掌握)mybatis输出映射(掌握)mybatis的动态sql(掌握)第二天:高级知识}订单商品数据模型分析高级结果集映射(一对一、一对多、多对多)mybatis延迟加载mybatis查询缓存(一级缓存、二级缓存)mybatis逆向工程1对原生态jdbc程序中问题总结1.1.1.2环境java环境::indigomysql:1.3创建mysql数据导入下边的脚本::记录表结构:记录测试数据,在实际企业开发中,最后提供一个初始化数据脚本.1.4j dbc程序创建java工程,加入jar包:数据库驱动包()上边的是mysql驱动。
]下边的是oracle的驱动。
程序代码:1.5问题总结1、数据库连接,使用时就创建,不使用立即释放,对数据库进行频繁连接开启和关闭,造成数据库资源浪费,影响数据库性能。
设想:使用数据库连接池管理数据库连接。
¥2、将sql语句硬编码到java代码中,如果sql 语句修改,需要重新编译java代码,不利于系统维护。
设想:将sql语句配置在xml配置文件中,即使sql变化,不需要对java代码进行重新编译。
3、向preparedStatement中设置参数,对占位符号位置和设置参数值,硬编码在java代码中,不利于系统维护。
设想:将sql语句及占位符号和参数全部配置在xml中。
4、从resutSet中遍历结果集数据时,存在硬编码,将获取表的字段进行硬编码,,不利于系统维护。
mybatis第一天课堂笔记资料讲解

m y b a t i s第一天课堂笔记mybatis 第一天 mybatis的基础知识课程安排:mybatis和springmvc通过订单商品案例驱动第一天:基础知识(重点,内容量多)对原生态jdbc程序(单独使用jdbc开发)问题总结mybatis框架原理(掌握)mybatis入门程序用户的增、删、改、查mybatis开发dao两种方法:原始dao开发方法(程序需要编写dao接口和dao实现类)(掌握)mybaits的mapper接口(相当于dao接口)代理开发方法(掌握)mybatis配置文件SqlMapConfig.xmlmybatis核心:mybatis输入映射(掌握)mybatis输出映射(掌握)mybatis的动态sql(掌握)第二天:高级知识订单商品数据模型分析高级结果集映射(一对一、一对多、多对多)mybatis延迟加载mybatis查询缓存(一级缓存、二级缓存)mybaits和spring进行整合(掌握)mybatis逆向工程1对原生态jdbc程序中问题总结1.1环境java环境:jdk1.7.0_72eclipse:indigomysql:5.11.2创建mysql数据导入下边的脚本:sql_table.sql:记录表结构sql_data.sql:记录测试数据,在实际企业开发中,最后提供一个初始化数据脚本1.3jdbc程序使用jdbc查询mysql数据库中用户表的记录。
创建java工程,加入jar包:数据库驱动包(mysql5.1)上边的是mysql驱动。
下边的是oracle的驱动。
程序代码:1.4问题总结1、数据库连接,使用时就创建,不使用立即释放,对数据库进行频繁连接开启和关闭,造成数据库资源浪费,影响数据库性能。
设想:使用数据库连接池管理数据库连接。
2、将sql语句硬编码到java代码中,如果sql 语句修改,需要重新编译java代码,不利于系统维护。
设想:将sql语句配置在xml配置文件中,即使sql变化,不需要对java代码进行重新编译。
mybatis

关于MyBatis的笔记1.SQL的动态查询1. 动态sql动态sql是mybatis中的一个核心,什么是动态sql?动态sql即对sql语句进行灵活操作,通过表达式进行判断,对sql进行灵活拼接、组装。
就拿上一篇博文中对用户的综合查询一例来说:假如这个user是null咋整?或者user.sex或者ername为null呢?所以更严谨的做法应该是在执行这个语句之前要先进行判断才对,确保都不为空,那么我再去查询。
这就涉及到了mybatis中的动态sql了。
在mybatis中,动态sql可以使用标签来表示,这很类似于jstl表达式,我们可以将上面的sql语句改成动态sql,如下:上面的代码很好理解,主要就是加了一些判断,条件不为空,才进行查询条件的拼接,让mybatis动态的去执行。
那么在测试代码中,我们可以故意的将user.sex不赋初值,就可以看到查询的结果是不一样的。
2. sql片段那么现在还有个问题,如果好几个statement都需要这样做,而且动态sql 部分都一样,这就会导致一些代码的重复,所以如果遇到这种情况,我们就应该抽取,动态sql也可以抽取,我们可以将动态的这部分sql抽取成sql片段,然后在具体的statement中引用进来即可。
如下:id是给该sql片段起个名字而已,内部就是上面的where动态部分,然后我们将上面原来的动态部分改成对这个sql片段的引用,如下:3. foreach还有个问题:如果我们要向sql传递数组或List该咋整呢?mybatis使用的是foreach解析。
为了模拟这个场景,我们将上面的查询改成多个id查询,有两种查询方式:∙1∙2∙1∙2首先有一点很明确,既然要使用多个id进行查询,那么多个id肯定要作为参数传进来,所以存储多个id的List需要放到UserQueryVo中作为一个属性,这点很好理解,所以我们先在UserQueryVo中增加这个属性:然后我们修改UserMapper.xml中的sql片段(还是写在sql片段中),如下:下面简单介绍一下这个foreach中相关属性的作用:collection:指定输入对象中的集合属性,这里就是这个ids。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
mybatis 第一天mybatis的基础知识课程安排:mybatis和springmvc通过订单商品案例驱动第一天:基础知识(重点,内容量多)对原生态jdbc程序(单独使用jdbc开发)问题总结mybatis框架原理(掌握)mybatis入门程序用户的增、删、改、查mybatis开发dao两种方法:原始dao开发方法(程序需要编写dao接口和dao实现类)(掌握)mybaits的mapper接口(相当于dao接口)代理开发方法(掌握)mybatis配置文件SqlMapConfig.xmlmybatis核心:mybatis输入映射(掌握)mybatis输出映射(掌握)mybatis的动态sql(掌握)第二天:高级知识订单商品数据模型分析高级结果集映射(一对一、一对多、多对多)mybatis延迟加载mybatis查询缓存(一级缓存、二级缓存)mybaits和spring进行整合(掌握)mybatis逆向工程1对原生态jdbc程序中问题总结1.1环境java环境:jdk1.7.0_72eclipse:indigomysql:5.11.2创建mysql数据导入下边的脚本:sql_table.sql:记录表结构sql_data.sql:记录测试数据,在实际企业开发中,最后提供一个初始化数据脚本1.3jdbc程序使用jdbc查询mysql数据库中用户表的记录。
创建java工程,加入jar包:数据库驱动包(mysql5.1)上边的是mysql驱动。
下边的是oracle的驱动。
程序代码:1.4问题总结1、数据库连接,使用时就创建,不使用立即释放,对数据库进行频繁连接开启和关闭,造成数据库资源浪费,影响数据库性能。
设想:使用数据库连接池管理数据库连接。
2、将sql语句硬编码到java代码中,如果sql 语句修改,需要重新编译java代码,不利于系统维护。
设想:将sql语句配置在xml配置文件中,即使sql变化,不需要对java代码进行重新编译。
3、向preparedStatement中设置参数,对占位符号位置和设置参数值,硬编码在java代码中,不利于系统维护。
设想:将sql语句及占位符号和参数全部配置在xml中。
4、从resutSet中遍历结果集数据时,存在硬编码,将获取表的字段进行硬编码,,不利于系统维护。
设想:将查询的结果集,自动映射成java对象。
2mybatis框架2.1mybatis是什么?mybatis是一个持久层的框架,是apache下的顶级项目。
mybatis托管到goolecode下,再后来托管到github下(https:///mybatis/mybatis-3/releases)。
mybatis让程序将主要精力放在sql上,通过mybatis提供的映射方式,自由灵活生成(半自动化,大部分需要程序员编写sql)满足需要sql语句。
mybatis可以将向preparedStatement中的输入参数自动进行输入映射,将查询结果集灵活映射成java对象。
(输出映射)2.2mybatis框架3 入门程序3.1 需求根据用户id (主键)查询用户信息SqlMapConfig.xml (是mybatis 的全局配置文件,名称不固定的) 配置了数据源、事务等mybatis 运行环境 配置映射文件(配置sql 语句) mapper.xml (映射文件)、mapper.xml 、mapper.xml.....SqlSessionFactory (会话工厂),根据配置文件创建工厂 作用:创建SqlSessionmsyqlSqlSession (会话),是一个接口,面向用户(程序员)的接口 作用:操作数据库(发出sql 增、删、改、查)Executor (执行器),是一个接口(基本执行器、缓存执行器) 作用:SqlSession 内部通过执行器操作数据库mapped statement (底层封装对象)作用:对操作数据库存储封装,包括 sql 语句,输入参数、输出结果类型输入参数类型java 简单类型hashmappojo 自定义输出结果类型java 简单类型hashmappojo 自定义根据用户名称模糊查询用户信息添加用户删除用户更新用户3.1环境java环境:jdk1.7.0_72eclipse:indigomysql:5.1mybatis运行环境(jar包):从https:///mybatis/mybatis-3/releases下载,3.2.7版本lib下:依赖包mybatis-3.2.7.jar:核心包mybatis-3.2.7.pdf,操作指南加入mysql的驱动包3.2log4j.properties3.3工程结构3.4SqlMapConfig.xml配置mybatis的运行环境,数据源、事务等。
3.5根据用户id(主键)查询用户信息3.5.1创建po类3.5.2映射文件映射文件命名:User.xml(原始ibatis命名),mapper代理开发映射文件名称叫XXXMapper.xml,比如:UserMapper.xml、ItemsMapper.xml在映射文件中配置sql语句。
3.5.3在SqlMapConfig.xml加载映射文件在sqlMapConfig.xml中加载User.xml:3.5.4程序编写3.6根据用户名称模糊查询用户信息3.6.1映射文件使用User.xml,添加根据用户名称模糊查询用户信息的sql语句。
3.6.2程序代码3.7添加用户3.7.1映射文件在User.xml中配置添加用户的Statement3.7.2程序代码3.7.3自增主键返回mysql自增主键,执行insert提交之前自动生成一个自增主键。
通过mysql函数获取到刚插入记录的自增主键:LAST_INSERT_ID()是insert之后调用此函数。
修改insertUser定义:3.7.4非自增主键返回(使用uuid())使用mysql的uuid()函数生成主键,需要修改表中id字段类型为string,长度设置成35位。
执行思路:先通过uuid()查询到主键,将主键输入到sql语句中。
执行uuid()语句顺序相对于insert语句之前执行。
通过oracle的序列生成主键:<selectKey keyProperty="id" order="BEFORE"resultType="ng.String">SELECT 序列名.nextval()</selectKey>insert into user(id,username,birthday,sex,address) value(#{id},#{username},#{birthday},#{sex},#{address})3.8删除用户3.8.1映射文件3.8.2代码:3.9更新用户3.9.1映射文件3.9.2代码3.10总结3.10.1p arameterType在映射文件中通过parameterType指定输入参数的类型。
3.10.2r esultType在映射文件中通过resultType指定输出结果的类型。
3.10.3#{}和${}#{}表示一个占位符号,#{}接收输入参数,类型可以是简单类型,pojo、hashmap。
如果接收简单类型,#{}中可以写成value或其它名称。
#{}接收pojo对象值,通过OGNL读取对象中的属性值,通过属性.属性.属性...的方式获取对象属性值。
${}表示一个拼接符号,会引用sql注入,所以不建议使用${}。
${}接收输入参数,类型可以是简单类型,pojo、hashmap。
如果接收简单类型,${}中只能写成value。
${}接收pojo对象值,通过OGNL读取对象中的属性值,通过属性.属性.属性...的方式获取对象属性值。
3.10.4s electOne和selectListselectOne表示查询出一条记录进行映射。
如果使用selectOne可以实现使用selectList也可以实现(list中只有一个对象)。
selectList表示查询出一个列表(多条记录)进行映射。
如果使用selectList查询多条记录,不能使用selectOne。
如果使用selectOne报错:org.apache.ibatis.exceptions.TooManyResultsException: Expected one result (or null) to be returned by selectOne(), but found: 43.11m ybatis和hibernate本质区别和应用场景hibernate:是一个标准ORM框架(对象关系映射)。
入门门槛较高的,不需要程序写sql,sql语句自动生成了。
对sql语句进行优化、修改比较困难的。
应用场景:适用与需求变化不多的中小型项目,比如:后台管理系统,erp、orm、oa。
mybatis:专注是sql本身,需要程序员自己编写sql语句,sql修改、优化比较方便。
mybatis 是一个不完全的ORM框架,虽然程序员自己写sql,mybatis 也可以实现映射(输入映射、输出映射)。
应用场景:适用与需求变化较多的项目,比如:互联网项目。
企业进行技术选型,以低成本高回报作为技术选型的原则,根据项目组的技术力量进行选择。
4mybatis开发dao的方法4.1SqlSession使用范围4.1.1SqlSessionFactoryBuilder通过SqlSessionFactoryBuilder创建会话工厂SqlSessionFactory将SqlSessionFactoryBuilder当成一个工具类使用即可,不需要使用单例管理SqlSessionFactoryBuilder。
在需要创建SqlSessionFactory时候,只需要new一次SqlSessionFactoryBuilder即可。
4.1.2SqlSessionFactory通过SqlSessionFactory创建SqlSession,使用单例模式管理sqlSessionFactory(工厂一旦创建,使用一个实例)。
将来mybatis和spring整合后,使用单例模式管理sqlSessionFactory。
4.1.3SqlSessionSqlSession是一个面向用户(程序员)的接口。
SqlSession中提供了很多操作数据库的方法:如:selectOne(返回单个对象)、selectList(返回单个或多个对象)、。
SqlSession是线程不安全的,在SqlSesion实现类中除了有接口中的方法(操作数据库的方法)还有数据域属性。