目录

1、properties属性

1.1property子元素

1.2使用properties文件

1.3使用程序传递方式传递参数

2、settings属性

3、typeAliases属性

4、插件

5、environments(运行环境)

5.1 transactionManager(事务管理器)

5.2 environment(数据源环境)

6、配置Mapper映射器


MyBatis配置文件并不复杂,它主要用来配置基本的上下文参数和运行环境。

包含了影响 MyBatis行为甚深的设置(settings)和属性(properties)信息。
MyBatis的配置文件文档的顶层结构如下:

<configuration>                  配置<properties/>                属性[主要设置二级缓存,目前应用较少,多使用redis缓存]♠<settings/>                  [全局配置参数]♠<typeAliases/>               [类型别名]♠<typeHandlers/>              [类型处理器]♠<objectFactory/>             [对象工厂]<plugins/>                   [插件]♠<environments>               [配置环境]♠<environment>            [环境变量]<transactionManager/>[事务管理器]<dataSource>         [数据源]</dataSource> </environment></environments><databaseIdProvider/>        [数据库厂商标识]<mappers/>                   [映射器]♠
</configuration>

在配置 mybatisConfig.xml 配置文件的时候,必须按照上面标签的顺序进行配置。如果颠倒了它们的顺序,那么在MyBatis启动阶段就会发生异常。

本节主要来了解Mybatis配置项的作用,其中propertis、settings、typeAliases、typeHandler、plugin、environments、mappers是常用的内容。


1、properties属性

properties属性可以给系统配置一些运行参数,可以放在XML文件或者properties文件中,而不是放在Java编码中,这样的好处在于方便参数修改,而不用重新编译代码。

一般而言,MyBatis提供了3种方式让我们使用properties:

  • properties子元素
  • properties文件
  • 程序代码传递

1.1property子元素

使用properties子元素将数据库连接的相关配置进行改写,如下:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration><!-- ================properties配置=================== --><!--♠♠方式1: 引用java属性的文件db.properties<properties resource="db.properties" /> --><!--♠方式2: 在<propties>标签下的子元素<propertie>定义数据库配置的name和value如果属性参数有成千上百个,该方式不是最优的,建议使用方式1,通过java属性文件导入方式。 --><properties><proper name="jdbc.driver" value="com.mysql.jdbc.Driver"></proper><proper name="jdbc.url" value="jdbc:mysql://localhost:3306/boot_security?characterEncoding=utf-8"></proper><proper name="jdbc.username" value="root"></proper><proper name="jdbc.password" value="root"></proper></properties><!--♠♠♠方式3:代码传递方式传递参数创建SqlSessionFactory时,将配置信息重置到properties属性中。 --></configuration>

这里我们看properties属性设置的方式2,这里使用了元素<properties>下的子元素<propertis>定义,用字符串jdbc.username定义数据库用户名,然后就可以在数据库定义中引入这个已经定义好的属性参数,如${jdbc.username},这样定义一次就可以到处引用了。

弊端:如果属性参数有几百个、几千个、这并不是最好的选择,这个时候可以使用properties文件

1.2使用properties文件

使用properties文件,其逻辑就是键值对应,我们可以配置多个键值放在一个properties文件中,也可以把多个键值放在多个properties文件中,以便日后维护和修改。

创建一个db.properties文件,放在classpath的路径下。

db.properties文件如下:

#配置数据源
#key-value形式
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/boot_security?characterEncoding=utf-8
jdbc.username=root
jdbc.password=root

在MyBatis中通过<properties>的属性resource来引入properties文件。如下properties属性设置的方式1所示:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration><!-- ================properties配置=================== --><!--♠♠方式1: 引用java属性的文件db.properties --><properties resource="db.properties" /><!--♠方式2: 在<propties>标签下的子元素<propertie>定义数据库配置的name和value如果属性参数有成千上百个,该方式不是最优的,建议使用方式1,通过java属性文件导入方式。<properties><proper name="jdbc.driver" value="com.mysql.jdbc.Driver"></proper><proper name="jdbc.url" value="jdbc:mysql://localhost:3306/boot_security?characterEncoding=utf-8"></proper><proper name="jdbc.username" value="root"></proper><proper name="jdbc.password" value="root"></proper></properties>    --><!--♠♠♠方式3:代码传递方式传递参数创建SqlSessionFactory时,将配置信息重置到properties属性中。 --></configuration>

