mybaits

mybaits 批量插入,及其测试。

烈酒焚心 提交于 2019-12-04 04:38:31
1.引入jar <dependency> <groupId>org.springframework</groupId> <artifactId>spring-test</artifactId> <version>4.3.25.RELEASE</version> </dependency> 2.因为是在spring和springmvc,maven下作测试,所以测试类代码必须加入以下注解( 重点 )若不加入,junit提示空指针异常。 @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations = { "classpath:applicationContext.xml" }) public class FirstRun { @Autowired private SqlSessionTemplate sqlSessionTemplate; } 3.在spring的配置文件中,配置一个SqlSessionTemplate的类。并且把执行类型,设置为batch <bean id="sqlSessionTemplate" class="org.mybatis.spring.SqlSessionTemplate" > <constructor-arg name="sqlSessionFactory" ref=

Mybaits 源码解析 (九)----- 全网最详细,没有之一:一级缓存和二级缓存源码分析

无人久伴 提交于 2019-12-04 01:20:37
像Mybatis、Hibernate这样的ORM框架,封装了JDBC的大部分操作,极大的简化了我们对 数据库 的操作。 在实际项目中,我们发现在一个事务中查询同样的语句两次的时候,第二次没有进行数据库查询,直接返回了结果,实际这种情况我们就可以称为缓存。 Mybatis的缓存级别 一级缓存 MyBatis的一级查询缓存(也叫作本地缓存)是基于org.apache.ibatis.cache.impl.PerpetualCache 类的 HashMap本地缓存,其作用域是SqlSession,myBatis 默认一级查询缓存是开启状态,且不能关闭。 在同一个SqlSession中两次执行相同的 sql查询语句,第一次执行完毕后,会将查询结果写入到缓存中,第二次会从缓存中直接获取数据,而不再到数据库中进行查询,这样就减少了数据库的访问,从而提高查询效率。 基于PerpetualCache 的 HashMap本地缓存,其存储作用域为 Session,PerpetualCache 对象是在SqlSession中的Executor的localcache属性当中存放,当 Session flush 或 close 之后,该Session中的所有 Cache 就将清空。 二级缓存 二级缓存与一级缓存其机制相同,默认也是采用 PerpetualCache,HashMap存储,不同在于其存储作用域为

Mybaits 源码解析 (九)----- 全网最详细,没有之一:一级缓存和二级缓存源码分析

北城以北 提交于 2019-12-04 00:16:27
像Mybatis、Hibernate这样的ORM框架,封装了JDBC的大部分操作,极大的简化了我们对数据库的操作。 在实际项目中,我们发现在一个事务中查询同样的语句两次的时候,第二次没有进行数据库查询,直接返回了结果,实际这种情况我们就可以称为缓存。 Mybatis的缓存级别 一级缓存 MyBatis的一级查询缓存(也叫作本地缓存)是基于org.apache.ibatis.cache.impl.PerpetualCache 类的 HashMap本地缓存,其作用域是SqlSession,myBatis 默认一级查询缓存是开启状态,且不能关闭。 在同一个SqlSession中两次执行相同的 sql查询语句,第一次执行完毕后,会将查询结果写入到缓存中,第二次会从缓存中直接获取数据,而不再到数据库中进行查询,这样就减少了数据库的访问,从而提高查询效率。 基于PerpetualCache 的 HashMap本地缓存,其存储作用域为 Session,PerpetualCache 对象是在SqlSession中的Executor的localcache属性当中存放,当 Session flush 或 close 之后,该Session中的所有 Cache 就将清空。 二级缓存 二级缓存与一级缓存其机制相同,默认也是采用 PerpetualCache,HashMap存储,不同在于其存储作用域为

Mybaits 源码解析 (七)----- Select 语句的执行过程分析(下篇)(Mapper方法是如何调用到XML中的SQL的?)全网最详细,没有之一

