mybatis+spring+springmvc传智播客笔记.docx

上传人:b****4 文档编号:4914481 上传时间:2022-12-11 格式:DOCX 页数:75 大小:377.99KB
下载 相关 举报
mybatis+spring+springmvc传智播客笔记.docx_第1页
第1页 / 共75页
mybatis+spring+springmvc传智播客笔记.docx_第2页
第2页 / 共75页
mybatis+spring+springmvc传智播客笔记.docx_第3页
第3页 / 共75页
mybatis+spring+springmvc传智播客笔记.docx_第4页
第4页 / 共75页
mybatis+spring+springmvc传智播客笔记.docx_第5页
第5页 / 共75页
点击查看更多>>
下载资源
资源描述

mybatis+spring+springmvc传智播客笔记.docx

《mybatis+spring+springmvc传智播客笔记.docx》由会员分享,可在线阅读,更多相关《mybatis+spring+springmvc传智播客笔记.docx(75页珍藏版)》请在冰豆网上搜索。

mybatis+spring+springmvc传智播客笔记.docx

mybatis+spring+springmvc传智播客笔记

 

Mybatis

框架课程

1Mybatis入门

1.1单独使用jdbc编程问题总结

1.1.1jdbc程序

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的原始方法(未经封装)实现了查询数据库表记录的操作。

1.1.2jdbc编程步骤:

1、加载数据库驱动

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

3、创建jdbcstatement对象

4、设置sql语句

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

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

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

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

1.1.3jdbc问题总结如下:

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

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

3、使用preparedStatement向占有位符号传参数存在硬编码,因为sql语句的where条件不一定,可能多也可能少,修改sql还要修改代码,系统不易维护。

4、对结果集解析存在硬编码(查询列名),sql变化导致解析代码变化,系统不易维护,如果能将数据库记录封装成pojo对象解析比较方便。

1.2MyBatis介绍

MyBatis本是apache的一个开源项目iBatis,2010年这个项目由apachesoftwarefoundation迁移到了googlecode,并且改名为MyBatis,实质上Mybatis对ibatis进行一些改进。

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

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

1.3Mybatis架构

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编程中对结果的解析处理过程。

1.4mybatis下载

mybaits的代码由管理,地址:

mybatis-3.2.7.jar----mybatis的核心包

lib----mybatis的依赖包

mybatis-3.2.7.pdf----mybatis使用手册

1.5创建mysql数据库

先导入sql_table.sql,再导入sql_data.sql脚本:

如下:

1.6Mybatis入门程序

1.6.1需求

实现以下功能:

根据用户id查询一个用户信息

根据用户名称模糊查询用户信息列表

添加用户

更新用户

删除用户

1.6.2第一步:

创建java工程

使用eclipse创建java工程,jdk使用1.7.0_72。

1.6.3第二步:

加入jar包

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

1.6.4第三步:

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作为输出日志信息。

1.6.5第四步:

SqlMapConfig.xml

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

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

>

DOCTYPEconfiguration

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

"http:

//mybatis.org/dtd/mybatis-3-config.dtd">

--和spring整合后environments配置将废除-->

--使用jdbc事务管理-->

--数据库连接池-->

mysql:

//localhost:

3306/mybatis?

characterEncoding=utf-8"/>

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

1.6.6第五步:

po类

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

