MyBatis

ssm搭建

狂风中的少年 提交于 2020-04-06 11:13:23
SSM框架简介 SSM框架,是 spring + Spring MVC + MyBatis的缩写,这个是继SSH之后,目前比较主流的 Java EE 企业级框架,适用于搭建各种大型的企业级应用系统。 Spring简介 Spring是一个开源框架,Spring是于2003年兴起的一个轻量级的Java开发框架,由Rod Johnson在其著作Expert One-On-One J2EE Development and Design中阐述的部分理念和原型衍生而来。它是为了解决企业应用开发的复杂性而创建的。Spring使用基本的JavaBean来完成以前只可能由EJB完成的事情。然而,Spring的用途不仅限于服务器端的开发。从简单性、可测试性和松耦合的角度而言,任何Java应用都可以从Spring中受益。 简单来说,Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架。 控制反转是什么呢? 打个比方,你晚上想约个妹子去看电影,假设这个妹子是一个类(温柔、善良、小鸟依人),那么你需要实例化她,在JAVA中,通常的做法就是new一个类,让她变成一个实体的对象。然后,你跟她约了时间、地点,说要请客吃饭,然后用尽你浑身解数,妹子终于答应要和你去看电影了。看完电影之后,你还要送妹子回家,确保安全。当然,这一个步骤一般是由JVM的垃圾回收机制来处理,如果你没有主动及时送妹子回家

Spring Boot 自动装配流程

為{幸葍}努か 提交于 2020-04-06 11:06:25
Spring Boot 自动装配流程 本文以 mybatis-spring-boot-starter 为例简单分析 Spring Boot 的自动装配流程。 Spring Boot 发现自动配置类 这里说的自动配置类指的是在 META-INF/spring.factories 文件中声明的 XXXAutoConfiguration 类。 首先,我们从 @SpringBootApplication 注解的定义中,我们可以发现有一个叫做 @EnableAutoConfiguration 的注解,这也是 SpringBoot 实现自动装配最关键的注解。 //@EnableAutoConfiguration 注解的定义 @Target({ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) @Documented @Inherited @AutoConfigurationPackage @Import({AutoConfigurationImportSelector.class}) public @interface EnableAutoConfiguration { String ENABLED_OVERRIDE_PROPERTY = "spring.boot.enableautoconfiguration" ; Class<?>[

spring boot jap+mybatis druid 多数据源配置

邮差的信 提交于 2020-04-06 06:38:20
spring boot jap+mybatis druid 多数据源配置 , 其实并不难的, 关键不能乱来,否则 配置 好了之后,可能 druid 数据源 的连接也可能爆某些莫名诡异的错误,比如连接 超时啊,连接不可用啊等等。 多数据源配置不好的话,很容易 出问题和BUG。 会把人搞疯了。 The last packet successfully received from the server was 1,843,135 milliseconds ago. The last packet sent successfully to the server was 18,904 milliseconds ago. 2020-03-31 14:04:50 [http-nio-9180-exec-2] ERROR c.n.m.handler.GlobalExceptionHandler - 请求:http://localhost:9180/auth/report/employee/performance?ifContainSub=%20true&brandId=%200&orgId=%201&page=%201&pageSize=%2010&c_token=ab2ebb088e874167ba1f3e3cdc2392f5&c_user_id=28&c_session

MyBatis-Spring(二):整合Mybatis与Spring方式二:SqlSessionDaoSupport

谁都会走 提交于 2020-04-06 03:59:22
本文上接《MyBatis-Spring:整合Mybatis与Spring方式一:SqlSessionTemplate》, SqlSessionDaoSupport是一个抽象的支持类,用来为你提供SqlSession。调用getSqlSession()方法你会得到一个SqlSessionTemplate,之后可以用于执行 SQL 方法,就像下面这样: public class UserMapperImpl extends SqlSessionDaoSupport implements UserMapper { public List<User> selectUser() { return getSqlSession().getMapper(UserMapper.class).selectUser(); } } SqlSessionDaoSupport 需要通过属性设置一个 sqlSessionFactory 或 SqlSessionTemplate。如果两个属性都被设置了,那么 SqlSessionFactory 将被忽略。 假设类 UserMapperImpl 是 SqlSessionDaoSupport 的子类,可以编写如下的 Spring 配置来执行设置: <bean id="userMapper" class="com.spring.mapper.UserMapperImpl

MyBatis-Spring(一):整合Mybatis与Spring方式一:SqlSessionTemplate

江枫思渺然 提交于 2020-04-06 03:53:28
MyBatis-Spring 会帮助你将 MyBatis 代码无缝地整合到 Spring 中。它将允许 MyBatis 参与到 Spring 的事务管理之中,创建映射器 mapper 和 SqlSession 并注入到 bean 中,以及将 Mybatis 的异常转换为 Spring 的 DataAccessException。 准备工作,实体类,mapper接口,mybatis配置文件 public class User { private int id; private String username; private String password; } public interface UserMapper { public List<User> selectUser(); } <mapper namespace="com.spring.mapper.UserMapper"> <select id="selectUser" resultType="user">select * from databasename.user;</select> </mapper> <!--mybatis-config.xml配置文件--> <configuration> <typeAliases> <package name="com.spring.pojo"/> </typeAliases>