也可以按照${jdbc.username}的方法引入properties文件的属性参数到MyBatis配置文件中。这个时候通过维护properties文件就可以维护我们的配置内容了。

1.3使用程序传递方式传递参数

真实的生产环境中,数据库的用户密码是对开发人员和其他人员保密的。运维人员为了保密,一般都需要把用户和密码经过加密成为密文后,配置到properties文件中。对于开发人员及其他人员而言,就不知道其真实的用户密码了,数据库也不可能使用已经加密的字符串去连接,此时往往需要通过解密才能得到真实的用户和密码了。现在假设系统己经为提供了这样的一个CodeUtils.decodes(str)进行解密,那么我们在创建SqlSessionFactory前,就需要把用户名和密码解密,然后把解密后的字符串重置到properties属性中,如下所示:

String resource = "mybatisConfig.xml";
InputStream inputStream = Resources.getResourceAsStream("jdbc.properties");Properties prop = new Properties();
prop.load(inputStream );
String username = prop.getProperty("jdbc.username");
String password = prop.getProperty("jdbc.password");
//解密用户和密码,并在属性中重置
prop.put("jdbc.username",CodeUtils.decode(username));
prop.put("jdbc.password",CodeUtils.decode(password));
inputStream = Resources.getResourceAsStream(resource);
//使用程序传递的方式覆盖原有的properties属性参数
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream,prop);

优先使用程序传递方式,其次使用properties文件的方式,最后是使用property子元素的方式。


2、settings属性

settings是MyBatis中最复杂的配置,大部分情况下使用默认值即可运行,不需要大量配置它,只需修改一些常用的规则即可,比如自动映射、驼峰命名、级联规则、是否启动缓存、执行器类型等。

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration><!-- ===========================================Setting设置================================================= --><settings>====>开启驼峰规则与下划线间的映射关系<setting name="mapUnderscoreToCamelCase" value="true"/>设置jdbc与数据库的关系类型 mysql不需要配置 Oracle需要<setting name="jdbcTypeForNull" value="NULL"/>设置懒加载 优化速度  当开启时,所有关联对象都会延迟加载。 特定关联关系中可通过设置fetchType属性来覆盖该项的开关状态。默认值false<setting name="lazyLoadingEnabled" value="true"/>设置懒积极加载为消极加载 优化速度 <setting name="aggressiveLazyLoading" value="false"/>====>该配置影响的所有映射器中配置的缓存的全局开关。默认值true<setting name="cacheEnabled" value="true"/>是否允许单一语句返回多结果集(需要兼容驱动)。 默认值true<setting name="multipleResultSetsEnabled" value="true"/>使用列标签代替列名。不同的驱动在这方面会有不同的表现, 具体可参考相关驱动文档或通过测试这两种不同的模式来观察所用驱动的结果。默认值true<setting name="useColumnLabel" value="true"/>====>允许 JDBC 支持自动生成主键,需要驱动兼容。 如果设置为 true 则这个设置强制使用自动生成主键,尽管一些驱动不能兼容但仍可正常工作(比如 Derby)。 默认值false <setting name="useGeneratedKeys" value="false"/>指定 MyBatis 应如何自动映射列到字段或属性。 NONE 表示取消自动映射;PARTIAL 只会自动映射没有定义嵌套结果集映射的结果集。 FULL 会自动映射任意复杂的结果集(无论是否嵌套)。 默认值PARTIAL<setting name="autoMappingBehavior" value="FULL"/><setting name="autoMappingUnknownColumnBehavior" value="WARNING"/>配置默认的执行器。SIMPLE 就是普通的执行器;REUSE 执行器会重用预处理语句(prepared statements); BATCH 执行器将重用语句并执行批量更新。默认SIMPLE <setting name="defaultExecutorType" value="SIMPLE"/>设置超时时间,它决定驱动等待数据库响应的秒数。<setting name="defaultStatementTimeout" value="25"/>====>允许在嵌套语句中使用分页(RowBounds)默认值False<setting name="safeRowBoundsEnabled" value="false"/>====>允许在嵌套语句中使用分页(ResultHandler)默认值False<setting name="safeResultHandlerEnabled" value="false"/>====>MyBatis 利用本地缓存机制(Local Cache)防止循环引用(circular references)和加速重复嵌套查询。默认值为 SESSION,这种情况下会缓存一个会话中执行的所有查询。若设置值为 STATEMENT,本地会话仅用在语句执行上,对相同 SqlSession 的不同调用将不会共享数据。 <setting name="localCacheScope" value="SESSION"/>指定哪个对象的方法触发一次延迟加载。 <setting name="lazyLoadTriggerMethods" value="equals,clone,hashCode,toString"/></settings>
</configuration>

