版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
延迟符Mybatis框架简介与运行原理MyBatis入门与配置
JavaEE框架技术简介ORM与持久化Mybatis简介Mybatis运行原理ORM与持久化数据持久化一般指将内存中的数据或对象存储到可长期保存的某种介质上,以使其存活时间比创建该对象的进程时间要长。在对数据或对象持久化后,可以重新获取并能保证在没有对其进行任何改动的情况下,与持久化之前的一样。一般持久化的实现通过各种关系数据库来完成。持久层就是专门负责持久化工作的逻辑层,由它统一与数据库层打交道。持久层在数据存储器中负责存储或获取数据的一组类和组件,持久层必须包括一个业务领域实体的模型,在持久层中封装对数据库访问的细节,向业务逻辑公开接口。ORM与持久化对象-关系映射(Object/RelationMapping,ORM)是随着面向对象的软件方法发展而产生的,是为了解决面向对象与关系数据库存在的互不匹配现象而产生的技术。对象和关系数据是业务实体的两种表现形式,业务实体在内存中表现为对象,在数据库中表现为关系数据。ORM通过使用描述对象和数据库之间映射的元数据,将程序中的对象自动持久化到关系数据库中。本质上就是将数据表映射为对象类,从一种形式转换到另外一种形式。使用ORM技术,将在数据库中直接进行的原始操作演变为对类的属性和方法的操作,而间接更改数据表的数据。
如今流行的ORM产品很多,如:ApacheOJB、MyBatis、Cayenne、Hibernate等,MyBatis作为轻量级ORM模型,对面向对象特性的支持非常完备,完美的实现了对象模型和关系模型间的转换,逐步确立了在JavaORM架构中领导地位。Mybatis简介MyBatis本是apache的一个开源项目iBatis,2010年这个项目由apachesoftwarefoundation迁移到了googlecode,并且改名为MyBatis。BATIS一词来源于“internet”和“abatis”的组合,是一个基于Java的持久层框架。MyBatis是一款优秀的持久层框架,它支持自定义SQL、存储过程以及高级映射。MyBatis免除了几乎所有的JDBC代码以及设置参数和获取结果集的工作。MyBatis可以通过简单的XML或注解来配置和映射原始类型、接口和JavaPOJO(PlainOldJavaObjects,普通老式Java对象)为数据库中的记录。MyBatis的优点如下:MyBatis是一个“半成品”的“ORM”框架。作用于DAO(DataAccessObject)层。
和Hibernate相比,他是一个轻量级的选手。有着灵活的SQL的操作。
和JDBC相比,他实现了SQL和代码的分离。可重用。
Mybatis框架运行原理-功能架构
Mybatis框架运行原理-功能架构MyBatis的功能架构分为三个层次:
(1)API接口层:提供给外部使用的接口API,开发人员通过这些本地API来操纵数据库。接口层一接收到调用请求就会调用数据处理层来完成具体的数据处理。(2)数据处理层:负责具体的SQL查找、SQL解析、SQL执行和执行结果映射处理等。它主要的目的是根据调用的请求完成一次数据库操作。(3)基础支撑层:负责最基础的功能支撑,包括连接管理、事务管理、配置加载和缓存处理,这些都是共用的东西,将他们抽取出来作为最基础的组件。为上层的数据处理层提供最基础的支撑。
Mybatis框架运行原理-运行原理
(1)读取MyBatis的配置文件。mybatis-config.xml为MyBatis的全局配置文件,用于配置数据库连接信息。(2)加载映射文件。映射文件即SQL映射文件,该文件中配置了操作数据库的SQL语句,需要在MyBatis配置文件MyBatis-config.xml中加载。MyBatis-config.xml文件可以加载多个映射文件,每个文件对应数据库中的一张表。(3)构造会话工厂。通过MyBatis的环境配置信息构建会话工厂SqlSessionFactory。(4)创建会话对象。由会话工厂创建SqlSession对象,该对象中包含了执行SQL语句的所有方法。(5)Executor执行器。MyBatis底层定义了一个Executor接口来操作数据库,它将根据SqlSession传递的参数动态地生成需要执行的SQL语句,同时负责缓存的维护。(6)MappedStatement对象。在Executor接口的执行方法中有一个MappedStatement类型的参数,该参数是对映射信息的封装,用于存储要映射的SQL语句的id、参数等信息。(7)输入参数映射。输入参数类型可以是Map、List等集合类型,也可以是基本数据类型和POJO类型。输入参数映射过程类似于JDBC对preparedStatement对象设置参数的过程。(8)输出结果映射。输出结果类型可以是Map、List等集合类型,也可以是基本数据类型和POJO类型。输出结果映射过程类似于JDBC对结果集的解析过程。谢谢观看主讲人:崔浩延迟符搭建Mybatis开发环境MyBatis入门与配置搭建Mybatis开发环境创建项目配置Mybatis开发环境创建项目文件->新建->项目,构建系统处选择Maven,点开高级设置,可以修改组ID和工件ID本节任务实现在IDEA2022版中搭建Mybtais环境,MyBatis版本为3.5.15,MySQL数据库为8,Java版本为1.8。为保证项目可以正常运行,要先配置maven。创建项目创建成功后,打开项目文件,如图配置Mybatis环境在pom.xml文件中添加依赖<!--MyBatis--><dependency><groupId>org.MyBatis</groupId><artifactId>MyBatis</artifactId><version>3.5.11</version></dependency><!--mysql驱动--><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.31</version></dependency>配置Mybatis环境(2)创建XML核心配置文件MyBatis-config.xml<configuration><environmentsdefault="development"><environmentid="development"><transactionManagertype="JDBC"/><dataSourcetype="POOLED"><!--获取数据库连接信息--><propertyname="driver"value="com.mysql.cj.jdbc.Driver"/><propertyname="url"value="jdbc:mysql://localhost:3306/db_hbook?useSSl=true"/><propertyname="username"value="root"/><propertyname="password"value="123"/></dataSource></environment></environments>
<!--加载sql映射文件--><mappers>
<mapperresource="cn/js/ccit/mapper/UserMapper.xml"/></mappers></configuration>在resource文件夹下创建文件:myBatis-config.xml,文件后缀一定要为.xml。配置Mybatis环境(3)创建用户表CREATETABLE`tb_user`(`uid`int(11)NOTNULLAUTO_INCREMENT,`uname`varchar(255)CHARACTERSETutf8mb4COLLATEutf8mb4_general_ciNULLDEFAULTNULL,`uage`int(11)NULLDEFAULTNULL,PRIMARYKEY(`uid`)USINGBTREE)ENGINE=InnoDBAUTO_INCREMENT=5CHARACTERSET=utf8mb4COLLATE=utf8mb4_general_ciROW_FORMAT=Compact;在数据库中,创建用户表:tb_user,具体代码如下:配置Mybatis环境(4)创建用户类@DatapublicclassUser{privateintuid;//用户idprivateStringuname;//用户姓名privateintuage;//用户年龄}配置Mybatis环境(5)编写sql映射文件<mappernamespace="cn.js.ccit.mapper.UserMapper"><!--id:每一个sql语句的唯一标识,即外部通过id来调用语句--><!--resultType:返回的结果类型,即定义的POJO类--><selectid="selectAll"resultType="cn.js.ccit.pojo.User">select*fromtb_user</select></mapper>在cn.js.ccit.mapper包下创建UserMapper.xml文件。<select>标签是用于查询语句,且标签内直接写sql查询语句,该语句查询user表中所有信息。【注】:resultType中填写类型时要需要加上类所在的包。配置Mybatis环境(6)测试publicclassUserTest{@TestpublicvoidselectAllTest(){//1.加载MyBatis的核心配置文件a,获取SqlSessionFactory对象Stringresource="myBatis-config.xml";InputStreaminputStream=null;try{inputStream=Resources.getResourceAsStream(resource);SqlSessionFactorysqlSessionFactory=newSqlSessionFactoryBuilder().build(inputStream);//2.获取SqlSession对象,执行sql语句SqlSessionsqlSession=sqlSessionFactory.openSession();//3.执行sql语句List<User>users=sqlSession.selectList("cn.js.ccit.mapper.UserMapper.selectAll");System.out.println(users);//4.释放资源sqlSession.close();}catch(Exceptione){e.printStackTrace();}}}创建一个测试类UserTest.java,UserTest类通过SqlSessionFactory、SqlSession等类执行sql语句。配置Mybatis环境运行成功界面谢谢观看主讲人:崔浩延迟符SqlSessionFactory与SqlSessionMyBatis入门与配置SqlSessionFactorySqlSession延迟符MyBatis的核心对象延迟符SqlSessionFactory对象SqlSessionFactory是单个数据库映射关系经过编译后的内存镜像,其主要作用是创建SqlSession。SqlSessionFactory是一个接口,其实例可以通过SqlSessionFactoryBuilder对象来构建。SqlSessionFactoryBuilder可以通过XML配置文件或一个预先定义好的Configuration实例构建出SqlSessionFactory的实例。什么是SqlSessionFactory?延迟符SqlSessionFactory对象(1)InputStreaminputStream=Resources.getResourceAsStream("mybatis-config.xml");(2)SqlSessionFactorysqlSessionFactory=newSqlSessionFactoryBuilder().build(inputStream);构建SqlSessionFactory
通过XML配置文件创建:使用
MyBatis的配置文件(通常是
MyBatis-config.xml),在其中配置数据源、映射文件等信息,然后通过SqlSessionFactoryBuilder类的build()方法创建SqlSessionFactory实例。通过Java代码创建:通过程序化的方式,直接在代码中配置数据源、映射信息等,然后调用SqlSessionFactoryBuilder类的build()方法创建SqlSessionFactory实例。延迟符SqlSessionFactory对象-功能和作用
数据库会话管理:SqlSessionFactory负责创建SqlSession对象,SqlSession对象是与数据库交互的主要入口,它提供了执行SQL语句、获取映射器(Mapper)等功能。线程安全性:通常情况下,SqlSessionFactory是一个单例对象,它的创建成本较高,因此通常会在应用程序启动时被创建,并在整个应用程序生命周期中被共享和重复使用。配置加载:SqlSessionFactory可以从配置文件中加载数据源、映射文件等配置信息,从而正确地配置数据库连接和SQL映射。延迟符SqlSessionFactory对象-生命周期管理SqlSessionFactory的生命周期通常与应用程序的生命周期相同,它在应用程序启动时被创建,随着应用程序的关闭而销毁。因此,在应用程序启动时创建SqlSessionFactory实例,然后通过整个应用程序共享它是一个常见的做法。示例代码如下。SqlSessionFactoryStringresource="MyBatis-config.xml";InputStreaminputStream=Resources.getResourceAsStream(resource);SqlSessionFactorysqlSessionFactory=newSqlSessionFactoryBuilder().build(inputStream);
SqlSessionFactory是
MyBatis中的核心接口之一,它提供了创建SqlSession对象的功能,是
MyBatis与数据库之间的桥梁。了解SqlSessionFactory的使用方法和生命周期管理对于
MyBatis的正确使用至关重要。延迟符SqlSession对象SqlSession是应用程序与持久层之间执行交互操作的一个单线程对象,其主要作用是执行持久化操作。什么是SqlSession?一个SqlSession对象对应一个连接资源的启用,以对象创建开始,至对象关闭结束。SqlSession是线程不安全的,使用后要及时关闭。延迟符SqlSession对象SqlSessionsqlSession=SqlSessionFactory.openSession();构建SqlSessiontry{ //持久化相关操作}finally{ sqlSession.close();}关闭SqlSession延迟符SqlSession对象查询方法:<T>TselectOne(Stringstatement);<T>TselectOne(Stringstatement,Objectparameter);<E>List<E>selectList(Stringstatement);<E>List<E>selectList(Stringstatement,Objectparameter);<E>List<E>selectList(Stringstatement,Objectparameter,RowBoundsrowBounds);voidselect(Stringstatement,Objectparameter,ResultHandlerhandler);延迟符SqlSession对象插入、更新和删除方法:intinsert(Stringstatement);intinsert(Stringstatement,Objectparameter);intupdate(Stringstatement);intupdate(Stringstatement,Objectparameter);intdelete(Stringstatement);intdelete(Stringstatement,Objectparameter);延迟符SqlSession对象其他方法:voidcommit();提交事务的方法。voidrollback();回滚事务的方法。voidclose();关闭SqlSession对象。<T>TgetMapper(Class<T>type);返回Mapper接口的代理对象。ConnectiongetConnection();获取JDBC数据库连接对象的方法。谢谢观看主讲人:崔浩延迟符任务2.2角色管理MyBatis入门与配置角色管理延迟符
本任务主要功能是完成角色信息的添加、删除、修改与显示。本任务以角色修改说明角色管理的设计过程,修改角色的开发分为五个步骤:视图层JSP设计、实体层、Mapper接口、Mapper映射文件、控制层。角色管理-视图层JSP设计修改角色视图层需要设计两个页面:updateRole.jsp、showAllRole.jsp。
修改角色页面角色列表显示页面这里不再展示具体实现代码,自行实现即可。角色管理-实体层角色管理子模块涉及到的实体是角色实体类。@DatapublicclassRoleimplementsjava.io.Serializable{ privateintid; privateStringroleName;//角色名称 privateStringroleDesc;//角色描述}角色管理-Mapper接口修改角色涉及的接口是:RoleMapper.java。@MapperpublicinterfaceRoleMapper{//修改角色publicvoidupdateRole(Rolerole);//查询所有角色publicList<Role>searcherAllRole();//根据id查询查询指定角色publicRolesearcherRoleByID(intid);}角色管理-映射文件XML修改角色涉及的映射文件是:RoleMapper.xml。<mappernamespace="cn.js.ccit.mapper.RoleMapper"><!--查询所有角色
--><selectid="searcherAllRole"resultType="role">select*fromtb_role</select><!--根据id查询指定角色
--><selectid="searcherRoleByID"parameterType="int“resultType="role">select*fromtb_rolewhereid=#{id}</select><!—修改角色
--><updateid="updateRole"parameterType="role">updatetb_rolesetroleName=#{roleName},roleDesc=#{roleDesc}whereid=#{id}</update></mapper>角色管理-控制层修改角色首先要根据ID获取角色信息并保存到内存中,其次在修改页面中输入要修改的角色信息,最后获取角色信息并修改角色。@WebServlet("/role")publicclassRoleControllerextendsHttpServlet{protectedvoiddoGet(HttpServletRequestreq,HttpServletResponseres)throwsServletException,IOException{PrintWriterout=res.getWriter();req.setCharacterEncoding("utf-8");HttpSessionsession=req.getSession();res.setContentType("text/html;charset=utf-8");
Stringaction=req.getParameter("action");//获取操作命令Stringresult="";//返回地址SqlSessionsqlSession=MyBatisUtil.openSession();//获取sqlSession对象RoleMapperroleMapper=sqlSession.getMapper(RoleMapper.class);if(action.equals("show")){//显示所有角色信息List<Role>roles=roleMapper.searcherAllRole();session.setAttribute("roles",roles);result="role/showAllRole.jsp";}
if(action.equals("preUpdate")){//修改预处理StringidStr=req.getParameter("id");intid=Integer.parseInt(idStr);Rolerole=roleMapper.searcherRoleByID(id);session.setAttribute("role",role);result="role/updateRole.jsp";}if(action.equals("update")){//修改角色StringidStr=req.getParameter("id");intid=Integer.parseInt(idStr);StringroleName=req.getParameter("newRoleName");StringroleDesc=req.getParameter("newRoleDesc");Rolerole=newRole();role.setId(id);role.setRoleName(roleName);role.setRoleDesc(roleDesc);roleMapper.updateRole(role);sqlSmit();result="role?action=show";}res.sendRedirect(result);}
}谢谢观看主讲人:崔浩延迟符MyBatis配置文件与映射文件MyBatis入门与配置延迟符Mybatis配置文件Mybatis映射文件MyBatis配置文件与映射文件延迟符MyBatis的配置文件配置文件一般用mybatis-config.xml命名DB连接的基本要素实体类的别名设置运行时环境设置配置映射文件MyBatis的配置文件<configuration><properties><settings><typeAliases><typeHandlers><objectFacotry><plugins><databaseIdProvider><environments><mappers><environment><transactionManager><dataSource>MyBatis的配置文件<properties>给系统配置一些运行参数,可以放在XML文件或者properties文件中,方便参数修改。010203src目录下创建perties文件jdbc.driver=com.mysql.jdbc.Driverjdbc.url=jdbc:mysql://localhost:3306/mybatisjdbc.username=rootjdbc.password=rootmybatis-config.xml中配置属性<propertiesresource=“perties”/>修改配置文件中数据库连接的信息<dataSourcetype="POOLED"><propertyname="driver"value="${jdbc.driver}"/><propertyname="url"value="${jdbc.url}"/><propertyname="username"value="${jdbc.username}"/><propertyname="password"value="${jdbc.password}"/></dataSource>MyBatis的配置文件<settings>主要用于改变MyBatis运行时的行为,但在大部分情况下使用默认值便可以运行,一般只需要修改一些常用的规则即可,例如开启二级缓存、开启延迟加载等。配置项作用可设置值默认值cacheEnabled该配置影响所有映射器中配置缓存的全局开关true|falsetruelazyLoadingEnabled延迟加载的全局开关。当开启时,所有关联对象都会延迟加载。在特定关联关系中可通过设置fetchType属性来覆盖该项的开关状态
true|falsefalseaggressiveLazyLoading当启用时,对任意延迟属性的调用会使带有延迟加载属性的对象完整加载;反之,每种属性将会按需加载true|felsetruemultipleResultSetsEnabled
是否允许单一语句返回多结果集(需要兼容驱动)true|falsetrueuseColumnLabel使用列标签代替列名。不同的驱动会有不同的表现,具体可参考相关驱动文档或通过测试这两种不同的模式来观察所用驱动的结果true|falsetrueuseGeneratedKeys允许JDBC支持自动生成主键,需要驱动兼容。如果设置为true,则这个设置强制使用自动生成主键,尽管一些驱动不能兼容但仍可正常工作(比如Derby)true|falsefalseautoMappingBehavior指定MyBatis应如何自动映射列到字段或属性。NONE表示取消自动映射。PARTIAL表示只会自动映射,没有定义嵌套结果集和映射结果集。FULL会自动映射任意复杂的结果集(无论是否嵌套)NONE、PARTIAL、FULLPARTIALdefaultExecutorType配置默认的执行器。SIMPLE是普通的执行器;REUSE会重用预处理语句(preparedstatements);BATCH执行器将重用语句并执行批量更新
SIMPLE、REUSE、BATCHSIMPLEdefaultStatementTimeout设置超时时间,它决定驱动等待数据库响应的秒数任何正整数NotSet(null)mapUnderscoreToCamelCase是否开启自动驼峰命名规则映射,即从经典数据库列名A_COLUMN到经典Java属性名aColumn的类似映射true|falsefalsejdbcTypeForNull当没有为参数提供特定的JDBC类型时,为空值指定JDBC类型。某些驱动需要指定列的JDBC类型,多数情况直接用一般类型即可,比如NULL、VARCHAR或OTHERNULL、VARCHAR、OTHER
OTHER<settings><settingname="cacheEnabled"value="true"/><settingname="lazyLoadingEnabled"value="true"/><settingname="multipleResultSetsEnabled"value="true"/><settingname="useColumnLabel"value="true"/><settingname="useGeneratedKeys"value="false"/><settingname="autoMappingBehavior"value="PARTIAL"/><settingname="autoMappingUnknownColumnBehavior"value="WARNING"/><settingname="defaultExecutorType"value="SIMPLE"/><settingname="defaultStatementTimeout"value="25"/><settingname="defaultFetchSize"value="100"/><settingname="safeRowBoundsEnabled"value="false"/><settingname="mapUnderscoreToCamelCase"value="false"/><settingname="localCacheScope"value="SESSION"/><settingname="jdbcTypeForNull"value="OTHER"/><settingname="lazyLoadTriggerMethods"value="equals,clone,hashCode,toString"/></settings>MyBatis的配置文件<typeAliases>为配置文件中的Java类型设置一个简短的名字(别名),别名使用的意义在于减少全限定类名的冗余。配置别名:<typeAliases><typeAliasalias="customer"type="com.ccit.po.Customer"/></typeAliases>alias属性值就是自定义的别名type属性用于指定需要被定义别名的类的全限定名自动扫描包定义别名:<typeAliases><packagename="com.ccit.po"/></typeAliases>name属性值用于指定要被定义别名的包packagecom.ccit.po;@Alias("customer1")publicClassCustomer{
}类中注解定义别名:别名Java映射类型_bytebyte_longlong_shortshort_intint_integerint_doubledouble_floatfloat_booleanbooleanstringStringbyteBytelongLongshortShortintIntegerintegerIntegerdoubleDoublefloatFloatbooleanBooleandateDatedecimalBigDecimalbigdecimalBigDecimalobjectObjectmapMaphashmapHashMaplistListarraylistArrayListcollectionCollectioniteratorIteratorResultSetResultSetMyBatis的配置文件<typeAliases>MyBatis的配置文件<typeHandlers>将预处理语句中传入的参数从Java类型转换为JDBC类型,或者从数据库取出结果时将JDBC类型转换为Java类型.JDBC类型Java类型typeHandler类型处理器Java类型JDBC类型BooleanTypeHandlerjava.lang.Boolean,boolean数据库兼容的BOOLEANByteTypeHandlerjava.lang.Byte,byte数据库兼容的NUMERIC或BYTEShortTypeHandlerjava.lang.Short,short数据库兼容的NUMERIC或SHORTINTEGERIntegerTypeHandlerjava.lang.Integer,int数据库兼容的NUMERIC或INTEGERLongTypeHandlerjava.lang.Long,long数据库兼容的NUMERIC或LONGINTEGERFloatTypeHandlerjava.lang.Float,float数据库兼容的NUMERIC或FLOATDoubleTypeHandlerjava.lang.Double,double数据库兼容的NUMERIC或DOUBLEBigDecimalTypeHandlerjava.math.BigDecimal数据库兼容的NUMERIC或DECIMALStringTypeHandlerjava.lang.StringCHAR、VARCHARClobReaderTypeHandlerjava.io.Reader——ClobTypeHandlerjava.lang.StringCLOB、LONGVARCHARNStringTypeHandlerjava.lang.StringNVARCHAR、NCHARNClobTypcHandlerjava.lang.StringNCLOBBlobInputStreamTypeHandlerjava.io.InputStream——ByteArrayTypeHandlerbyte[]数据库兼容的字节流类型BlobTypeHandlerbyte[]BLOB、LONGVARBINARYDateTypeHandlerjava.util.DateTIMESTAMPDateOnlyTypeHandlerjava.util.DateDATETimeOnlyTypeHandlerjava.util.DateTIMESqlTimestampTypeHandlerjava.sql.TimestampTIMESTAMPSqlDateTypeHandler
java.sql.Date
DATESqlTimeTypeHandlerjava.sql.TimeTIMEObjectTypeHandlerAnyOTHER或未指定类型
MyBatis的配置文件<objectFactory>创建结果集对象实例时,MyBatis会使用一个对象工厂ObjectFactory来完成创建这个结果集实例。MyBatis中默认的ObjectFactory的作用是实例化目标类,它既可以通过默认构造方法实例化,也可以在参数映射存在的时候通过参数构造方法来实例化。
(1)自定义一个对象工厂
(2)使用<objectFactory>元素配置自定义的ObjectFactorypublicclassMyObjectFactoryextendsDefaultObjectFactory{privatestaticfinallongserialVersionUID=-4114845625429965832L;public<T>Tcreate(Class<T>type){ returnsuper.create(type);}public<T>Tcreate(Class<T>type,List<Class<?>>constructorArgTypes,List<Object>constructorArgs){ returnsuper.create(type,constructorArgTypes,constructorArgs);}publicvoidsetProperties(Propertiesproperties){ super.setProperties(properties);}public<T>booleanisCollection(Class<T>type){ returnCollection.class.isAssignableFrom(type);}}<objectFactorytype="com.ccit.factory.MyObjectFactory"><propertyname="name"value="MyObjectFactory"/></objectFactory>MyBatis的配置文件<plugins><plugins>元素的作用就是配置用户所开发的插件。MyBatis允许在映射语句执行过程中的某一点进行拦截调用,这种拦截调用是通过插件来实现的。
<plugins><plugininterceptor="com.plugins.ExamplePlugin">
<propertyname="someProperty"value="100"/></plugin></plugins>
MyBatis的配置文件<environments>运行环境主要的作用是配置数据源和事务管理器,它可以配置多个数据源即多个数据库,一般只需要配置其中的一个。<environmentsdefault="mysql"><environmentid="mysql"><transactionManagertype="JDBC"/><dataSourcetype="POOLED"><propertyname="driver"value="com.mysql.jdbc.Driver"/><propertyname="url"value="jdbc:mysql://localhost:3306/mybatis"/><propertyname="username"value="root"/><propertyname="password"value="root"/></dataSource></environment></environments>default属性指定默认的环境id属性表示所定义环境的id值配置事务管理配置数据源MyBatis的配置文件<transactionManager>environments元素下的子元素,用于配置事务管理,它的type属性用于指定事务管理的方式,取值可以是JDBC和MANAGED。<transactionManagertype="JDBC"/>
<transactionManagertype="MANAGED"/>JDBC:此配置直接使用了JDBC的提交和回滚设置,它依赖于从数据源得到的连接来管理事务的作用域。MANAGED:此配置从来不提交或回滚一个连接,而是让容器来管理事务的整个生命周期。MyBatis的配置文件<dataSource>environments元素下的子元素,用于配置数据源类型和数据库连接基本属性,它的type属性用于指定使用哪种数据源,常见类型有:<dataSourcetype="UNPOOLED">
<dataSourcetype="POOLED">
<dataSourcetype="JNDI">UNPOOLED采用非数据库池的管理方式,每次请求都会打开一个新的数据库连接,所以创建会比较慢。在一些对性能没有很高要求的场合可以使用它。属性设置说明driver数据库驱动名,如
MySQL
的com.mysql.jdbc.Driverurl连接数据库的URLusername登录数据库的用户名password登录数据库的密码defaultTransactionIsolationLevel默认的连接事务隔离级别MyBatis的配置文件<dataSource>POOLED利用“池”的概念将JDBC的Connection对象组织起来,请求时无须再建立和验证,省去了创建新的连接实例时所必需的初始化和认证时间。使得并发Web应用可以快速地响应请求,它还控制最大连接数,避免过多的连接导致系统瓶颈。名称说明poolMaximumActiveConnections
是在任意时间都存在的活动(也就是正在使用)连接数量,默认值为10poolMaximumIdleConnections是任意时间可能存在的空闲连接数poolMaximumCheckoutTime在被强制返回之前,池中连接被检出(checkedout)的时间,默认值为20000毫秒(即20秒)poolTimeToWait是一个底层设置,如果获取连接花费相当长的时间,它会给连接池打印状态日志,并重新尝试获取一个连接(避免在误配置的情况下一直失败),默认值为20000毫秒(即20秒)。poolPingQuery为发送到数据库的侦测查询,用来检验连接是否处在正常工作秩序中,并准备接受请求。默认是“NOPINGQUERYSET”,这会导致多数数据库驱动失败时带有一个恰当的错误消息。poolPingEnabled为是否启用侦测查询。若开启,也必须使用一个可执行的SQL语句设置poolPingQuery属性(最好是一个非常快的SQL),默认值为false。poolPingConnectionsNotUsedFor为配置poolPingQuery的使用频度。这可以被设置成匹配具体的数据库连接超时时间,来避免不必要的侦测,默认值为0(即所有连接每一时刻都被侦测——仅当poolPingEnabled为true时适用)。MyBatis的配置文件<dataSource>JNDI为了能在如EJB或应用服务器这类容器中使用,容器可以集中或在外部配置数据源,然后放置一个JNDI上下文的引用。属性说明initial_context用来在InitialContext中寻找上下文(即initialContext.lookup(initial_context))。initial_context是个可选属性,如果忽略,那么data_source属性将会直接从InitialContext中寻找。data_source引用数据源实例位置上下文的路径。当提供initial_context配置时,data_source会在其返回的上下文中进行查找;当没有提供initial_context时,data_source直接在InitialContext中查找。MyBatis的配置文件<mappers>用于指定MyBatis映射文件的位置。01020304使用类路径引入<mappers><mapperresource=“cn/js/ccit/mapper/CustomerMapper.xml"/></mappers>使用本地文件路径引入<mappers><mapperurl="file:///D:/com/ccit/mapper/CustomerMapper.xml"/></mappers>使用接口类引入<mappers><mapperclass=“cn.js.ccit.mapper.CustomerMapper"/></mappers><mappers><packagename=“cn.js.ccit.mapper"/></mappers>使用包名引入延迟符MyBatis的映射文件映射文件是mybatis很重要的文件,主要用来管理SQL语句映射文件是xml格式的配置文件,由一系列具有层级关系的元素组成。延迟符MyBatis的映射文件<mapper><select><insert><update><delete><sql><cache-ref><cache><resultMap>MyBatis的映射文件映射文件一般用实体类名+mapper.xml命名,如CustomerMapper.xmlselect—查询insert—插入update—修改delete—删除延迟符MyBatis的映射文件<select>用来映射查询语句,它可以帮助我们从数据库中读取出数据,并组装数据给业务开发人员。<selectid="findCustomerById"parameterType="Integer"resultType="cn.js.ccit.po.Customer"> select*fromt_customerwhereid=#{id}</select>唯一标识符传入SQL语句的参数类型的全限定名或别名SQL语句执行后返回类型的全限定名或别名属性名称描述resultMap它是映射集的引用,与<resultMap>元素一起使用,返回时可以使用resultType或resultMap之一flushCache用于设置在调用SQL语句后是否要求MyBatis清空之前查询的本地缓存和二级缓存,默认值为false,如果设置为true,则任何时候只要SQL语句被调用都将清空本地缓存和二级缓存useCache启动二级缓存的开关,默认值为true,表示将査询结果存入二级缓存中timeout用于设置超时参数,单位是秒(s),超时将抛出异常fetchSize获取记录的总条数设定statementType告诉MyBatis使用哪个JDBC的Statement工作,取值为STATEMENT(Statement)、PREPARED(PreparedStatement)、CALLABLE(CallableStatement)resultSetType这是针对JDBC的ResultSet接口而言,其值可设置为FORWARD_ONLY(只允许向前访问)、SCROLL_SENSITIVE(双向滚动,但不及时更新)、SCROLLJNSENSITIVE(双向滚动,及时更新)对指定参数类型属性值的引用延迟符MyBatis的映射文件<insert>用于映射插入语句,执行完一条插入语句后将返回一个整数表示其影响的行数。属性名称描述keyProperty属性的作用是将插入或更新操作时的返回值赋给PO类的某个属性,通常会设置为主键对应的属性。如果是联合主键,可以将多个值用逗号隔开keyColumn该属性用于设置第几列是主键,当主键列不是表中的第1列时需要设置。如果是联合主键,可以将多个值用逗号隔开useGeneratedKeys该属性将使MyBatis使用JDBC的getGeneratedKeys()方法获取由数据库内部产生的主键,例
MySQL、SQLServer等自动递增的字段,其默认值为false。<insertid="addCustomer"parameterType="cn.js.ccit.po.Customer"keyProperty="id"useGeneratedKeys="true">insertintot_customer(username,jobs,phone)values(#{username},#{jobs},#{phone})</insert>延迟符MyBatis的映射文件<delete>执行后返回一个整数,表示影响了数据库的记录行数<!--更新信息--><updateid="updateCustomer"parameterType="cn.js.ccit.po.Customer">updatet_customersetusername=#{username},jobs=#{jobs},phone=#{phone}whereid=#{id}</update><!--删除信息--><deleteid="deleteCustomer"parameterType="Integer">deletefromt_customerwhereid=#{id}</delete><update>延迟符MyBatis的映射文件<sql>可以定义SQL语句的一部分(代码片段),以方便后面的SQL语句引用这一段代码。使用sql标签定义一段代码片段<sqlid="customerColumns">id,username,jobs,phone</sql>使用已定义的代码片段<selectid=“findCustomerById”parameterType=“Integer"resultType="cn.js.ccit.po.Customer">select<includerefid="customerColumns"/>fromt_customerwhereid=#{id}</select>延迟符MyBatis的映射文件<resultMap>表示结果映射集,它的主要作用是定义映射规则、级联的更新以及定义类型转化器等。<resultMaptype=""id=""><constructor><!--类在实例化时,用来注入结果到构造方法中--><idArg/><!--ID参数;标记结果作为ID--><arg/><!--注入到构造方法的一个普通结果--></constructor><id/><!--用于表示哪个列是主键--><result/><!--注入到字段或JavaBean属性的普通结果--><associationproperty=""/><!--用于一对一关联--><collectionproperty=""/><!--用于一对多关联--><discriminatorjavaType=""><!--使用结果值来决定使用哪个结果映射--><casevalue=""/><!--基于某些值的结果映射--></discriminator> </resultMap>表示需要的POJO唯一标识延迟符MyBatis的映射文件<cache>给定命名空间的缓存配置。<cacheeviction="FIFO"flushInterval="60000"size="512"readOnly="true"/>这段代码配置了一个缓存,指定了缓存的回收策略、刷新间隔、大小等属性。<cache-ref>用于引用其他命名空间缓存配置。<cache-refnamespace="com.example.OtherMapper"/>这段代码引用了com.example.OtherMapper命名空间的缓存配置,可以共享该命名空间的缓存。谢谢观看主讲人:崔浩延迟符任务2.3权限管理MyBatis入门与配置权限管理延迟符
本任务主要功能是完成权限信息的添加、删除、修改与显示。本任务以权限添加说明权限管理的设计过程,添加权限的开发分为五个步骤:视图层JSP设计、实体层、Mapper接口、Mapper映射文件、控制层。权限管理-视图层JSP设计添加与显示权限视图层需要设计两个页面:addRight.jsp、showAllRight.jsp。添加权限页面权限显示页面权限管理-实体层权限管理子模块涉及到的实体是权限实体类。@DatapublicclassRightimplementsjava.io.Serializable{ privateintrightid; privateStringrightName;//权限名称 privateStringrightDesc;//权限描述 privateintrightColumnID;//权限分栏ID privateStringurl;//权限访问链接}权限管理-Mapper接口添加权限涉及的接口是:RightMapper.java。publicinterfaceRightMapper{ //添加权限 publicbooleanaddRight(Rightright); //根据权限名称查询是否存在 publicBooleanisExistRight(StringrightName); //根据权限分栏ID查询权限列表
public
List<Right>searchAllRightByRightColumnID(intid);}权限管理-映射文件XML添加权限涉及的映射文件是:RightMapper.xml。<mappernamespace="cn.js.ccit.mapper.RightMapper"><!--添加权限--><insertid="addRight"parameterType="right">insertintotb_right(rightName,rightDesc,rightColumnID,url)values(#{rightName},#{rightDesc},#{rightColumnID},#{url})</insert><!--根据权限名称查询是否存在--><selectid="isExistRight"parameterType="string"resultType="java.lang.Boolean">select*fromtb_rightwhererightName=#{rightName}</select><!--根据权限分栏ID查询权限列表--><selectid="searchAllRightByRightColumnID"parameterType="int“resultType="right">select*fromtb_rightwhererightColumnID=#{param1}</select></mapper>权限管理-控制层添加权限首先要获取到所有的权限信息,之后通过添加操作,如果权限名称和已有权限名称不重复,就完成权限添加,否则重新命名。@WebServlet("/right")publicclassRightControllerextendsHttpServlet{protectedvoiddoGet(HttpServletRequestreq,HttpServletResponseres)throwsServletException,IOException{PrintWriterout=res.getWriter();req.setCharacterEncoding("utf-8");HttpSessionsession=req.getSession();res.setContentType("text/html;charset=utf-8");
Stringaction=req.getParameter("action");Stringresult="";SqlSession
sqlSession=MyBatisUtil.openSession();
if(action.equals("preAdd")){//显示所有角色信息RightColumnMapperrightColumnMapper=sqlSession.getMapper(RightColumnMapper.class);List<RightColumn>rightColumnList=rightColumnMapper.searcherAllRightColumn();if(rightColumnList==null){result="error.jsp";}else{
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 医疗器械不良事件培训试题及答案
- 市场推广费用预算编制与核销流程方案
- (新版)全口义齿修复工艺技术题库(含答案)
- 2026年垃圾分类知识竞赛考试试题含答案
- 四川省达州市经开区2025-2026学年九年级上学期语文期中试卷(含答案)
- 护理学专业内科护理学专项训练习题集及答案
- 玉林市兴业县2025届四年级数学下学期期末综合测试试题含答案解析
- 独山县2025年数学四年级下学期期末质量检测模拟试题含答案解析
- 牡丹江市西安区2025-2026学年四年级数学下学期期中达标检测试题(含解析)
- 灵宝市2025-2026学年三年级数学下学期期末教学质量检测模拟试题(含答案解析)
- (2026年)脐灸培训课件
- 2026安徽新媒体集团社会招聘3人备考题库及答案详解(夺冠系列)
- 2026年中烟工业机电岗笔试真题及模拟试题附完整答案
- 父母财产分配协议书
- 《零碳办公建筑评价标准》
- 科普讲解大赛芯片
- 能源体系内审培训课件
- 雨课堂学堂在线学堂云《运动损伤预防与康复(北体)》单元测试考核答案
- 2025特变电工校园招聘200人笔试历年参考题库附带答案详解
- 安格斯MAX市场计划
- 山西国企考试真题及答案
评论
0/150
提交评论