PublicclassUser{

privateintid;

privateStringusername;//用户姓名

privateStringsex;//性别

privateDatebirthday;//生日

privateStringaddress;//地址

get/set……

1.6.7第六步:

程序编写

1.6.7.1查询

1.6.7.1.1映射文件:

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

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

>

DOCTYPEmapper

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

"http:

//mybatis.org/dtd/mybatis-3-mapper.dtd">

namespace:

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

在SqlMapConfig.xml中添加:

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

select*fromuserwhereid=#{id}

--自定义条件查询用户列表-->

resultType="cn.itcast.mybatis.po.User">

select*fromuserwhereusernamelike'%${value}%'

parameterType:

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

resultType:

定义结果映射类型。

1.6.7.1.2加载映射文件

mybatis框架需要加载映射文件,将Users.xml添加在SqlMapConfig.xml,如下:

1.6.7.1.3测试程序:

publicclassMybatis_first{

//会话工厂

privateSqlSessionFactorysqlSessionFactory;

@Before

publicvoidcreateSqlSessionFactory()throwsIOException{

//配置文件

Stringresource="SqlMapConfig.xml";

InputStreaminputStream=Resources.getResourceAsStream(resource);

//使用SqlSessionFactoryBuilder从xml配置文件中创建SqlSessionFactory

sqlSessionFactory=newSqlSessionFactoryBuilder()

.build(inputStream);

}

//根据id查询用户信息

@Test

publicvoidtestFindUserById(){

//数据库会话实例

SqlSessionsqlSession=null;

try{

//创建数据库会话实例sqlSession

sqlSession=sqlSessionFactory.openSession();

//查询单个记录,根据用户id查询用户信息

Useruser=sqlSession.selectOne("test.findUserById",10);

//输出用户信息

System.out.println(user);

}catch(Exceptione){

e.printStackTrace();

}finally{

if(sqlSession!

=null){

sqlSession.close();

}

}

}

//根据用户名称模糊查询用户信息

@Test

publicvoidtestFindUserByUsername(){

//数据库会话实例

SqlSessionsqlSession=null;

try{

//创建数据库会话实例sqlSession

sqlSession=sqlSessionFactory.openSession();

//查询单个记录,根据用户id查询用户信息

Listlist=sqlSession.selectList("test.findUserByUsername","张");

System.out.println(list.size());

}catch(Exceptione){

e.printStackTrace();

}finally{

if(sqlSession!

=null){

sqlSession.close();

}

}

}

}

1.6.7.1.4#{}和${}

#{}表示一个占位符号,通过#{}可以实现preparedStatement向占位符中设置值,自动进行java类型和jdbc类型转换,#{}可以有效防止sql注入。

#{}可以接收简单类型值或pojo属性值。

如果parameterType传输单个简单类型值,#{}括号中可以是value或其它名称。

${}表示拼接sql串,通过${}可以将parameterType传入的内容拼接在sql中且不进行jdbc类型转换,${}可以接收简单类型值或pojo属性值,如果parameterType传输单个简单类型值,${}括号中只能是value。

1.6.7.1.5parameterType和resultType

parameterType:

指定输入参数类型,mybatis通过ognl从输入对象中获取参数值拼接在sql中。

resultType:

指定输出结果类型,mybatis将sql查询结果的一行记录数据映射为resultType指定类型的对象。

1.6.7.1.6selectOne和selectList

selectOne查询一条记录,如果使用selectOne查询多条记录则抛出异常:

org.apache.ibatis.exceptions.TooManyResultsException:

Expectedoneresult(ornull)tobereturnedbyselectOne(),butfound:

3

atorg.apache.ibatis.session.defaults.DefaultSqlSession.selectOne(DefaultSqlSession.java:

70)

selectList可以查询一条或多条记录。

1.6.7.2添加

1.6.7.2.1映射文件:

在SqlMapConfig.xml中添加:

--添加用户-->

selectLAST_INSERT_ID()

insertintouser(username,birthday,sex,address)

values(#{username},#{birthday},#{sex},#{address})

1.6.7.2.2测试程序:

//添加用户信息

@Test

publicvoidtestInsert(){

//数据库会话实例

SqlSessionsqlSession=null;

try{

//创建数据库会话实例sqlSession

sqlSession=sqlSessionFactory.openSession();

//添加用户信息

Useruser=newUser();

user.setUsername("张小明");

user.setAddress("河南郑州");

user.setSex("1");

user.setPrice(1999.9f);

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

//提交事务

sqlSmit();

}catch(Exceptione){

e.printStackTrace();

}finally{

if(sqlSession!

=null){

sqlSession.close();

}

}

}

1.6.7.2.3mysql自增主键返回

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

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

selectLAST_INSERT_ID()

insertintouser(username,birthday,sex,address)

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

添加selectKey实现将主键返回

keyProperty:

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

order:

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

resultType:

返回的主键是什么类型

LAST_INSERT_ID():

是mysql的函数,返回auto_increment自增列新记录id值。

1.6.7.2.4Mysql使用uuid实现主键

需要增加通过selectuuid()得到uuid值

keyProperty="id">

selectuuid()

i

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

当前位置:首页 > 成人教育 > 成考

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

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