mybatis笔记超详细全面.docx

上传人:b****4 文档编号:3696629 上传时间:2022-11-24 格式:DOCX 页数:71 大小:175.49KB
下载 相关 举报
mybatis笔记超详细全面.docx_第1页
第1页 / 共71页
mybatis笔记超详细全面.docx_第2页
第2页 / 共71页
mybatis笔记超详细全面.docx_第3页
第3页 / 共71页
mybatis笔记超详细全面.docx_第4页
第4页 / 共71页
mybatis笔记超详细全面.docx_第5页
第5页 / 共71页
点击查看更多>>
下载资源
资源描述

mybatis笔记超详细全面.docx

《mybatis笔记超详细全面.docx》由会员分享,可在线阅读,更多相关《mybatis笔记超详细全面.docx(71页珍藏版)》请在冰豆网上搜索。

mybatis笔记超详细全面.docx

mybatis笔记超详细全面

1.Mybatis入门

从一个jdbc程序开始

publicstaticvoidmain(String[]args){

Connectionconnection=null;

PreparedStatementpreparedStatement=null;

ResultSetresultSet=null;

try{

//加载数据库驱动

Class.forName("com.mysql.jdbc.Driver");

//通过驱动管理类获取数据库链接

connection=DriverManager.getConnection("jdbc:

mysql:

//localhost:

3306/mybatis?

characterEncoding=utf-8","root","mysql");

//定义sql语句?

表示占位符

Stringsql="select*fromuserwhereusername=?

";

//获取预处理statement

preparedStatement=connection.prepareStatement(sql);

//设置参数,第一个参数为sql语句中参数的序号(从1开始),第二个参数为设置的参数值

preparedStatement.setString(1,"王五");

//向数据库发出sql执行查询,查询出结果集

resultSet=preparedStatement.executeQuery();

//遍历查询结果集

while(resultSet.next()){

System.out.println(resultSet.getString("id")+""+resultSet.getString("username"));

}

}catch(Exceptione){

e.printStackTrace();

}finally{

//释放资源

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();

}

}

}

}

上边使用jdbc的原始方法(未经封装)实现了查询数据库表记录的操作。

jdbc操作步骤总结如下:

1、加载数据库驱动

2、创建并获取数据库链接

3、创建jdbcstatement对象

4、设置sql语句

5、设置sql语句中的参数(使用preparedStatement)

6、通过statement执行sql并获取结果

7、对sql执行结果进行解析处理

8、释放资源(resultSet、preparedstatement、connection)

jdbc问题总结如下:

1、数据库链接创建、释放频繁造成系统资源浪费从而影响系统性能,如果使用数据库链接池可解决此问题。

2、Sql语句写在代码中造成代码不易维护,实际应用sql变化的可能较大,sql变动需要改变java代码。

3、向sql语句传参数麻烦,因为sql语句的where条件不一定,可能多也可能少,占位符需要和参数一一对应。

4、对结果集解析麻烦,sql变化导致解析代码变化,且解析前需要遍历,如果能将数据库记录封装成pojo对象解析比较方便。

MyBatis介绍

MyBatis本是apache的一个开源项目iBatis,2010年这个项目由apachesoftwarefoundation迁移到了googlecode,并且改名为MyBatis。

MyBatis是一个优秀的持久层框架,它对jdbc的操作数据库的过程进行封装,使开发者只需要关注SQL本身,而不需要花费精力去处理例如注册驱动、创建connection、创建statement、手动设置参数、结果集检索等jdbc繁杂的过程代码。

Mybatis通过xml或注解的方式将要执行的statement配置起来,并通过java对象和statement中的sql进行映射生成最终执行的sql语句,最后由mybatis框架执行sql并将结果映射成java对象并返回。

Mybatis架构

1、mybatis配置

SqlMapConfig.xml,此文件作为mybatis的全局配置文件,配置了mybatis的运行环境等信息。

mapper.xml文件即sql映射文件,文件中配置了操作数据库的sql语句。

此文件需要在SqlMapConfig.xml中加载。