3、typeAliases属性

当类的全限定名称很长,需要大量使用的时候,总写那么长的名称不方便。此时,MyBatis允许定义一个简写来代表这个类,这就是别名。

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration><!-- ========================================typeAliases别名设置============================================= --><!-- 定义实体类的别名:系统定义别名,或者自定义别名 --><!--方式1:定义单个POJO实体类的别名引入POJO实体类的类全路径和别名后,其对应的映射文件中resutlType返回结果的类型应当为alise定义的别名type:实体类的全路径名称alias:别名<typeAlias type="com.mybatis.model.SysUser" alias="user"/> --><typeAliases><!-- 按ID查询用户,使用单个POJO实体类别名方式定义,对需要起别名的类单独配置 --><typeAlias alias="sysUser" type="com.mybatis.pojo.SysUser"/><typeAlias alias="sysRole" type="com.mybatis.pojo.SysRole" /></typeAliases><!--方式2:使用“包扫描”的方式批量定义别名,定义后别名等于类名,不区分大小写,建议按照驼峰命名约束进行命名可以配合mybatis的注解@Alias("xxx")进行区分,进而避免别名重名导致的扫描失败的问题<typeAliases><package name="com.mybatis.pojo" /></typeAliases>-->
</configuration>

4、插件

插件是最为强大和灵活的组件,同时也是最复杂、最难使用的组件,而且它十分危险,因为插件将覆盖MyBatis底层对象的核心方法和属性,操作不当将产生严重后果,甚至是摧毁MyBatis框架。所以在研究插件之前,我们要弄清楚MyBatis底层的构成和运行原理,否则将难以安全高效地使用它,后面将独立出一篇内容进行深入探索。


5、environments(运行环境)

在MyBatis中,运行环境主要的作用是配置数据库信息,它可以配置多个数据库,一般而言只需要配置其中一个即可。它又分为两个可配置的元素:【1】事务管理器(transactionManager);【2】数据源(dataSource)

在实际情况中,会使用Spring对数据源和数据库的事务进行管理。

运行环境配置(包含事务管理器、数据源)如下:

<!-- =================数据库环境配置================= --><!-- 数据库环境--><environments default="development"><environment id="development"><!-- 使用JDBC事务管理器--><transactionManager type="JDBC" /><!-- <transactionManager type="MANAGED" /> --><!-- 数据库连接池--><!-- <dataSource type="UNPOOLED">采用非数据库池的管理方式 --><!-- <dataSource type="JNDI"> --><dataSource type="POOLED"><property name="driver" value="${jdbc.driver}" /><property name="url" value="${jdbc.url}" /><property name="username" value="${jdbc.username}" /><property name="password" value="${jdbc.password}" /></dataSource></environment></environments>

这里用到两个元素:transactionManager和environment

5.1 transactionManager(事务管理器)

在MyBatis中,transactionManager提供了两个实现类,它需要实现接口:Transaction

public insterface Transaction{//获取连接Connection getConnection() throw SQLException;//事务提交void commit() throw SQLException;//回滚事务void roolback() throw SQLException;//关闭事务void close() throw SQLException;//超时Integer getTimeout() throw SQLException;
}

