您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 信息化管理 > mybatis第一天课堂笔记
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下()。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内部通过执行器操作数据库mappedstatement(底层封装对象)作用:对操作数据库存储封装,包括sql语句,输入参数、输出结果类型输入参数类型java简单类型hashmappojo自定义输出结果类型java简单类型hashmappojo自定义3.1环境java环境:jdk1.7.0_72eclipse:indigomysql:5.1mybatis运行环境(jar包):从下载,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的序列生成主键:selectKeykeyProperty=idorder=BEFOREresultType=java.lang.StringSELECT序列名.nextval()/selectKeyinsertintouser(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.1parameterType在映射文件中通过parameterType指定输入参数的类型。3.10.2resultType在映射文件中通过resultType指定输出结果的类型。【指定的是返回结构单条记录对应的java对象类型】3.10.3#{}和${}#{}表示一个占位符号,#{}接收输入参数,类型可以是简单类型,pojo、hashmap。如果接收简单类型,#{}中可以写成value或其它名称。#{}接收pojo对象值,通过OGNL读取对象中的属性值,通过属性.属性.属性...的方式获取对象属性值。${}表示一个拼接符号,会引用sql注入,所以不建议使用${}。${}接收输入参数,类型可以是简单类型,pojo、hashmap。如果接收简单类型,${}中只能写成value。${}接收pojo对象值,通过OGNL读取对象中的属性值,通过属性.属性.属性...的方式获取对象属性值。3.10.4selectOne和selectListselectOne表示查询出一条记录进行映射。如果使用selectOne可以实现使用selectList也可以实现(list中只有一个对象)。selectList表示查询出一个列表(多条记录)进行映射。如果使用selectList查询多条记录,不能使用selectOne。如果使用selectOne报错:org.apache.ibatis.exceptions.TooManyResultsException:Expectedoneresult(ornull)tobereturnedbyselectOne(),butfound:43.11mybatis和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实现类中除了有接口中的方法(操作数据库的方法)还有数据域属性。SqlSession最佳应用场合在方法体内,定义成局部变量使用。4.2原始dao开发方法(程序员需要写dao接口和dao实现类)4.2.1思路程序员需要写dao接口和dao实现类。需要向dao实现类中注入SqlSessionFactory,在方法体内通过SqlSessionFactory创建SqlSession4.2.2dao接口4.2.3dao接口实现类publicclassUserDaoImplimplementsUserDao{//需要向dao实现类中注入SqlSessionFactory//这里通过构造方法注入privateSqlSessionFactorysqlSessionFactory;publicUserDaoImpl(SqlSessionFactorysqlSessionFactory){this.sqlSessionFactory=sqlSessionFactory;}@OverridepublicUserfindUserById(intid)throwsException{SqlSessionsqlSession=sqlSessionFactory.openSession();Useruser=sqlSession.selectOne(test.findUserById,id);//释放资源sqlSession.close();returnuser;}@Overridepublicvoidinser
本文标题:mybatis第一天课堂笔记
链接地址:https://www.777doc.com/doc-4458062 .html