2、通过mybatis环境等配置信息构造SqlSessionFactory即会话工厂

3、由会话工厂创建sqlSession即会话,操作数据库需要通过sqlSession进行。

4、mybatis底层自定义了Executor接口操作数据库,Executor接口有两个实现,一个是基本实现、一个是缓存实现。

5、MappedStatement也是mybatis一个底层对象,它包装了mybatis配置信息及sql映射信息等。

mapper.xml文件中一个sql对应一个MappedStatement对象,sql的id即是Mappedstatement的id。

6、MappedStatement对sql执行输入参数进行定义,包括HashMap、基本类型、pojo,Executor通过MappedStatement在执行sql前将输入的java对象映射至sql中,输入参数映射就是jdbc编程中对preparedStatement设置参数。

7、MappedStatement对sql执行输出结果进行定义,包括HashMap、基本类型、pojo,Executor通过MappedStatement在执行sql后将输出结果映射至java对象中,输出结果映射过程相当于jdbc编程中对结果的解析处理过程。

Mybatis第一个程序

第一步:

创建java工程

使用eclipse创建java工程,jdk使用1.6。

第二步:

加入jar包

加入mybatis核心包、依赖包、数据驱动包。

第三步:

log4j.properties

在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

mybatis默认使用log4j作为输出日志信息。

第四步:

SqlMapConfig.xml

在classpath下创建SqlMapConfig.xml,如下:

xmlversion="1.0"encoding="UTF-8"?

>

DOCTYPEconfiguration

PUBLIC"-//mybatis.org//DTDConfig3.0//EN"

"">

---->

mysql:

//localhost:

3306/mybatis?

characterEncoding=utf-8"/>

SqlMapConfig.xml是mybatis核心配置文件,上边文件的配置内容为数据源、事务管理。

第五步:

po类

Po类作为mybatis进行sql映射使用,po类通常与数据库表对应,User.java如下:

