最后
现在其实从大厂招聘需求可见,在招聘要求上有高并发经验优先,包括很多朋友之前都是做传统行业或者外包项目,一直在小公司,技术搞的比较简单,没有怎么搞过分布式系统,但是现在互联网公司一般都是做分布式系统。
所以说,如果你想进大厂,想脱离传统行业,这些技术知识都是你必备的,下面自己手打了一份Java并发体系思维导图,希望对你有所帮助。
#配置相关信息
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/mybatis?serverTimezone=UTC
username: root
password: 123456
数据库中的表
创建一个pojo包下的Person类
package com.pojo;
import lombok.Data;
@Data
public class Person {
private Integer id;
private String username;
private String password;
private String gender;
private String addr;
}
创建一个dao包下的PersonDao接口
package com.dao;
import com.pojo.Person;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;
import org.springframework.stereotype.Component;
import java.util.List;
@Component//交给spring容器管理
@Mapper//使用注解配置映射
public interface PersonDao {
@Select("select *from tb_user")
List<Person> personList();
}
在测试类下
package com;
import com.dao.PersonDao;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest
class Springboot05MybatisApplicationTests {
//测试,先注入dao对象
@Autowired
private PersonDao personDao;
@Test
void contextLoads() {
System.out.println(personDao.personList());
}
}
运行结果:
小结:
1、勾选Mybatis技术,也就是导入mybatis对应的starter
2、数据库连接相关信息转换成配置
3、数据库sql映射需要添加@Mapper被容器识别到
**@Mapper注释用来表示该接口类的实现类对象交给mybatis底层创建,然后交由Spring框架管理**
mysql8遇到时区错误
mysql8以上的版本的加上时区?serverTimezone=UTC不然会报错
url: jdbc:mysql://localhost:3306/mybatis?serverTimezone=UTC
小结:
1\mysql8以上的版本驱动有前置要求设置时区
- 修改url,添加sercerTimezone设定
- 修改mysql数据库配置(永久设置)
2、驱动类过时,提醒更换为com.mysql.cj.jdbc.Driver
3、整合Mybatis-plus
使用aliyun创建springboot,或者导入Mybatisplus坐标
dao层的变为,不用写任何方法,点ctrl+鼠标点击进去BaseMapper中可以看到提供了很多方法。
@Data
@TableName("tb_user")//告诉是哪张表
public class Person {
private Integer id;
private String username;
private String password;
private String gender;
private String addr;
}
这需要在pojo对象中加上,告诉mp是哪张表。@TableName(“tb_user”)
package com.dao;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.pojo.Person;
import org.apache.ibatis.annotations.Mapper;
@Mapper//使用注解配置映射
public interface PersonDao extends BaseMapper<Person> {
}
测试类中
package com;
import com.dao.PersonDao;
import com.pojo.Person;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.stereotype.Repository;
import javax.annotation.Resource;
@SpringBootTest
@MapperScan("com.dao")//扫描dao的包,扫描到mapper
class Springboot06MybatisplusApplicationTests {
@Resource
private PersonDao personDao;
@Test
void contextLoads() {
System.out.println(personDao.selectById(1));
}
}
运行结果
Springboot整合mybatis-plus
①手动添加添加springboot整合mp的坐标,可以通过mvnrepository获取
注:由于springboot没有收录mp的坐标版本,需要指定对应的version
②定义数据层接口与映射配置,继承BaseMapper
测试类中注入dao接口,使用即可。
注:需要使用的第三方技术无法创建时勾选时,就手工添加
出现No qualifying bean of type ‘com.dao.PersonDao’ available错误
这个本质就是springboot找不到dao,只需要在启动类中加入@MapperScan(“com.dao”)就可以正常访问了
MyBatisPlus常用功能
1、 给Mp开启日志
在配置文件中写入
#打印日志
mybatis-plus:
configuration:
#标准输出
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
运行一个查看所有的方法,控制台输出如下
2、 MP的分页功能
定义一个类做拦截器
package com.config;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
//分页相关
@Configuration//是一个配置
public class MPConfig {
@Bean//给spring管理
public MybatisPlusInterceptor mybatisPlusInterceptor(){
//定义Mybatis拦截器
MybatisPlusInterceptor interceptor=new MybatisPlusInterceptor();
//添加具体的拦截器
interceptor.addInnerInterceptor(new PaginationInnerInterceptor());
return interceptor;
}
}
测试类下
package com;
@SpringBootTest
class Springboot06MybatisplusApplicationTests {
@Autowired(required = true)
private PersonDao personDao;
// 分页相关
@Test
void GetPage(){
Page page = new Page(0, 4);
personDao.selectPage(page, null);
System.out.println("当前页码:"+page.getCurrent());
System.out.println("多少页:"+page.getPages());
System.out.println("每页条数:"+page.getSize());
System.out.println("总数据数:"+page.getTotal());
System.out.println("所有的内容:"+page.getRecords());
}
}
分页操作时在MyBatisPlus的常规操作基础上增强得到的,内部是动态的拼写sql语句,因此需要增强对应的功能,使用MyBatisPlus拦截器实现
3、 MP条件查询功能
package com;
import javax.annotation.Resource;
@SpringBootTest
class Springboot06MybatisplusApplicationTests {
@Autowired(required = true)
private PersonDao personDao;
@Test
//法1
public void testBy(){
String name="z";
LambdaQueryWrapper<Person> lqw=new LambdaQueryWrapper<>();
lqw.like(name!=null,Person::getUsername,name);
personDao.selectList(lqw);
}
@Test
//法2
public void testBy1(){
String name="z";
QueryWrapper<Person> qw=new QueryWrapper<>();
qw.like(name!=null, "username", "zhan");
personDao.selectList(qw);
}
}
法1比法2好,因为中间的字段不会写错,而法2没有提示,则容易出错。
运行结果:
Service又称为业务层,dao层又称为数据层
4、Mp的业务层快速开发
快速开发方案
- 使用MyBatisPlus提供有业务层通用接口(IService)与业务层通用实现类(ServiceImpl<M,T>)(M为dao层对应的接口,T为实体类)
- 在通用类基础上功能重载或功能追加
- 注意重载时不要覆盖原始操作,避免原始提供的功能丢失
接口下
package com.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.pojo.Person;
public interface PersonService extends IService<Person> {
}
总结:心得体会
既然选择这个行业,选择了做一个程序员,也就明白只有不断学习,积累实战经验才有资格往上走,拿高薪,为自己,为父母,为以后的家能有一定的经济保障。
学习时间都是自己挤出来的,短时间或许很难看到效果,一旦坚持下来了,必然会有所改变。不如好好想想自己为什么想进入这个行业,给自己内心一个答案。
面试大厂,最重要的就是夯实的基础,不然面试官随便一问你就凉了;其次会问一些技术原理,还会看你对知识掌握的广度,最重要的还是你的思路,这是面试官比较看重的。
最后,上面这些大厂面试真题都是非常好的学习资料,通过这些面试真题能够看看自己对技术知识掌握的大概情况,从而能够给自己定一个学习方向。包括上面分享到的学习指南,你都可以从学习指南里理顺学习路线,避免低效学习。
大厂Java架构核心笔记(适合中高级程序员阅读):
不如好好想想自己为什么想进入这个行业,给自己内心一个答案。
面试大厂,最重要的就是夯实的基础,不然面试官随便一问你就凉了;其次会问一些技术原理,还会看你对知识掌握的广度,最重要的还是你的思路,这是面试官比较看重的。
最后,上面这些大厂面试真题都是非常好的学习资料,通过这些面试真题能够看看自己对技术知识掌握的大概情况,从而能够给自己定一个学习方向。包括上面分享到的学习指南,你都可以从学习指南里理顺学习路线,避免低效学习。
大厂Java架构核心笔记(适合中高级程序员阅读):
[外链图片转存中…(img-1uvTArkQ-1715649426545)]