mybatis教案.docx
- 文档编号:11308438
- 上传时间:2023-02-26
- 格式:DOCX
- 页数:109
- 大小:1.04MB
mybatis教案.docx
《mybatis教案.docx》由会员分享,可在线阅读,更多相关《mybatis教案.docx(109页珍藏版)》请在冰豆网上搜索。
mybatis教案
Mybatis
框架课程
1第一天(基础知识,非常重要)
1.1.1Mybatis介绍
1.1.2Mybatis是什么?
Mybatis是一个基于java的支持普通SQL、存储过程以及高级映射的持久化框架技术,它是对jdbc进行了封装。
了解一下mybatis的前世今生,mybatis原本叫ibatis,是Apache组织的一个项目。
后来被托管到googlecode下,并且改名为mybatis,当然mybatis和ibatis不只是改了个名字,它在ibatis的基础之上更是优化了一些东西,使程序员更容易学习和使用mybatis。
现在mybatis被托管到github。
1.1.3为什么学习mybatis?
Ø首先要知道mybatis在项目中的使用是处于哪一层?
Dao数据访问层
ØDao层已经有jdbc和hibernate技术了,为啥还学习mybatis?
有两个方面考虑:
1、原生态jdbc程序存在问题;
2、Hibernate框架有些场景不好用。
1.1.3.1分析原生态jdbc程序中存在的问题
Mybatis是对JDBC的一种封装,我们看看jdbc存在哪些问题,为什么要封装它。
1.1.3.1.1Jdbc程序代码
publicstaticvoidmain(String[]args){
Connectionconnection=null;
PreparedStatementpreparedStatement=null;
ResultSetresultSet=null;
try{
//1、加载数据库驱动
Class.forName("com.mysql.jdbc.Driver");
//2、通过驱动管理类获取数据库链接
connection=DriverManager.getConnection("jdbc:
mysql:
//localhost:
3306/mybatis?
characterEncoding=utf-8","root","root");
//3、定义sql语句?
表示占位符
Stringsql="select*fromuserwhereusername=?
";
//4、获取预处理statement
preparedStatement=connection.prepareStatement(sql);
//5、设置参数,第一个参数为sql语句中参数的序号(从1开始),第二个参数为设置的参数值
preparedStatement.setString(1,"王五");
//6、向数据库发出sql执行查询,查询出结果集
resultSet=preparedStatement.executeQuery();
//7、遍历查询结果集
while(resultSet.next()){
System.out.println(resultSet.getString("id")+""+resultSet.getString("username"));
}
}catch(Exceptione){
e.printStackTrace();
}finally{
//8、释放资源
if(resultSet!
=null){
try{
resultSet.close();
}catch(SQLExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}
}
if(preparedStatement!
=null){
try{
preparedStatement.close();
}catch(SQLExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}
}
if(connection!
=null){
try{
connection.close();
}catch(SQLExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}
}
}
}
1.1.3.1.2Jdbc编程步骤(预处理preparedStatement)
1、加载数据库驱动;
2、通过驱动管理器创建数据库连接;
3、编写业务SQL语句,并设置占位符;
4、通过数据库连接创建PreparedStatement;
5、通过PreparedStatement设置预处理SQL的参数;
6、执行PreparedStatement;
7、遍历并输出结果集信息;
8、关闭连接等资源信息。
1.1.3.1.3Jdbc问题总结
1、加载数据库驱动,存在硬编码;
2、通过驱动管理器创建数据库连接,存在硬编码。
且频繁的创建数据库连接,会造成数据库的性能降低;
3、编写业务SQL,并设置占位符,存在硬编码;
4、没毛病;
5、通过PreparedStatement设置预处理SQL的参数,存在硬编码;
6、没毛病;
7、遍历并输出结果集信息,存在硬编码;
8、频繁的关闭数据库连接,会造成数据库的资源浪费且会造成数据库的性能降低。
1.1.3.2Mybatis可以解决jdbc的问题
MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索。
MyBatis可以使用简单的XML或注解用于配置和原始映射,将接口和Java的POJO(PlainOldJavaObjects,普通的Java对象)映射成数据库中的记录。
如何解决jdbc的问题:
一、Jdbc编程步骤中的1、2、8,mybatis通过SqlMapConfig.xml配置来进行管理,并采取了连接池来获取连接,避免了资源的频繁创建与关闭。
二、jdbc编程步骤中的3、5、7,mybatis通过mapper映射文件来让程序员进行SQL的编写,参数的设置以及结果集的映射。
1.1.3.3Mybatis和hibernate的不同特点及各自应用场景
是不是只有mybatis可以解决jdbc的问题呢?
当然不是,hibernate也可以解决JDBC的这些问题。
那既然有可以解决jdbc问题的持久层框架了,为什么还要学mybatis呢?
下面讲解一下mybatis和hibernate各自的技术特点及最佳应用场景。
Mybatis技术特点:
1、通过直接编写SQL语句,可以直接对SQL进行性能的优化;
2、学习门槛低,学习成本低。
只要有SQL基础,就可以学习mybatis,而且很容易上手;
3、由于直接编写SQL语句,所以灵活多变,代码维护性更好。
4、不能支持数据库无关性,即数据库发生变更,要写多套代码进行支持,移植性不好。
5、需要编写结果映射。
Hibernate技术特点:
1、标准的orm框架,程序员不需要编写SQL语句。
2、具有良好的数据库无关性,即数据库发生变化的话,代码无需再次编写。
3、学习门槛高,需要对数据关系模型有良好的基础,而且在设置OR映射的时候,需要考虑好性能和对象模型的权衡。
4、程序员不能自主的去进行SQL性能优化。
Mybatis应用场景:
需求多变的互联网项目,例如电商项目。
Hibernate应用场景:
需求明确、业务固定的项目,例如OA项目、ERP项目等。
1.2Mybatis框架原理
1.2.1框架图
通过框架图分析mybatis的原理
1.2.2分析结论
1、mybatis配置文件,包括数据库连接、事物管理等信息。
2、mybatis通过配置文件信息,构造出SqlSessionFactory即会话工厂。
3、通过SqlSessionFactory,可以创建SqlSession即会话。
Mybatis是通过SqlSession来操作数据库的。
4、SqlSession是通过底层的Executor执行器接口来操作数据库的。
Executor接口有两个实现类,一个是普通执行器,一个是缓存执行器(默认)。
5、Executor执行器要处理的SQL信息是封装到一个底层对象MappedStatement中。
该对象包括:
SQL语句信息、设置参数映射信息、输出结果集映射信息。
其中设置参数和输出结果映射信息包括java的简单类型、HashMap集合对象、POJO对象。
概念性的东西讲解完毕,开始写程序
1.3Mybatis入门程序
1.3.1需求
Mybatis入门程序将通过一个订单商品案例来进行讲解。
具体需求:
1、根据用户ID来查询用户信息;
2、根据用户名称来模糊查询用户信息列表;
3、添加用户;
4、删除用户;
5、修改用户。
1.3.2下载mybatis
mybaits的代码由管理,地址:
下载到本地目录:
E:
\04-jar\03-mybatis3.2.7包\mybatis-3.2.7
Lib:
mybatis的依赖包
Mybatis-3.2.7.jar:
mybatis的核心包
Mybatis-3.2.7.pdf:
mybatis的使用指南
1.3.3数据库环境搭建
数据库用的是MySQL5.1。
1、执行sql_table.sql脚本,创建数据库表;
2、执行sql_data.sql初始化测试数据。
1.3.4代码环境搭建
1.3.4.1创建java工程
先用eclipse创建一个java工程,jdk使用1.7.0_72。
1.3.4.2加入jar包
包括mybatis的核心包、依赖包、数据驱动包。
(学习时加上junit4的包)
1.3.4.3添加log4j.properties文件
Mybatis使用的日志包是log4j的,所以需要添加log4j.properties。
文件内容可以从mybatis-3.2.7.pdf中拷贝
在classpath下创建log4j.properties如下:
#Globalloggingconfiguration
log4j.rootLogger=DEBUG,stdout
#Consoleoutput...
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p[%t]-%m%n
日志级别在开发阶段设置成DEBUG,在生产阶段设置成INFO。
1.3.5编程步骤
第一步:
创建SqlMapConfig.xml配置文件;
第二步:
创建PO类;
第三步:
编写映射文件;
第四步:
把映射文件在SqlMapConfig.xml中进行加载配置;
第四步:
编写测试代码
思路:
1、读取配置文件;
2、SqlSessionFactoryBuilder通过配置文件构造SqlSessionFactory会话工厂。
3、通过SqlSessionFactory创建SqlSession。
4、调用SqlSession的操作数据库的方法。
5、关闭SqlSession。
1.3.6入门程序编写
1.3.6.1创建SqlMapConfig.xml配置文件
SqlMapConfig.xml的文件头(可以从mybatis-3.2.7.pdf文档的2.1.2小节中拷贝):
xmlversion="1.0"encoding="UTF-8"?
>
DOCTYPEconfiguration
PUBLIC"-//mybatis.org//DTDConfig3.0//EN"
"http:
//mybatis.org/dtd/mybatis-3-config.dtd">
文件内容:
--配置mybatis的环境信息-->
--配置JDBC事务控制,由mybatis进行管理-->
--配置数据源,采用dbcp连接池-->
mysql: //localhost: 3306/mybatis"/> 1.3.6.2创建PO类 根据需求设计出数据库结构,然后根据数据库表创建PO类(一张表一个类,一个字段一个属性)。 根据需求设计出的表和PO类如下: user表(会员表)--User类(本部分讲课只需要这一个表和PO类) items表(商品表)--Items类 orders表(订单表)--Orders类 orderdetail表(订单商品表)--OrderDetail类 User.java类如下: PublicclassUser{ privateintid; privateStringusername;//用户姓名 privateStringsex;//性别 privateDatebirthday;//生日 privateStringaddress;//地址 get/set…… 1.3.6.3根据需求编写入门程序 Mybatis的映射文件头(可以从mybatis-3.2.7.pdf文件中拷贝): xmlversion="1.0"encoding="UTF-8"? > DOCTYPEmapper PUBLIC"-//mybatis.org//DTDMapper3.0//EN" "http: //mybatis.org/dtd/mybatis-3-mapper.dtd"> Mybatis的映射文件根路径: 1.3.6.3.1根据用户ID来查询用户信息; 1.3.6.3.1.1编写映射文件 在sqlmap目录下,创建User.xml映射文件,内容如下: -- namespace: 命名空间,它的作用就是对SQL进行分类化管理,可以理解为SQL隔离 注意: 使用mapper代理开发时,namespace有特殊且重要的作用 --> --根据用户ID,查询用户信息--> -- [id]: statement的id,要求在命名空间内唯一 [parameterType]: 入参的java类型 [resultType]: 查询出的单条结果集对应的java类型 [#{}]: 表示一个占位符? [#{id}]: 表示该占位符待接收参数的名称为id。 注意: 如果参数为简单类型时,#{}里面的参数名称可以是任意定义 --> SELECT*FROMUSERWHEREid=#{id} 1.3.6.3.1.2加载映射文件 在sqlMapConfig.xml中,添加以下代码: --加载mapper--> 1.3.6.3.1.3编写测试程序 publicclassMybatisFirst{ @Test publicvoidfindUserByIdTest()throwsException{ //1、读取配置文件 Stringresource="SqlMapConfig.xml"; InputStreaminputStream=Resources.getResourceAsStream(resource); //2、根据配置文件创建SqlSessionFactory SqlSessionFactorysqlSessionFactory=newSqlSessionFactoryBuilder().build(inputStream); //3、SqlSessionFactory创建SqlSession SqlSessionsqlSession=sqlSessionFactory.openSession(); //4、SqlSession执行statement,并返回映射结果 //第一个参数: statement的id,建议: namespace.statementId(确保唯一) //第二个参数: 入参的值,它的类型要和映射文件中对应的statement的入参类型一致 Useruser=sqlSession.selectOne("findUserById",1); //打印输出结果集 System.out.println(user); //5、关闭SqlSession sqlSession.close(); } } 1.3.6.3.2根据用户名称来模糊查询用户信息列表; 1.3.6.3.2.1编写映射文件 在User.xml中,添加以下内容: --根据用户名称模糊查询用户信息列表--> -- [${}]: 表示拼接SQL字符串,即不加解释的原样输出 [${value}]: 表示要拼接的是简单类型参数。 注意: 1、如果参数为简单类型时,${}里面的参数名称必须为value 2、${}会引起SQL注入,一般情况下不推荐使用。 但是有些场景必须使用${},比如orderby${colname} --> SELECT*FROMUSERWHEREusernameLIKE'%${value}%' 1.3.6.3.2.2加载映射文件 1.3.6.3.1.2章节已配置,此处无需再次配置。 1.3.6.3.2.3编写测试程序 注意: 如果查询出的结果集记录大于1条,此时调用SqlSession的selectOne方法时,会报错。 此时要选用selectList方法。 @Test publicvoidfindUsersByNameTest()throwsException{ //1、读取配置文件 Stringresource="SqlMapConfig.xml"; InputStreaminputStream=Resources.getResourceAsStream(resource); //2、根据配置文件创建SqlSessionFactory SqlSessionFactorysqlSessionFactory=newSqlSessionFactoryBuilder().build(inputStream); //3、SqlSessionFactory创建SqlSession SqlSessionsqlSession=sqlSessionFactory.openSession(); //4、SqlSession执行statement,并返回映射结果 //第一个参数: statement的id,建议: namespace.statementId(确保唯一) //第二个参数: 入参的值,它的类型要和映射文件中对应的statement的入参类型一致 List //打印输出结果集 System.out.println(users); //5、关闭SqlSession sqlSession.close(); } 1.3.6.3.3添加用户; 1.3.6.3.3.1编写映射文件 --添加用户--> --如果主键的值是通过MySQL自增机制生成的,那么我们此处不需要再显示的给予赋值--> INSERTINTOUSER(username,sex,birthday,address)VALUES(#{username},#{sex},#{birthday},#{address}) 1.3.6.3.3.2加载映射文件 1.3.6.3.1.2章节已配置,此处无需再次配置。 1.3.6.3.3.3编写测试程序 注意: 增删改操作要对SqlSession执行commit操作。 @Test publicvoidinsertUserTest()throwsException{ //1、读取配置文件 Stringresource="SqlMapConfig.xml"; InputStreaminputStream=Resources.getResourceAsStream(resource); //2、根据配置文件创建SqlSessionFactory SqlSessionFactorysqlSessionFactory=newSqlSessionFactor
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- mybatis 教案