Trannsaction接口主要的工作:提交、回滚、关闭数据库的事务。

MyBatis为Transaction提供了两个实现类:

【1】JdbcTransaction;

【2】ManageredTransaction

对应着两个工厂:JdbcTransactionFactoryManageredTransactionFactory,这个工厂需要实现TransactionFactory接口,通过他们会生成对应的Transaction对象。于是可以把事务管理器配置成以下两种方式:

<transactionManager type="JDBC"/>
<transactionManager type="MANAGED"/>

解释:

  • JDBC使用JdbcTransactionFactory生成JdbcTransaction对象实现。它以JDBC的方式对数据库的提交和回滚进行操作。
  • MMANAGED使用ManageredTransactionFactory生成ManageredTransaction对象实现。它的提交和回滚方法不用任何操作,而是把事务交给容器处理。默认情况下,它会关闭连接,因此需要将closeConnecton属性设置为false来组织它默认的关闭行为。

如果不想使用MyBatis的规则时,我们可以这样配置:

<transactionManager type="com.learn.ssm.chapter4.transaction.MyTransactionFactory" />

自定义一个事务工厂

public class MyTransactionFactory implements TransactionFactory{@Overridepublic Transaction newTransaction(Connection connection) {return new MyTransaction(connection);}@Overridepublic Transaction newTransaction(DataSource dataSource, TransactionIsolationLevel level, boolean autoCommit) {return new MyTransaction(dataSource,level,autoCommit);}@Overridepublic void setProperties(Properties arg0) {}
}

实现了工厂方法后,还需要一个事务实现类MyTransaction,用来实现Transaction接口:

public class MyTransaction extends JdbcTransaction implements Transaction{public MyTransaction(DataSource ds, TransactionIsolationLevel desiredLevel, boolean desiredAutoCommit) {super(ds, desiredLevel, desiredAutoCommit);}public MyTransaction(Connection connection) {super(connection);}@Overrideprotected void openConnection() throws SQLException {super.openConnection();}@Overrideprotected void resetAutoCommit() {super.resetAutoCommit();}@Overrideprotected void setDesiredAutoCommit(boolean arg0) {super.setDesiredAutoCommit(arg0);}@Overridepublic void close() throws SQLException {super.close();}@Overridepublic void commit() throws SQLException {super.commit();}@Overridepublic Connection getConnection() throws SQLException {return super.getConnection();}@Overridepublic void rollback() throws SQLException {super.rollback();}
}

这样就能够通过自定义事务规则。

5.2 environment(数据源环境)

environment的主要作用是配置数据库。

MyBatis中,数据库通过PooledDataSourceFactory、UnpooledDataSourceFactory和JndiDataSourceFactory三个工厂类来提供,前两者对应产生PooledDataSource、UnpooledDataSource类对象,而JndiDataSourceFactory则会根据则DI的信息拿到外部容器实现的数据库连接对象。

无论如何这三个工厂类,最后生成的产品都会是一个实现了DataSource接口的数据库连接对象。

由于存在三种数据源,可按照下面的形式配置它们:

<transactionManager type="UNPOOLED"/>
<transactionManager type="POOLED"/>
<transactionManager type="JNDI"/>

6、配置Mapper映射器

映射器定义命名空间(namespace),命名空间对应的是一个接口的全路径,而不是实现类。

因此,在配置Mapper映射器之前,我们先定义一个Mapper接口:

/*** 映射器接口*/
public interface SysRoleMapper {/*[1.1]新增一条角色------->自定义主键*/public int insertRole(SysRole sysRole);/*[1.2]新增一条角色------->自增主键*/public int insertRole2(SysRole sysRole);/*[2]删除一条角色*/public int deleteRole(Integer id);/*[3]修改一条角色*/public int updateRole(SysRole sysRole);/*[4]查询一条角色*/public SysRole getRole(Integer id);
}