mybatis 缓存(三)

妖精的绣舞 提交于 2020-04-05 21:47:24
mybatis的缓存分为一级缓存和二级缓存 一级缓存:基于SqlSession级别的缓存,也就是说,缓存了这个SqlSession执行所有的select.MapperStatement的结果集;同一个查询语句,只会请求一次;但是当前SqlSession执行增删改操作或者commit/rollback操作时,会清空SqlSession的一级缓存; 禁止一级缓存(同理也禁止了二级缓存) xml方式: <select id="ping" flushCache="true" resultType="string"> ... </select> 注解方式: @Options(flushCache = FlushCachePolicy.TRUE) 一级缓存导致的问题:每个SqlSession可能会对同一个mapperStatement缓存不同的数据,如: sqlSession1 查询了userId=1的数据,一级缓存生效 sqlSession2更新了userId=1的name值,然后在查询,一级缓存生效 这导致了sqlSession1和sqlSession2对于userId=1的缓存数据不一致,引入脏数据 一级缓存源代码: public abstract class BaseExecutor implements Executor { // 一级缓存 protected

mybatis 缓存(三)

醉酒当歌 提交于 2020-04-05 21:34:08
mybatis的缓存分为一级缓存和二级缓存 一级缓存:基于SqlSession级别的缓存,也就是说,缓存了这个SqlSession执行所有的select.MapperStatement的结果集;同一个查询语句,只会请求一次;但是当前SqlSession执行增删改操作或者commit/rollback操作时,会清空SqlSession的一级缓存; 禁止一级缓存(同理也禁止了二级缓存) xml方式: <select id="ping" flushCache="true" resultType="string"> ... </select> 注解方式: @Options(flushCache = FlushCachePolicy.TRUE) 一级缓存导致的问题:每个SqlSession可能会对同一个mapperStatement缓存不同的数据,如: sqlSession1 查询了userId=1的数据,一级缓存生效 sqlSession2更新了userId=1的name值,然后在查询,一级缓存生效 这导致了sqlSession1和sqlSession2对于userId=1的缓存数据不一致,引入脏数据 一级缓存源代码: public abstract class BaseExecutor implements Executor { // 一级缓存 protected

mybatis与spring整合(基于Annotation)

瘦欲@ 提交于 2020-04-05 20:02:35
   本文主要介绍了如何将mybatis和spring整合在一起使用,本人使用的是mybatis3.05 + spring3.1.0M2 ,使用dbcp作为数据库连接池。 1.编写数据访问接口(UserDao.java) package com.mybatis;import org.apache.ibatis.annotations.Select;public interface UserDao { @Select("select count(*) c from user;") public int countAll();} 2.编写服务层接口代码(UserService.java) package com.mybatis;public interface UserService { public int countAll();} 3.编写服务层实现代码(UserServiceImpl.java) package com.mybatis;public class UserServiceImpl implements UserService { private UserDao userDao; public UserDao getUserDao() { return userDao; } public void setUserDao(UserDao userDao) { this

IDEA初步使用MyBatis

时间秒杀一切 提交于 2020-04-05 17:55:00
学习链接: https://www.bilibili.com/video/BV1gs411j7kA?p=2 1.建立java文件 2.加载类路径。mybatis.jar 和 数据库驱动jar File->Project Structure->Modules->Dependencies->右侧加号->1.jar 3.在数据库中建立一张person表 id name age 在src中 建立一个person类 4.通过配置文件将类和表对应起来,在person所在的那个类里面 建立一个 personMapper.xml文件 1)personMapper.xml所在的路径 没有.xml 通过id值 返回值类型 然后里面需要传入的参数的类型 5.在src下面直接建立 conf.xml文件 这里需要用到新建xml文件: 参考链接 https://blog.csdn.net/nba_linshuhao/article/details/82735770?depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-1&utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-1 里面有那个url username

MyBatis Plus自定义SQL使用条件构造器QueryWrapper

淺唱寂寞╮ 提交于 2020-04-05 17:07:21
1.注解的方式: @Select("select * from user_collection uc left join post p on uc.post_id = p.id ${ew.customSqlSegment}") IPage<Post> selectPosts(Page page, @Param(Constants.WRAPPER) QueryWrapper wrapper); 使用注解方式只需添加 ${ew.customSqlSegment}和@Param(Constants.WRAPPER)即可! 2.xml方式 IPage<Post> selectPosts(Page page, @Param(Constants.WRAPPER) QueryWrapper wrapper); <!--xml--> <select id="selectPosts" resultType="com.example.entity.Post"> select * from user_collection uc left join post p on uc.post_id = p.id ${ew.customSqlSegment} </select> 动态查找: @Select("select ${ew.SqlSelect} from ${tableName} ${ew