99封情书 提交于 2019-12-03 17:08:26
我们上篇文章讲到了查询方法里面的doQuery方法,这里面就是调用JDBC的API了,其中的逻辑比较复杂,我们这边文章来讲,先看看我们上篇文章分析的地方 SimpleExecutor 1 public <E> List<E> doQuery(MappedStatement ms, Object parameter, RowBounds rowBounds, ResultHandler resultHandler, BoundSql boundSql) throws SQLException { 2 Statement stmt = null; 3 try { 4 Configuration configuration = ms.getConfiguration(); 5 // 创建 StatementHandler 6 StatementHandler handler = configuration.newStatementHandler(wrapper, ms, parameter, rowBounds, resultHandler, boundSql); 7 // 创建 Statement 8 stmt = prepareStatement(handler, ms.getStatementLog()); 9 // 执行查询操作 10 return handler.<E

Mybaits 源码解析 (四)----- SqlSession的创建过程(看懂框架源码再也不用死记硬背面试题)

廉价感情. 提交于 2019-12-02 22:57:04
SqlSession是mybatis的核心接口之一,是myabtis接口层的主要组成部分,对外提供了mybatis常用的api。myabtis提供了两个SqlSesion接口的实现,常用的实现类是DefaultSqlSession。它相当于一个 数据库 连接对象,在一个SqlSession中可以执行多条SQL语句。 创建SqlSession 前面的两篇文章我们已经得到了 SqlSessionFactory ,那么 SqlSession 将由 SqlSessionFactory 进行创建。 SqlSession sqlSession=sqlSessionFactory.openSession(); 我们就来 看看 这个SqlSessionFactory的 openSession方法是如何创建SqlSession对象的。根据上面的分析,这里的SqlSessionFactory类型对象其实是一个DefaultSqlSessionFactory对象,因此,需要到DefaultSqlSessionFactory类中去看openSession方法。 @Override public SqlSession openSession() { return openSessionFromDataSource(configuration.getDefaultExecutorType(), null,

mybaits注解形式批量插入数据

本小妞迷上赌 提交于 2019-12-02 20:41:04
mybaits xml 文件配置形式很容易写出来,官方也给出了例子, 例如: http://mybatis.github.io/mybatis-3/zh/dynamic-sql.html 代码 foreach动态sql就可以实现批量插入数据. mybaits注解形式批量插入数据,就需要自己拼接成sql语句. @InsertProvider(type = UserMapperProvider.class, method = "inserAll") int insertAll(List<User> list); public static class UserMapperProvider { public String inserAll(Map<String, List<User>> map) { List<User> list = map.get("list"); StringBuilder stringBuilder = new StringBuilder(256); stringBuilder.append("insert into \"spring4_2015_user\" (\"loginName\", \"name\", \"password\", \"salt\",\"email\",\"status\",\"teamId\") values ");

mybaits中返回类型为boolean类型

给你一囗甜甜゛ 提交于 2019-12-01 22:36:30
在Mybatis中,有时候需要返回布尔值 ,来确定某个记录行是否存在。 例如: <select id="isExistCode" parameterType="string" resultType="boolean"> <![CDATA[ select count(id) from table where code=#{code} ]]> </select> 说明: Mybatis是根据查询到的记录数进行转换的(1=true,0=false) 需要注意的地方:如果查询到多条记录(大于1),返回的却是false, 这时就与我们的期望的刚好相反。这里,可以换其它方法,可以通过返回记录数,进行判断,也可以保证记录在数据库是唯一的。 来源: CSDN 作者: yinbucheng 链接: https://blog.csdn.net/yinbucheng/article/details/72782187

Mybaits课堂

我是研究僧i 提交于 2019-12-01 22:24:18
1 public interface UserMapper { public List<User> getUserListByNullParam(); public List<User> getUesrListByUserName(String userName); public List<User> getUserList(User user); public List<User> getUserListByMap(Map<String,String> userMap); public List<User> getUserList(); public int add(User user); public int modify(User user); } <?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.kgc.dao.UserMapper"> <select id="count" resultType="int"> select count(1) from smbms_user <

Mybaits课堂练习

限于喜欢 提交于 2019-12-01 22:18:36
<?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="cn.kgc.dao.UserMapper"> <select id="count" resultType="int"> select count(1) from smbms_user </select> <select id="userlist" resultType="User"> select * from smbms_user </select> <select id="getUserListByNullParam" resultType="User"> select * from smbms_user </select> <!-- 查询供应商记录数--> <select id="result" resultType="int"> select count(1) as count from smbms_provider; </select> <!-- 查询供应商列表 接口--> <select id="getProviderList"