- 浏览: 139602 次
文章分类
最新评论
-
wangyudong:
很有帮助的代码实例,测试Spring Boot REST AP ...
1、springboot入门案例helloworld与集成hibernate -
wangyudong:
学习了,的确是一个非常好的Spring boot实例,很快就写 ...
1、springboot入门案例helloworld与集成hibernate
二级缓存及高级映射
sqlMapConfig.xml
<?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 resource="dbSources.properties"></properties> <!-- 通过resultMap实现延迟加载 --> <settings> <!-- 打开延迟加载的开关 ,默认是false--> <setting name="lazyLoadingEnabled" value="true"/> <!-- 将积极加载改为消极加载即按需要加载,默认为true --> <setting name="aggressiveLazyLoading" value="false"/> <!-- 开启二级缓存 默认值为true--> <setting name="cacheEnabled" value="true" /> </settings> <typeAliases> <typeAlias type="com.chen.pojo.OrderCustom" alias="_OrderCustom"></typeAlias> <typeAlias type="com.chen.pojo.Orders" alias="_Order"></typeAlias> <typeAlias type="com.chen.pojo.Orderdetail" alias="_OrderDetail"></typeAlias> <typeAlias type="com.chen.pojo.Goods" alias="_Goods"></typeAlias> <typeAlias type="com.chen.pojo.User" alias="_User"></typeAlias> </typeAliases> <environments default="development"> <environment id="development"> <transactionManager type="JDBC" /> <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> <mappers> <package name="com.chen.mapper"/> </mappers> </configuration>
二级缓存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 namespace="com.chen.mapper.UserMapper"> <!-- 开启本mapper的二级缓存 type:指定cache接口的实现类的类型,默认使用PerpetualCache 要和ehcache整合,需要配置type为ehcache的实现类 --> <cache type="org.mybatis.caches.ehcache.EhcacheCache"/> <!-- useCache设置是否禁用二级缓存 --> <select id="findUserById" parameterType="int" resultType="_User" > select * from t_user where id=#{id} </select> <!-- flushCache设置是否执行刷新缓存 flushCache="false"--> <update id="updateUserById" parameterType="_User" > update t_user set username=#{username},birthday=#{birthday},sex=#{sex} where id=#{id} </update> </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 namespace="com.chen.mapper.OrderMapperCustom"> <select id="findOrderUser" resultType="_OrderCustom"> select o.user_id userid,o.number number,o.create_time createtime,o.note note,u.username,u.birthday,u.sex from t_order o,t_user u where o.user_id = u.id </select> <select id="findOrderUser2" resultMap="OrderResultMap"> select o.*,u.id u_id,u.username,u.birthday,u.sex from t_order o,t_user u where o.user_id = u.id </select> <resultMap type="_Order" id="OrderResultMap"> <id property="id" column="id"/> <result property="userId" column="user_id"/> <result property="number" column="number"/> <result property="createtime" column="create_time"/> <result property="note" column="note"/> <association property="user" javaType="_User"> <id property="id" column="u_id"/> <result property="username" column="username"/> <result property="birthday" column="birthday"/> <result property="sex" column="sex"/> </association> </resultMap> <select id="findOrderDetail" resultMap="DetailResultMap"> select o.*,u.id u_id,u.username,u.birthday,u.sex,d.id d_id,d.goods_id,d.order_id,d.goods_count from t_order o,t_user u,t_ordertail d where o.user_id = u.id and d.order_id=o.id </select> <resultMap type="_Order" id="DetailResultMap"> <id property="id" column="id"/> <result property="userId" column="user_id"/> <result property="number" column="number"/> <result property="createtime" column="create_time"/> <result property="note" column="note"/> <association property="user" javaType="_User"> <id property="id" column="u_id"/> <result property="username" column="username"/> <result property="birthday" column="birthday"/> <result property="sex" column="sex"/> </association> <collection property="orderdetails" ofType="_OrderDetail"> <id property="id" column="d_id"/> <result property="goodsId" column="goods_id"/> <result property="orderId" column="order_id"/> <result property="goodsCount" column="goods_count"/> </collection> </resultMap> <select id="findOrderGoods" resultMap="GoodsResultMap"> select o.*,u.id u_id,u.username,u.birthday,u.sex,d.id d_id,d.goods_id,d.order_id,d.goods_count, g.id g_id,g.name ,g.detail,g.createtime,g.price from t_order o,t_user u,t_ordertail d,t_goods g where o.user_id = u.id and d.order_id=o.id and d.goods_id = g.id </select> <resultMap type="_Order" id="GoodsResultMap"> <id property="id" column="id"/> <result property="userId" column="user_id"/> <result property="number" column="number"/> <result property="createtime" column="create_time"/> <result property="note" column="note"/> <association property="user" javaType="_User"> <id property="id" column="u_id"/> <result property="username" column="username"/> <result property="birthday" column="birthday"/> <result property="sex" column="sex"/> </association> <collection property="orderdetails" ofType="_OrderDetail"> <id property="id" column="d_id"/> <result property="goodsId" column="goods_id"/> <result property="orderId" column="order_id"/> <result property="goodsCount" column="goods_count"/> <association property="goods" javaType="_Goods"> <id property="id" column="g_id"/> <result property="name" column="name"/> <result property="detail" column="detail"/> <result property="createtime" column="createtime"/> <result property="price" column="price"/> </association> </collection> </resultMap> <select id="findOrderUserLazy" resultMap="OrderLazyResultMap"> select * from t_order </select> <resultMap type="_Order" id="OrderLazyResultMap"> <id property="id" column="id"/> <result property="userId" column="user_id"/> <result property="number" column="number"/> <result property="createtime" column="create_time"/> <result property="note" column="note"/> <association property="user" javaType="_User" column="user_id" select="com.chen.mapper.UserMapper.findUserById"> </association> </resultMap> </mapper>
二级应用场景
对于访问多的查询请求且用户对查询结果实时性要求不高,此时可采用mybatis二级缓存技术降低数据库访问量,提高访问速度,业务场景比如:耗时较高的统计分析sql、电话账单查询sql等。
实现方法如下:通过设置刷新间隔时间,由mybatis每隔一段时间自动清空缓存,根据数据变化频率设置缓存刷新间隔flushInterval,比如设置为30分钟、60分钟、24小时等,根据需求而定。
二级缓存局限性
mybatis二级缓存对细粒度的数据级别的缓存实现不好,比如如下需求:对商品信息进行缓存,由于商品信息查询访问量大,但是要求用户每次都能查询最新的商品信息,此时如果使用mybatis的二级缓存就无法实现当一个商品变化时只刷新该商品的缓存信息而不刷新其它商品的信息,因为mybaits的二级缓存区域以mapper为单位划分,当一个商品信息变化会将所有商品信息的缓存数据全部清空。解决此类问题需要在业务层根据需求对数据有针对性缓存。
整合spring
applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd "> <!-- 加载配置文件 --> <context:property-placeholder location="classpath:dbSources.properties"/> <!-- 配置数据源 --> <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"> <property name="driverClassName" value="${jdbc.driver}" /> <property name="url" value="${jdbc.url}"></property> <property name="username" value="${jdbc.username}"></property> <property name="password" value="${jdbc.password}"></property> </bean> <!-- 配置sessionFactory --> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <!-- 加载mybatis的配置文件 --> <property name="configLocation" value="mybatis/sqlMapConfig.xml" /> <property name="dataSource" ref="dataSource"></property> </bean> <!-- 第一种方式,通过dao实现类方式 --> <bean id="userDao" class="com.chen.dao.UserDaoImpl"> <property name="sqlSessionFactory" ref="sqlSessionFactory"></property> </bean> <!-- 第二种方式,通过mapper代理 (单个mapper)--> <!-- <bean id="userMapper" class="org.mybatis.spring.mapper.MapperFactoryBean"> <property name="mapperInterface" value="com.chen.mapper.UserMapper"></property> <property name="sqlSessionFactory" ref="sqlSessionFactory"/> </bean> --> <!-- 第二种方式,通过mapper代理,(批量) --> <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <property name="basePackage" value="com.chen.mapper" /> <!-- 必须用 sqlSessionFactoryBeanName,否则dbSources.properties无法加载,会先执行当前注入--> <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"></property> </bean> </beans>
反向工程
配置文件generatorConfig.xml
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE generatorConfiguration PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN" "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd"> <generatorConfiguration> <context id="testTables" targetRuntime="MyBatis3"> <commentGenerator> <!-- 是否去除自动生成的注释 true:是 : false:否 --> <property name="suppressAllComments" value="true" /> </commentGenerator> <!--数据库连接的信息:驱动类、连接地址、用户名、密码 --> <jdbcConnection driverClass="com.mysql.jdbc.Driver" connectionURL="jdbc:mysql://localhost:3306/test" userId="root" password="root"> </jdbcConnection> <!-- <jdbcConnection driverClass="oracle.jdbc.OracleDriver" connectionURL="jdbc:oracle:thin:@127.0.0.1:1521:yycg" userId="yycg" password="yycg"> </jdbcConnection> --> <!-- 默认false,把JDBC DECIMAL 和 NUMERIC 类型解析为 Integer,为 true时把JDBC DECIMAL 和 NUMERIC 类型解析为java.math.BigDecimal --> <javaTypeResolver> <property name="forceBigDecimals" value="false" /> </javaTypeResolver> <!-- targetProject:生成PO类的位置 --> <javaModelGenerator targetPackage="com.chen.pojo" targetProject=".\src"> <!-- enableSubPackages:是否让schema作为包的后缀 --> <property name="enableSubPackages" value="false" /> <!-- 从数据库返回的值被清理前后的空格 --> <property name="trimStrings" value="true" /> </javaModelGenerator> <!-- targetProject:mapper映射文件生成的位置 --> <sqlMapGenerator targetPackage="com.chen.mapper" targetProject=".\src"> <!-- enableSubPackages:是否让schema作为包的后缀 --> <property name="enableSubPackages" value="false" /> </sqlMapGenerator> <!-- targetPackage:mapper接口生成的位置 --> <javaClientGenerator type="XMLMAPPER" targetPackage="com.chen.mapper" targetProject=".\src"> <!-- enableSubPackages:是否让schema作为包的后缀 --> <property name="enableSubPackages" value="false" /> </javaClientGenerator> <!-- 指定数据库表 --> <table tableName="t_user" domainObjectName="User"></table> <table tableName="t_order" domainObjectName="Order"></table> <table tableName="t_orderdetail" domainObjectName="OrderDetail"></table> <table tableName="t_goods" domainObjectName="Goods"></table> <!-- 有些表的字段需要指定java类型 <table schema="" tableName=""> <columnOverride column="" javaType="" /> </table> --> </context> </generatorConfiguration>
生成代码 GeneratorSqlmap.java
package com.chen.demo; import java.io.InputStream; import java.util.ArrayList; import java.util.List; import org.mybatis.generator.api.MyBatisGenerator; import org.mybatis.generator.config.Configuration; import org.mybatis.generator.config.xml.ConfigurationParser; import org.mybatis.generator.internal.DefaultShellCallback; public class GeneratorSqlmap { public void generator() throws Exception{ List<String> warnings = new ArrayList<String>(); boolean overwrite = true; //File configFile = new File("generatorConfig.xml"); InputStream is = GeneratorSqlmap.class.getClassLoader().getResourceAsStream("generatorConfig.xml"); ConfigurationParser cp = new ConfigurationParser(warnings); Configuration config = cp.parseConfiguration(is); DefaultShellCallback callback = new DefaultShellCallback(overwrite); MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config, callback, warnings); myBatisGenerator.generate(null); } public static void main(String[] args) throws Exception { try { GeneratorSqlmap generatorSqlmap = new GeneratorSqlmap(); generatorSqlmap.generator(); } catch (Exception e) { e.printStackTrace(); } } }
- mybatis_demo03.rar (22 KB)
- 下载次数: 3
- mybatis_spring_demo04.rar (16.7 KB)
- 下载次数: 3
- mybatis_generatorSqlmapCustom_demo05.rar (3.7 MB)
- 下载次数: 4
- mybatis第二天课堂笔记.rar (572 KB)
- 下载次数: 4
发表评论
-
spring data jpa简单案例
2016-03-29 10:16 742pom.xml <project xmlns=&qu ... -
mybatis入门示例传智燕青讲解一
2016-03-11 15:51 2097示例一:增删改查 sqlMap ... -
mybatis入门案例
2016-03-10 14:41 502sqlMapConfiger.xml <?xml v ... -
spring3+mybatis整合案例
2016-02-19 11:21 702pom.xml <project xmlns=&qu ... -
hibernate一对一,一对多,多对一,多对多注解实现案例
2016-02-18 11:01 845pom.xml <project xmlns=&qu ... -
springmvc+hibernate4搭建案例
2016-02-17 09:58 955pom.xml <project xmlns=&qu ... -
hibernate和mybatis比较
2016-01-07 15:13 1250Hibernate简介 Hibernate对数据库结构提供了较 ... -
mybaits简述及原理概述
2016-01-07 11:40 3050Mybatis是一个基于Java的持久层框架。 MyBati ... -
hibernate基本原理
2016-01-04 17:38 3018hibernate是一个基于ORM的持久化框架。它是对jdbc ... -
springmvc与struts2比较
2015-12-30 17:31 838springmvc与struts2比较 1、springmvc ... -
Struts2简述及工作原理
2015-12-30 11:14 10325Struts2是实现MVC(Model-View-Contro ... -
springmvc学习总结01---简述及原理模型
2015-12-28 17:38 14231、用户发起request请求至控制器(Controlle ... -
Spring框架学习总结01----Spring简述
2015-12-28 10:30 1953学习Spring之前,首先要 ... -
spring3.0.7中各个jar包的作用总结
2015-12-28 09:25 932org.springframework.context-3.0 ... -
springmvc非注解方式
2015-11-05 21:36 856springmvc 模型原理 springmvc. ...
相关推荐
本工程为 MyBatis-Plus 的官方示例,项目结构如下: mybatis-plus-sample-quickstart: 快速开始示例 mybatis-plus-sample-quickstart-springmvc: 快速开始示例(Spring MVC版本) mybatis-plus-sample-reduce-...
mybatis mybatis-spring-boot-starter-2.0.0.jar下载
MyBatis-Spring是MyBatis与Spring框架的整合组件,其主要目的是简化在Spring应用中集成MyBatis的过程,使两者能够无缝协作。mybatis-spring-1.3.0.jar是这个中间件的特定版本,包含了实现这种集成所需的所有类和资源...
4. 缓存机制:MyBatis支持本地缓存和二级缓存,可以提高数据访问速度,减少数据库的负担。 5.事务管理:MyBatis支持手动和自动的事务管理,可以灵活控制事务的边界。 而"mybatis-spring-1.2.1"是MyBatis与Spring...
mybatis-spring 整合jar包,Spring和MyBatis环境整合mybatis-spring-1.1.1
MyBatis-Spring 是一个将 MyBatis ORM 框架与 Spring 框架集成的库,使得在 Spring 应用中使用 MyBatis 变得...mybatis-spring-1.3.3.jar 的下载和使用,可以帮助开发者快速构建基于 MyBatis 和 Spring 的企业级应用。
总之,这个压缩包提供了 MyBatis 3.4.1 和 MyBatis-Spring 1.3.0 的完整环境,结合 MySQL 5.7 数据库,是学习和实践 MyBatis-Spring 整合的一个理想起点。通过深入阅读文档、配置示例和运行示例,开发者能够快速掌握...
7. **MyBatis的缓存机制**:分析MyBatis的一级缓存(SqlSession级别)和二级缓存(Mapper级别),以及如何配置和管理缓存。 8. **MyBatis的事务管理**:学习如何在MyBatis中控制事务,包括手动提交和自动提交,以及...
3. MyBatis-Spring整合库:mybatis-spring。 4. 数据库驱动:如mysql-connector-java(对于MySQL)、ojdbc(对于Oracle)等。 5. 其他依赖库:如log4j或slf4j用于日志记录,asm、cglib等用于AOP代理。 整合过程大致...
MyBatis是一个优秀的Java持久层框架,它支持...例如,MyBatis Generator可以快速生成基础代码,MyBatis提供灵活的SQL映射,而MyBatis-Spring则帮助整合Spring的依赖注入和事务管理,使得整个系统更加健壮且易于测试。
Mybatis-Spring是一个连接Mybatis和Spring框架的库,它使得在Spring应用中使用Mybatis变得更加方便和无缝。这个压缩包“mybatis_spring.rar”包含了一个Mybatis与Spring整合的示例源码,这对于理解这两者之间的集成...
MyBatis提供了强大的SQL映射功能,而mybatis-spring库则使得在Spring应用中整合MyBatis变得简单。这两个库的结合使用,可以让开发者在保持代码简洁的同时,充分利用两者的优点,提高开发效率并降低维护成本。
spring mybatis shiro 共6天 8部分 第5部分 传智 燕青主讲 非常好
这些jar包包括但不限于:spring-context、spring-webmvc、mybatis、mybatis-spring等。 2. **配置Spring**:创建`applicationContext.xml`配置文件,定义Bean的实例和依赖关系。例如,定义DataSource、...
这里提到的两个jar包——mybatis-3.2.7.jar和mybatis-spring-1.2.2.jar,是实现这种整合的关键组件。 1. **MyBatis**:MyBatis是一个优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射。MyBatis避免了几乎...
3. **mybatis-3.2.7.jar**:Mybatis是轻量级的ORM框架,它简化了SQL操作,允许开发者直接编写SQL语句并将其映射到Java对象上。在这个整合包中,Mybatis作为数据访问层的工具,与Spring的IoC容器配合,实现了DAO...
mybatis与spring整合时所依赖的jar包,包括: 1.Mybatis所需的jar包括: ... mybatis-spring-1.3.1.jar mysql-connector-java-5.1.45-bin.jar commons-dbcp2-2.2.0.jar commons-pool2-2.5.0.jar
MyBatis-Spring 会帮助你将 MyBatis 代码无缝地整合到 Spring 中。 使用这个类库中的类, Spring 将会加载必要的 MyBatis 工厂类和 session 类。 这个类库也提供一个简单的方式来注入 MyBatis 数据映射器和 ...
《mybatis-spring整合详解与实战指南》 在Java开发领域,MyBatis和Spring是两个非常重要的框架,它们各自在持久层和依赖注入方面表现出色。MyBatis-Spring作为一个桥梁,将这两个优秀框架无缝集成,使得开发更加...
spring mybatis shiro 共6天 8部分 第6部分 传智 燕青主讲 非常好