MyBatis

spring boot 01

﹥>﹥吖頭↗ 提交于 2020-04-10 11:18:55
SSM (spring, springMVC, mybatis) (spring struts2 mybatis) -> spring Boot springboot(脚手架 / 微框架) = springMVC(控制器) + spring(项目管理) Spring Boot 特点 1. 创建独立的 spring 应用程序(不用类似上面的 SSM 的集成) 2. 嵌入 Tomcat, 无需部署war文件, 方便测试 3. 简化 Maven 配置. 4. 自动配置 spring, 没有 xml 配置. Spring Boot 约定 ( 可以减少配置, 如果你遵守约定) 目录约定, Maven 项目目录 springboot 项目,必须在 src/main/resources 中必须放有 application.yml 或 application.properties springboot项目必须在 src/main/java 中所有子包之外构建入口类, xxApplication,只能有一个, 最好 xx 就是项目的名字例如上边的 TacoCloudApplication.java 环境搭建 来源: oschina 链接: https://my.oschina.net/u/4288740/blog/3227583

MyBatis XML 映射器 select、insert update 和 delete、参数

匆匆过客 提交于 2020-04-10 07:29:15
MyBatis 的真正强大在于它的语句映射,这是它的魔力所在。 如果跟JDBC 代码进行对比,省掉了将近 95% 的代码。 1 select CREATE TABLE person ( id int(11) NOT NULL AUTO_INCREMENT, username varchar(100) DEFAULT NULL, password varchar(100) DEFAULT NULL, full_name varchar(100) DEFAULT NULL, first_name varchar(100) DEFAULT NULL, last_name varchar(100) DEFAULT NULL, date_of_birth date DEFAULT NULL, created_on date DEFAULT NULL, update_on date DEFAULT NULL, PRIMARY KEY ( id ) ) ENGINE=InnoDB AUTO_INCREMENT=211 DEFAULT CHARSET=utf8; insert into person ( id , username , password , full_name , first_name , last_name , date_of_birth , created_on ,

mybatis相关(持续更新)

我怕爱的太早我们不能终老 提交于 2020-04-09 21:44:08
1.mybatis编程步骤 创建SqlSessionFactory对象 通过SqlSessionFactory获取sqlSession对象 通过sqlSession获取Mapper的代理对象 通过mapper的代理对象,执行数据库操作 执行成功,则使用sqlsession提交事务 执行失败,则使用sqlsession回滚事务 最终,关闭会话 2.#{}和${}的区别 ${}是properties文件中的变量占位符,它可以用于xml标签属性值和sql内部,属于字符串替换。 <!-- ${driver} 会被替换为 com.mysql.jdbc.driver --> <dataSource type="UNPOOLED"> <property name="driver" value="${driver}"/> <property name="url" value="${url}"/> <property name="username" value="${username}"/> </dataSource> ${}也可以对传递进来的参数原样拼接在sql中。实际场景中,不推荐使用${},因为会有sql注入的风险。 #{}是sql的参数占位符,mybatis会将sql中的#{}替换为?号,在sql执行前会使用PreparedStatement的参数设置方法,按序给sql的?号占位符设置参数

精通Spring Boot——第十三篇:整合Mybatis多数据源

青春壹個敷衍的年華 提交于 2020-04-09 09:41:57
久违了,最近度过了一段倦怠期,这段时间干什么都没有动力,拖延症复发。好在我回来了.... ——From me . 进入今天的主题——在Spring Boot 项目中整合mybatis多数据源,其实很简单,其实并不难。 整体项目结构以及数据源配置application.yml: 看代码吧. 第一个数据源配置(作为主数据源) /** * @author Lensen * @desc * @since 2018/9/19 10:22 */ @Configuration @MapperScan(basePackages = PrimaryDataSourceConfig.PACKAGE, sqlSessionFactoryRef = "primarySqlSessionFactory") public class PrimaryDataSourceConfig { static final String PACKAGE = "com.developlee.multipartmybatisdatasource.dao.primary"; static final String MAPPER_LOCATION = "classpath:mapper/primary/*.xml"; @Value("${primary.datasource.url}") private String url;

mybatis接口映射的实现原理

自作多情 提交于 2020-04-08 11:56:37
使用mybatis接口映射的示例用户代码: try (SqlSession sqlSession = sqlSessionFactory.openSession()) { UserMapper userMapper = sqlSession.getMapper(UserMapper.class); userMapper.saveUser(user); } UserMapper只是一个java接口,实现类都没有,mybatis竟然让我们直接调用一个接口方法就可以执行数据库操作,这背后的细节就是代理机制的使用,语句 sqlSession.getMapper(UserMapper.class) 实际上是利用java的动态代理机制返回一个实现了UserMapper接口的代理对象,可以打印 userMapper.getClass().getName() 的结果或者用IDE调试工具可以看到是一个代理对象。 那到底是如何获得一个代理对象的呢, SqlSession 接口的默认实现是 DefaultSqlSession ,我们看看在 DefaultSqlSession 的 getMapper 方法的实现: // DefaultSqlSession#getMapper: public <T> T getMapper(Class<T> type) { return configuration.<T

mybatis执行一条sql的流程

元气小坏坏 提交于 2020-04-08 11:48:54
一次insert操作过程 以保存一条记录到表中这个简单的操作为例,就按这个例子来跟踪mybatis是如何执行sql语句的,要保存一个user记录到表中: sqlSession.insert("x.y.insertUser", user); 首先当然是要看看 SqlSession#insert 方法,到 DefaultSqlSession 这个实现类中查找具体的实现,下面两个代码片段是insert方法实现中的调用链: @Override public int insert(String statement, Object parameter) { return update(statement, parameter); } @Override public int update(String statement, Object parameter) { try { dirty = true; MappedStatement ms = configuration.getMappedStatement(statement); return executor.update(ms, wrapCollection(parameter)); } catch (Exception e) { throw ExceptionFactory.wrapException("Error updating

Mybatis连接mysql数据库出现乱码

你。 提交于 2020-04-07 12:12:54
对于mysql数据库的乱码问题,有两中情况: 1. mysql数据库编码问题(建库时设定)。 2. 连接mysql数据库的url编码设置问题。 对于第一个问题,目前个人发现只能通过重新建库解决,建库的时候,选择UTF-8字符集。我试过修改现有数据库字符集为UFT -8,但是根本不起作用,插入的中文仍然乱码(中文显示成:???)。重建库时选择字符集为UTF-8之后,中文正常显示了。 对于第二个问题,是这样的情况:我建库时设置了数据库默认字符集为UTF-8,通过mysql workbench直接插入中文显示完全正常。但是使用mybaits插入数据时,中文显示成了"???"这样的乱码。但从数据库获取的中文不会乱码。跟踪数据库操作,SQL语句中的中文还是显示正常的,但是插入到mysql数据库后就乱码了,于是判断可能是数据库连接的问题。后来在网上找了下资料,发现确实可以为mysql数据库的连接字符串设置编码方式,如下: jdbc:mysql://127.0.0.1:3306/test? useUnicode=true&characterEncoding=utf8 添加了 useUnicode=true&characterEncoding=utf8参数之后,插入中文就正常了。 添加的作用是:指定字符的编码、解码格式。 例如:假设mysql数据库用的是GBK编码(也可能是其它

Mybatis源码阅读之--Mapper执行流程

心不动则不痛 提交于 2020-04-07 11:52:27
Mybatis的主要操作流程为: 1.使用SqlSessionFactory创建SqlSession 2.利用SqlSession获取Mapper 3.使用获取到的Mapper执行相应的增删改查的操作 本文介绍其中的第二步SqlSession如何获取到Mapper。 首先我们会调用SqlSession的geMapper方法获取Mapper,而SqlSession默认的实现类为DefaultSqlSession,找到DefaultSqlSession的源码,getMapper方法如下: // DefaultSqlSession的getMapper方法 @Overridepublic <T> T getMapper(Class<T> type) { return configuration.getMapper(type, this); } 通过以上代码,得知是从configuration中获取Mapper,继续进入configuration的getMapper方法--Configuration是Mybatis的配置类,里面记录了很多Mybatis的配置属性,其中就包括这里讲到的MapperRegistry // Configuration的getMapper方法 public <T> T getMapper(Class<T> type, SqlSession sqlSession) {

SpringBoot整合mybatis步骤

二次信任 提交于 2020-04-07 10:08:26
1.创建项目 创建项目时勾选依赖 web依赖 lombok mysql和mybatis 或者直接在pom.xml中导入依赖(mybatis/mysql/) <!-- https://mvnrepository.com/artifact/org.mybatis.spring.boot/mybatis-spring-boot-starter --> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>2.1.1</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency> 2.配置数据库连接(在application.properties) ps : 如果整合Druid只需要把这一步省略,将数据库连接交给Druid编写 详见: spring.datasource.username=root spring.datasource.password=123456 spring.datasource.url=jdbc:mysql:/