步骤:
1、加载Spring—pom.xml
2、UserService接口-方法-实现类:service业务相关-用户注册 Impl判断插入是否
3、创建spring的控制的资源–bean
4、加载配置文件
5、获取资源:dao操作相关-增删查改 mapper数据库映射
@MapperScan("com/example/demo/mapper") 启动类的主函数
--- userMapper映射文件
@Select("select * from user")
List<User> findAll();
User实体entity 声明字段属性的 get&set == @Data (Lombok)
控制器userController
@RestController
@RequestMapping("/user") //url路径跳转地址
public class UserController {
@Resource
UserMapper userMapper; //声明调用的类userMapper
@GetMapping //可追加定义的具体路径("") 接口类型+路径
public List<User> getUser(){ //String -> List<User>返回user的列表形式
return userMapper.findAll();
}
总结:
一、数据库连接配置
二、实体与数据库一一对应
三、主函数(@MapperScan)、mapper映射(@select)、控制器配路径(返回list)
一、Annotation注解
常用注解 | 分类 | 用法 |
---|---|---|
① | @Component | 组件(Bean) 使用时只需将其标注在相应类上即可 |
② | @Repository | 数据访问层(DAO层)以下三功能与@Component相同 |
③ | @Service | 业务层,将业务层的类标识为 Spring中的Bean |
④ | @Controller | 控制层,注解标注了UserController类 |
⑤ | @Autowired | 默认按照Bean的类型进行装配 |
⑥ | @Resource | 默认按照Bean实例名称进行装配(name、type) |
⑦ | @Qualifier | 与⑤配合使用,将默认修改为Bean的实例名称装配 |
用法:静态成员 ——> 变量初始化为默认值——>构造器——>为变量赋值。
构造(有参、无参)函数用来创建类的实例化对象(初始化工作)
User实体entity 声明字段属性的 get&set == @Data (Lombok)
请求映射注解:@Controller @RequestMapping
参数绑定注解:@ResponseBody @SessionAttribute
组合注解:@RestController相当于是@Controller和@ResponseBody的组合。[Restful风格]
@MapperScan(“com/example/demo/mapper”) //启动类的主函数,扫描映射
@RequestMapping(“/user”) //url路径跳转地址
@Resource
UserMapper userMapper; //声明调用的类userMapper
@GetMapping //可追加定义的具体路径(“”) 接口类型+路径
二、数据结构
1、集合
1.1 Collections
Collections:针对集合操作的工具类
sort自然排序也就是升序、reverse反转指定列表中元素的顺序、shuffle随机源随机排列用在洗牌中
1.2 TreeSet
想要使用TreeSet,需要制定排序规则
1、自然排序:空参构造创建TreeSet集合-Student类实现Comparable接口-重写compareTo方法
2、比较器排序:让集合构造方法接收Comparator的实现类对象,重写compare方法
根据返回值进行排序,关于返回值规则:负数存左边,等于重复了不存,正数存右边(字典规则)
int result = this.age - o.age; //主要判断条件
result = result == 0 ? this.name.compareTo(o.getName) : result; //次要判断条件
equals:哈希算法(hashmap)加载因子[0.75]扩容
数组-链表-红黑树(添加变慢,其余更优)
ConcurrentHashMap 隔离级别[16]
无锁CAS算法,效率高
2、数组
数组:查询快,增删慢(索引、数据)
链表:增删快,查询慢(结点、地址)
List集合常用实现类 ArrayList :底层数据结构是数组 elementData(数组名)
空参构造创建ArrrayList对象: List list= new ArrayList<>( );
LinkedList :底层数据结构是链表,查询慢,增删快
3、泛型
3.1 泛型
泛型:参数化类型(类、方法、接口)定义方法时有形参,然后调用方法时传递实参
将类型由原来的具体的类型参数化,然后在使用/调用时传入具体的类型
创建集合对象:默认Object 引用类型
方法名相同,参数列表不同,这叫方法重载
3.2 泛型接口
泛型接口无法直接进行实例化,需要使用实现类Impl=List->ArrayList(T t)
//实现类Impl中重写方法:implements、void show(T t)
Generic g1 = new GenericImpl( );
3.3 类型通配符
类型通配符:list<? extends 类型> extends上限取子类型 super下限取父类型 List<? super Number> l2 = new ArrayList( ); Object<-Number<-Integer list<?>任意类型
Java类实现interface使用implements关键词,继承abstract class则是使用extends关键词,我们可以参考Java标准库中的ArrayList
4、迭代器对象
迭代器对象一旦被创建出来,默认指向集合的0索引处
Iterator<String> it = list.iterator();
while(it.hasNext()){ //当前位置是否有元素可以被取出
System.out.println(it.next()); //取出当前位置元素+将迭代器往后移一个索引位置
}
5、Lambda表达式
Lambda-简化匿名内部类 【数组或集合对象】
策略设计模式: 数组转集合,方法返回值(遍历参数)
泛型并实例化
" -> " 箭头符号
左侧:抽象方法的形参,右侧:具体实现类的方法
学习方法时,首先创建一个对象 [抽象方法T->String] 底层遍历集合
集合对象+泛型 = new 实现类(不能直接new一个接口Collection)
Collection<String> collection = new ArrayList<>(); //空参构造
//boolean test(T t);注T表示集合数据类型
collection.removeIf(
(String s)-> {
return s.length() == 3
}
);
//Lambda表达式小括号中与抽象方法形参保持一致(T t),大括号与抽象方法返回值boolean一致
附:对象
mybatis参数传递用#{},@Transactional事务注解
controller写接口,mapper写方法
数据库名、表名、表别名、字段名、字段别名等全部小写(驼峰命名)
@RequestParam ?pageNum=&pageSize=分页插件
page 泛型T 处理数据、调用方法、new 对象
分页:查总数 count(id) 查数据offset、pageSize