mybatis教案.docx

上传人:b****8 文档编号:11308438 上传时间:2023-02-26 格式:DOCX 页数:109 大小:1.04MB
下载 相关 举报
mybatis教案.docx_第1页
第1页 / 共109页
mybatis教案.docx_第2页
第2页 / 共109页
mybatis教案.docx_第3页
第3页 / 共109页
mybatis教案.docx_第4页
第4页 / 共109页
mybatis教案.docx_第5页
第5页 / 共109页
点击查看更多>>
下载资源
资源描述

mybatis教案.docx

《mybatis教案.docx》由会员分享,可在线阅读,更多相关《mybatis教案.docx(109页珍藏版)》请在冰豆网上搜索。

mybatis教案.docx

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的入参类型一致

Listusers=sqlSession.selectList("test.findUsersByName","小明");

//打印输出结果集

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

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 自然科学 > 物理

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1