有了Mapper接口后,还需要mapper接口对应的XML映射文件:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!-- Mapper动态代理方式实现mybatis配置,使用mybatis接口、对应的ml映射文件、model实体类namespace:命名空间[接口类的全路径], 作用:做sql隔离Mapper接口代理实现编写规则:1.映射文件中namespace名等于Mapper接口类的全路径;2.映射文件中SQL语句要等于Mapper接口类的方法名称3.映射文件中传入参数类型要等于Mapper接口类中方法的传入参数类型4.映射文件中返回结果集类型要等于Mapper接口类中方法的返回类型-->
<mapper namespace="com.mybatis.mapper.SysRoleMapper"><!-- ==========新增========== --><!--insert:新增/插入数据,==========自定义主键==========id:一般对应接口中定义的SQL方法名称;parameterType:指定传入的参数类型;子元素selectKey:支持自定义键值的生成规则。keyProperty:将返回的主键放入传入参数的Id中保存【指定采用哪个属性作为POJO的主键】;order:当前函数相对于SQL语句的执行顺序,在insert前执行的是BEFORE,在insert后执行的是AFTER由于mybatis的自增原理执行完SQL语句后才将主键生成,所以使用selectKey的执行顺序为AFTERresultType:返回的主键id的类型,也就是keyProperties中id属性的类型resultMap:用来描述从数据库结果集中来加载对象,它是最复杂、强大的元素【提供映射规则】如果要返回数据库自增主键:可以使用select LAST_INSERT_ID()执行 select LAST_INSERT_ID()数据库函数,返回自增的主键LAST_INSERT_ID():MySQL的函数,返回auto_increment自增列新记录id的值#{}占位符:如果传入的是pojo实体类型,占位符中的变量名称必须是pojo实体类中对应的属性.属性.属性...--><insert id="insertRole" parameterType="sysRole"><selectKey keyProperty="id" order="AFTER" resultType="java.lang.Integer">select LAST_INSERT_ID()</selectKey>insert into sys_role(name,description,createTime,updateTime)values (#{name}, #{description}, #{createTime},#{updateTime})</insert><!-- insert:新增/插入数据,==========自增主键========== useGeneratedKeys:获取数据库生成的主键,如果存在多个主键,就用逗号隔开--><insert id="insertRole2" parameterType="sysRole" useGeneratedKeys="true" keyProperty="id">insert into sys_role(name,description)values (#{name}, #{description})</insert><!-- ==========删除========== --><!-- 按ID删除,parameterType传入参数类型=========>POJO类中角色关联表对应的id字段参数的类型 --><delete id="deleteRole" parameterType="java.lang.Integer">delete from sys_role where id = #{id}</delete><!-- ==========修改========== --><update id="updateRole" parameterType="sysRole">update sys_role set name = #{name},description = #{description}where id = #{id}</update><!-- ==========查询========== --><!--<select>标签id:sql语句唯一标识,一般为Mapper接口类中的查询方法名parameterType:指定SQL方法传入的参数类型(或者指定传入的参数类型)resultType:指定返回结果集的类型,【常设置为实体类的全路径,返回指向的model类型】#{}占位符:起到占位作用,如果传入的是基本类型(string,long,double,int,boolean,float等),那么#{}中的变量名称可以随意写。resultType="sysRole",全局配置文件中,使用单个定义别名,也可以使用model实体类的全路径,与核心配置文件中<typeAlias>标签中的alias命名一致flushCache:调用SQL后,是否要求mybatis清空之前查询本地缓存和二级缓存,默认falseuseCache:启动二级缓存开关,是否将本次结果缓存,默认false--><!-- ==========sql元素========== --><!-- 只需编写一次,就可以在其他元素中引用它了   --><sql id="roleCols">id,name,description</sql><select id="getRole" parameterType="java.lang.Integer" resultType="sysRole" flushCache="true">select id,role_name as roleName from sys_role where id = #{id}<!-- ==========>>>>>使用sql元素<<<<<========== --><!-- select <include  refid="roleCols" /> from sys_role where id = #{id} --></select><!-- ==========list========== --><!--按名称模糊查询 ,返回结果是集合返回结果为集合时,可以调用selectList方法,这个方法返回的结果就是一个集合,所以映射文件中应该配置成集合泛型的类型${}拼接符:字符串原样拼接,如果传入的参数是基本类型(string,long,double,int,boolean,float等),那么${}中的变量名称必须是value注意:拼接符有sql注入的风险,所以慎重使用resultType="sysRole",全局配置文件中,使用包扫描的方式批量定义别名,不区分大小写,也可以使用model实体类的全路径--><select id="findRolesByMap" parameterType="map" resultType="sysRole">select id,name as name,description createTime as createTime,updateTime as updateTimewhere name like concat('%',#{name},'%')and description like concat('%',#{description},'%')</select><!-- ==========注解方式传递多个参数========== --><select id="findRolesByAnnotation" resultType="sysRole">select id,name as name,description from sys_rolewhere name like concat('%',#{name},'%')and description like concat('%',#{description},'%')</select><!-- ==========Java Bean方式传递多个参数========== --><select id="findRoleByBean" parameterType="com.mybatis.pojo.SysRole">select id,name,description from sys_rolewhere name like concat('%',#{name},'%')and description like concat('%',#{description},'%')</select><!-- ==========混合使用的方式传递多个参数========== --><select id="findRoleByMix" resultType="sysRole">select id,name as name,description from sys_rolewhere name like concat('%',#{name},'%')and description like concat('%',#{description},'%')limit #{page.start},#{page.limit}</select><!-- ==========混合使用的方式传递多个参数========== --><!-- ==========使用resultMap作为映射结果集========== --><!--resultMap:定义了一个roleMap,它的属性id表示它的标积,type表示使用哪个类作为其映射的类,可以是全名或者全限定名子元素id:表示resultMap的主键result:表示其属性property:表示model/POJO的属性名称column:表示SQL的列名。把POJO的属性和SQL的列名做对应select元素中,resultMap制定了采用哪个resultMap作为其映射规则--><!-- <resultMap id="roleMap" type="sysRole"><id property="id" column="id"/><result property="name" column="name"/><result property="description" column="description"/></resultMap><select id="getRole" parameterType="java.lang.Integer" resultMap="roleMap">select id,role_name as roleName from sys_role where id = #{id}</select> --><!-- ==========分页参数RowBounds========== --><select id="findRoleByRowBounds" resultSets="sysRole">select id,name as name,description as description from sys_rolewhere name like concat('%',#{name},'%')and description like concat('%', #{description},'%')</select></mapper>