publicclassUser{

privateintid;

privateStringusername;//用户姓名

privateStringsex;//性别

privateDatebirthday;//出生日期

privateStringaddress;//地址

privateStringdetail;//详细信息

privateFloatscore;//成绩

get/set……

第六步:

sql映射文件

在classpath下的sqlmap目录下创建sql映射文件User.xml:

xmlversion="1.0"encoding="UTF-8"?

>

DOCTYPEmapper

PUBLIC"-//mybatis.org//DTDMapper3.0//EN"

"">

--根据id获取用户信息-->

select*fromuserwhereid=#{id}

--获取用户列表-->

select*fromuser

--添加用戶-->

insertintouser(username,birthday,sex,address,detail,score)

values(#{username},#{birthday},#{sex},#{address},#{detail},#{score});

--更新用戶-->

updateusersetusername=#{username},birthday=#{birthday},sex=#{sex},address=#{address},detail=#{detail},score=#{score}

whereid=#{id}

--刪除用戶-->

deletefromuserwhereid=#{id}

namespace:

命名空间,用于隔离sql语句,后面会讲另一层非常重要的作用。

parameterType:

定义输入到sql中的映射类型,#{id}表示使用preparedstatement设置占位符号并将输入变量id传到sql。

resultType:

定义结果映射类型。

第七步:

将User.xml添加在SqlMapConfig.xml

在SqlMapConfig.xml中添加mappers如下:

这里即告诉mybatisSql映射文件在哪里。

第八步:

程序编写

查询

/**

*第一个mybatis程序

*

*@authorThinkpad

*

*/

publicclassMybatis_select{

publicstaticvoidmain(String[]args)throwsIOException{

//mybatis配置文件

Stringresource="sqlMapConfig.xml";

InputStreaminputStream=Resources.getResourceAsStream(resource);

//使用SqlSessionFactoryBuilder创建sessionFactory

SqlSessionFactorysqlSessionFactory=newSqlSessionFactoryBuilder()

.build(inputStream);

//通过session工厂获取一个Sqlsession,sqlsession中包括了对数据库操作的sql方法

SqlSessionsession=sqlSessionFactory.openSession();

try{

//通过sqlsession调用selectOne方法获取一条结果集

//参数1:

指定定义的statement的id,参数2:

指定向statement中传递的参数

Useruser=session.selectOne("test.selectUserById",1);

System.out.println(user);

}finally{

session.close();

}

}

}

添加

publicclassMybatis_insert{

publicstaticvoidmain(String[]args)throwsIOException{

//mybatis配置文件

Stringresource="sqlMapConfig.xml";

InputStreaminputStream=Resources.getResourceAsStream(resource);

//使用SqlSessionFactoryBuilder创建sessionFactory

SqlSessionFactorysqlSessionFactory=newSqlSessionFactoryBuilder()

.build(inputStream);

//通过session工厂获取一个Sqlsession,sqlsession中包括了对数据库操作的sql方法

SqlSessionsession=sqlSessionFactory.openSession();

try{

Useruser=newUser();

user.setUsername("张三");

user.setBirthday(newDate());

user.setSex("1");

user.setAddress("北京市");

user.setDetail("好同志");

user.setScore(99.8f);

session.insert("test.insertUser",user);

mit();

}finally{

session.close();

}

}

}

主键返回

通过修改sql映射文件,可以将mysql自增主键返回:

--selectKey将主键返回,需要再返回-->

selectLAST_INSERT_ID()

insertintouser(username,birthday,sex,address,detail,score)

values(#{username},#{birthday},#{sex},#{address},#{detail},#{score});

添加selectKey实现将主键返回

keyProperty:

返回的主键存储在pojo中的哪个属性

order:

selectKey的执行顺序,是相对与insert语句来说,由于mysql的自增原理执行完insert语句之后才将主键生成,所以这里selectKey的执行顺序为after

resultType:

返回的主键是什么类型

LAST_INSERT_ID():

是mysql的函数

Oracle可采用序列完成:

首先自定义一个序列且于生成主键,selectKey使用如下:

keyProperty="id">

SELECT自定义序列.NEXTVALFROMDUAL

注意这里使用的order是“BEFORE”

删除

publicclassMybatis_delete{

publicstaticvoidmain(String[]args)throwsIOException{

//mybatis配置文件

Stringresource="sqlMapConfig.xml";

InputStreaminputStream=Resources.getResourceAsStream(resource);

//使用SqlSessionFactoryBuilder创建sessionFactory

SqlSessionFactorysqlSessionFactory=newSqlSessionFactoryBuilder()

.build(inputStream);

//通过session工厂获取一个Sqlsession,sqlsession中包括了对数据库操作的sql方法

SqlSessionsession=sqlSessionFactory.openSession();

try{

session.delete("test.deleteUser",4);

mit();

}finally{

session.close();

}

}

}

修改

publicclassMybatis_update{

publicstaticvoidmain(String[]args)throwsIOException{

//mybatis配置文件

Stringresource="sqlMapConfig.xml";

InputStreaminputStream=Resources.getResourceAsStream(resource);

//使用SqlSessionFactoryBuilder创建sessionFactory

SqlSessionFactorysqlSessionFactory=newSqlSessionFactoryBuilder()

.build(inputStream);

//通过session工厂获取一个Sqlsession,sqlsession中包括了对数据库操作的sql方法

SqlSessionsession=sqlSessionFactory.openSession();

try{

Useruser=newUser();

user.setId(4);

user.setUsername("李四");

user.setBirthday(newDate());

user.setSex("1");

user.setAddress("北京市");

user.setDetail("好同志");

user.setScore(99.8f);

session.update("test.updateUser",user);

mit();

}finally{

session.close();

}

}

}

步骤总结:

1、创建SqlSessionFactory

2、通过SqlSessionFactory创建SqlSession

3、通过sqlsession执行数据库操作

4、调用mit()提交事务

5、调用session.close()关闭会话

Mybatis解决jdbc编程的问题

1、数据库链接创建、释放频繁造成系统资源浪

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

当前位置:首页 > 经管营销 > 企业管理

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

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