配置mysql
- docker部署springboot+mysql项目
docker pull mysql下载mysql
其余跟教程走https://blog.csdn.net/Sirius_hly/article/details/83685256
设置外网访问
配置mybatis
2、加入依赖(可以用 http://start.spring.io/ 下载)
org.mybatis.spring.boot
mybatis-spring-boot-starter
1.3.2
runtime
mysql
mysql-connector-java
runtime
com.alibaba
druid
1.1.6
3、加入配置文件
#mybatis.type-aliases-package=net.xdclass.base_project.domain
#可以自动识别
#spring.datasource.driver-class-name =com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/movie?useUnicode=true&characterEncoding=utf-8
spring.datasource.username =root
spring.datasource.password =password
#如果不使用默认的数据源 (com.zaxxer.hikari.HikariDataSource)
spring.datasource.type =com.alibaba.druid.pool.DruidDataSource
加载配置,注入到sqlSessionFactory等都是springBoot帮我们完成
4、启动类增加mapper扫描
@MapperScan("com.example.demo.Mapper")
技巧:保存对象,获取数据库自增id
@Options(useGeneratedKeys=true, keyProperty="id", keyColumn="id")
4、开发mapper
参考语法 http://www.mybatis.org/mybatis-3/zh/java-api.html
5 控制台打印sql语句
#增加打印sql语句,一般用于本地开发测试
mybatis.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
整合问题集合:
https://my.oschina.net/hxflar1314520/blog/1800035
https://blog.csdn.net/tingxuetage/article/details/80179772
navicat 执行sql,profile是非常好的定位慢查询的方法
小d课堂最后那点讲redis排行榜的数据还是要存到mysql里,里面讲了些设计表的要点
1、表设计过程中应该注意的点即数据类型
1)更小的通常更好 控制字节长度
2)使用合适的数据类型
如tinyint只占8个位,char(1024)与varchar(1024)的对比,char用于类似定长数据存储比varchar节省空间,如:uuid(32),可以用char(32).
3)尽量避免NULL建议使用NOT NULL DEFAULT ''
NULL的列会让索引统计和值比较都更复杂。可为NULL的列会占据更多的磁盘空间,在Mysql中也需要更多复杂的处理程序
2、索引设计过程中应该注意的点
1)选择唯一性索引
唯一性索引的值是唯一的,可以更快速的通过该索引来确定某条记录,保证物理上面唯一
2)为经常需要排序、分组和联合操作的字段建立索引
经常需要ORDER BY、GROUP BY、DISTINCT和UNION等操作的字段,排序操作会浪费很多时间
3)常作为查询条件的字段建立索引
如果某个字段经常用来做查询条件,那么该字段的查询速度会影响整个表的查询速度
4)数据少的地方不必建立索引 比如status字段,基本只有0和1两个字段
5)建立索引方法:在navicat里,右键设计表,点击索引输入字段名字,确定。查看表结构sql(ddl)已增加key。自己做实验,ORDER BY字段增加索引,10000条数据差了0.2秒左右
3、sql优化,explain查看执行计划(注意:扫描行数会影响CPU运行,占用大量内存)
着重rows 行数过多一定意味着满,并且有占满内存的可能
简介:sql优化以及mybatis generator反向工程讲解
1) 能够用BETWEEN的就不要用IN
2) 能够用DISTINCT的就不用GROUP BY
3) 避免数据类型强转
4) 学会采用explain查看执行计划
mysql必知必会
命令结尾处加;
navicat 快捷键 command+r 运行
select from t_user limit 5,5。LIMIT 5, 5指示MySQL返回从行5开始的5行 不包含第5行。
select from t_user ORDER BY nickname,mobile。如果nickename都是唯一,则排序结果与mobile无关。默认从小到大。DESC是从大到小
select from t_user where id BETWEEN 1 AND 10。id在1-10中
select from t_user where mobile is null。mobile 为空
select from t_user where id=1 or mobile=13911391996。id=1或者mobile=139的
select from t_user where (id=1 or mobile=13581972222213114) or mobile=13911391996。还可以这么写
为什么要使用IN操作符?其优点具体如下。
1在使用长的合法选项清单时,IN操作符的语法更清楚且更直观。 在使用IN时,计算的次序更容易管理(因为使用的操作符更少)。
2 IN操作符一般比OR操作符清单执行更快。
3 IN的最大优点是可以包含其他SELECT语句,使得能够更动态地建立WHERE子句。第14章将对此进行详细介绍。
select from t_user where mobile in (13911391995,13911391996)
select from t_user where mobile not in (13911391995,13911391996)。not in不包含,但注意一点,也会过滤掉null,只会把有值的 并且 不=null的展示出来
select from t_user where mobile LIKE '%96'。96结尾的。也可以96%、%96%
select from t_user where mobile LIKE '_11391996'。单个匹配,类似like,可以写多个。
不要过度使用通配符。如果其他操作符能达到相同的目的,应该 使用其他操作符。因为性能不高。
select from t_user where mobile REGEXP '13911391996|13911391995'。正则,or
SELECT concat(mobile, '(', nickname ,')') as splice from t_user。拼接,如果有值是null,则拼接之后的值也是null
SELECT concat(Rtrim(nickname), '(', mobile ,')') as splice from t_user。RTrim()函数去掉值右边的所有空格。通过使用RTrim(),各个 列都进行了整理。同事还支持LTrim()。以及Trim()
select Upper(nickname) from t_user。大写,中文不受影响。lower小写
SELECT SUM(out_integral)AS dayIntegral FROM t_commodity_order AS AA WHERE if(is_experience=1,AA.is_experience=1,(AA.is_experience = 0 or AA.is_experience is null))。where里写判断,where里同样可以写case when
常用的时期处理函数
几个注意事项
select from t_user where date(create_time)>"2018-10-29"。意思很明显,date获取当前日期。就算create_time带分秒也可以
数值处理函数
sql聚集函数
组合使用比如group by和having。orderby和having
sql语句顺序
连接表两种写法的区别
select from t_banner b LEFT JOIN t_app_manage a on b.app_id = a.app_id
select from t_banner,t_app_manage where t_banner.app_id = t_app_manage.app_id
第二种的写法和inner join没有区别 首选inner join
union
可用UNION操作符来组合数条SQL查询。利用UNION,可给出多条SELECT语句,将它们的结果组合成单个结果集。
insert
insert into user(name, age) values("hcb00",11);
更新表
alter table t_single_poke_order add is_vip tinyint(4) comment '是否为测试数据 0否 1是';增加列
删除表
drop table t_race_order
重命名表
rename table user to userr
为查看当前设置
可使用SHOW VARIABLES;和SHOW STATUS;
显示所有活动进程
使用SHOW PROCESSLIST (以及它们的线程ID和执行时间)