有了Mapper接口和映射文件后,我们需要在mybatis的基础配置文件中引入Mapper映射器,引入Mapper映射器的方法很多,一般分为以下几种:

<!-- ==========================================mapper映射器配置=============================================== --><!-- Mapper映射器,加载核心映射配置文件 --><mappers><!--方式1:通过文件路径引入映射器原始映射文件配置方式,映射文件的全路径,需要一一的书写,较繁琐映射文件和Mapper接口可以不用放在一个目录下--><mapper resource="mappers/SysRoleMapper.xml"/><mapper resource="mappers/SysUserMapper.xml"/><!--方式2:通过类注册方式引入映射器mapper接口代理方式,使用class属性引入接口的全路径名称:使用规则:1. 接口的名称和映射文件名称除扩展名外要完全相同2. 接口和映射文件要放在同一个目录下<mapper class="com.mybatis.mapper.SysRoleMapper"/><mapper class="com.mybatis.mapper.SysUserMapper"/>--><!--方式3:通过包扫描的方式批量引入映射器使用规则:1. 接口的名称和映射文件名称除扩展名外要完全相同2. 接口和映射文件要放在同一个目录下<package name="com.mybatis.mapper"/>--><!--方式4:使用映射文件引入映射器<mapper url="file:///var/mappers/mappers/SysRoleMapper.xml"/><mapper url="file:///var/mappers/mappers/SysUserMapper.xml"/>--></mappers> 

MyBatis(五)------MyBatis配置相关推荐

  1. MyBatis(五)MyBatis整合Spring原理分析

    前面梳理了下MyBatis在单独使用时的工作流程和关键源码,现在看看MyBatis在和Spring整合的时候是怎么工作的 也先从使用开始 Spring整合MyBatis 1.引入依赖,除了MyBati ...

  2. spring,mybatis事务管理配置与@Transactional注解使用[转]

    spring,mybatis事务管理配置与@Transactional注解使用[转] spring,mybatis事务管理配置与@Transactional注解使用 概述 事务管理对于企业应用来说是至 ...

  3. 什么是Mybatis?Mybatis能干什么?Mybatis怎么配置?

    简介 什么是 MyBatis ? MyBatis 是一款优秀的持久层框架,它支持定制化 SQL.存储过程以及高级映射.MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集.My ...

  4. Java操作数据库方式五MyBatis使用入门

    ##概述 ##MyBatis是什么 MyBatis是一个持久层框架,作用是在java项目中操作数据库. ##MyBatis介绍 MyBatis 本是apache的一个开源项目iBatis, 2010年 ...

  5. spring,mybatis事务管理配置与@Transactional注解使用

    spring,mybatis事务管理配置与@Transactional注解使用 概述 事务管理对于企业应用来说是至关重要的,即使出现异常情况,它也可以保证数据的一致性. Spring Framewor ...

  6. MyBatis简介与配置MyBatis+Spring+MySql

    一.MyBatis简介与配置MyBatis+Spring+MySql 原文出自:http://limingnihao.iteye.com/blog/781671 MyBatis学习 之 一.MyBat ...

  7. MyBatis多数据源配置(读写分离)

    MyBatis多数据源配置(读写分离) 首先说明,本文的配置使用的最直接的方式,实际用起来可能会很麻烦. 实际应用中可能存在多种结合的情况,你可以理解本文的含义,不要死板的使用. 多数据源的可能情况 ...

  8. spring+mybatis+springmvc项目配置

    项目下web.xml <?xml version="1.0" encoding="UTF-8"?> <web-app version=&quo ...

  9. generator自动生成mybatis的xml配置

    generator自动生成mybatis的xml配置.model.map等信息: 1.下载mybatis-generator-core-1.3.2.jar包.        网址:http://cod ...

  10. mybatis plus generator配置

    mybatis plus generator配置 代码生成器AutoGenerator AutoGenerator autoGenerator = new AutoGenerator(); Globa ...

最新文章

  1. android 监听物理返回键,Android应用开发之react-native 监听Android物理返回键
  2. 《Drupal实战》——1.9 小结
  3. Leetcode 152. 乘积最大子序列 解题思路及C++实现
  4. Vagrant挂载目录失败mount: unknown filesystem type ‘vboxsf’
  5. iOS中js与objective-c的交互(转)
  6. MySQL高级篇(事务视图存储过程与函数)
  7. 年底促销海报还没准备好?电商美工看这里
  8. msvcp140.dll缺失
  9. UVA10852 Less Prime【筛选法】
  10. 基于GIS+BIM技术的高速公路征地拆迁管理系统应用
  11. 标准结构篇:7)塑料齿轮轮系设计总章
  12. X Chen笔记---百度云破解限速
  13. php 三色排序,三色旗排序问题 | 学步园
  14. uni-app 快速发送短信
  15. java 保存微信表情_Java微信公众号开发之用户表情存储解决方案
  16. 手把手教你用EZDML批量生成vue-element-admin前端页面代码
  17. 新装Win10全方面调优【彻底禁用Win10更新/防火墙/Defender/通知,任务栏优化等】
  18. 上云 企业 过程_企业上云的步骤
  19. woff字体图元结构剖析,自定义字体的制作与匹配和识别
  20. 西门子博途v16系统要求_博途V16安装TIA Portal v16

热门文章

  1. ActiveMQ(四)——异步发消息、异步消费消息与prefetchSize之间的关系
  2. 【Spring-AOP】自动代理类AnnotationAwareAspectJAutoProxyCreator
  3. 设计模式 (十七) 迭代器模式
  4. RabbitMQ消息确认机制之Confirm模式总结
  5. JVM初识之常用参数配置
  6. Java中实现十进制数转换为二进制的三种方法
  7. leetcode 两数之和 java版本
  8. Flink中task之间的数据交换机制
  9. Intel 处理器 ME 管理引擎是无法移除的安全隐患
  10. SpringMvc date数据传递处理