目录
一、连接数据库
在application文件写入配置信息。驱动、数据源地址和数据源的用户信息用户名和密码。
配置数据源在IDEA可见。
二、类的写入
创建数据表写入需要的字段字段名
@Column:标识类中属性与数据表中字段的关系
@Data
@Entity
@Table(name = "furnitures")
public class Furniture {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;
@Column(name = "name")
private String Name;
@Column(name = "type")
private String Type;
@Column(name = "brand")
private String Brand;
@Column(name = "state")
private String State;
}
使用@GetMapping、@PostMapping 分别处理get和post请求。get请求的特点:参数会添加到请求路径的后面,只能添加少量参数。请求参数显示在浏览器地址栏,路由器会记录请求地址 。如果传输中文,会乱码。post请求的特点:请求参数添加到实体内容里面,可以添加大量的参数。 相对安全,post不会对请求参数进行加密处理。
@Controller
public class FurnitureController {
@Autowired
private FurnitureService furnitureService;
@GetMapping("/")
public String viewHomePage(Model model) {
return findPaginated(1, "id", "asc", model);
}
@GetMapping("/showNewFurnitureForm")
public String showNewFurnitureForm(Model model) {
// create model attribute to bind form data
Furniture furniture = new Furniture();
model.addAttribute("furniture", furniture);
return "new_furniture";
}
@PostMapping("/saveFurniture")
public String saveEFurniture(@ModelAttribute("furniture") Furniture furniture) {
// save eFurniture to database
furnitureService.saveFurniture(furniture);
return "redirect:/";
}
@GetMapping("/showFormForUpdate/{id}")
public String showFormForUpdate(@PathVariable(value = "id") long id, Model model) {
// get eFurniture from the service
Furniture furniture = furnitureService.getFurnitureById(id);
// set eFurniture as a model attribute to pre-populate the form
model.addAttribute("furniture", furniture);
return "update_furniture";
}
@GetMapping("/deleteFurniture/{id}")
public String deleteFurniture(@PathVariable(value = "id") long id) {
// call delete eFurniture method
this.furnitureService.deleteFurnitureById(id);
return "redirect:/";
}
@RequestMapping(value = "/index1")
public String index(Model model) {
//这样的话,${user}才可在index.html中被取出
Furniture furniture = new Furniture();
model.addAttribute("furniture", furniture);
return "seek";
}
//访问show页面
@PostMapping(value = "/show")
//@ModelAttribute接受表单提交过来的user对象
public String show(@ModelAttribute Furniture furniture, Model model) {
Long id = furniture.getId();
Furniture u= furnitureService.getFurnitureById(id);
model.addAttribute("furniture", u);
return "show";
}
//获取分页数据
@GetMapping("/page/{pageNo}")
public String findPaginated(@PathVariable (value = "pageNo") int pageNo,
@RequestParam("sortField") String sortField,
@RequestParam("sortDir") String sortDir,
Model model) {
int pageSize = 5;
Page<Furniture> page = furnitureService.findPaginated(pageNo, pageSize, sortField, sortDir);
List<Furniture> listFurnitures = page.getContent();
model.addAttribute("currentPage", pageNo);
model.addAttribute("totalPages", page.getTotalPages());
model.addAttribute("totalItems", page.getTotalElements());
model.addAttribute("sortField", sortField);
model.addAttribute("sortDir", sortDir);
model.addAttribute("reverseSortDir", sortDir.equals("asc") ? "desc" : "asc");
model.addAttribute("listFurnitures", listFurnitures);
return "index";
}
}
创建repository。@Repository注解将类识别为Bean,和将所标注的类中抛出的数据访问异常封装为 Spring 的数据访问异常类型。
@Repository
public interface FurnitureRepository extends JpaRepository<Furniture, Long> {
}
创建service服务层。定义好我们需要的方法,然后在实现类去实现这个接口里的方法。
接口
public interface FurnitureService {
// public Furniture findByName(String firstName);
List <Furniture> getAllFurnitures();
void saveFurniture(Furniture furniture);
Furniture getFurnitureById(long id);
void deleteFurnitureById(long id);
Page<Furniture> findPaginated(int pageNo, int pageSize, String sortField, String sortDirection);
}
实现类
@Service
public class FurnitureServiceImpl implements FurnitureService {
@Autowired
private FurnitureRepository furnitureRepository;
@Override
public List <Furniture> getAllFurnitures() {
return furnitureRepository.findAll();
}
@Override
public void saveFurniture(Furniture furniture) {
this.furnitureRepository.save(furniture);
}
@Override
public Furniture getFurnitureById(long id) {
//调用数据访问层查找指定ID的员工,返回Optional对象
Optional <Furniture> optional = furnitureRepository.findById(id);
Furniture furniture = null;
//如果存在指定id的员工
if (optional.isPresent()) {
//从Optional对象中获取员工对象
furniture = optional.get();
} else {
//否则抛出运行时异常
// throw new RuntimeException(" 找不到员工ID :: " + id)
System.out.println("对不起,您要查找的用户不存在!");
}
return furniture;
}
@Override
public void deleteFurnitureById(long id) {
this.furnitureRepository.deleteById(id);
}
@Override
public Page<Furniture> findPaginated(int pageNo, int pageSize, String sortField, String sortDirection) {
//设置排序参数,升序ASC/降序DESC?
Sort sort = sortDirection.equalsIgnoreCase(Sort.Direction.ASC.name())
? Sort.by(sortField).ascending()
: Sort.by(sortField).descending();
//根据页号/每页记录数/排序依据返回某指定页面数据。
Pageable pageable = PageRequest.of(pageNo - 1, pageSize, sort);
return this.furnitureRepository.findAll(pageable);
}
}
运行结果:
这里我们可以看到整个列表的内容有。
我们可以通过add按钮新建内容。
通过select按钮进行查看
总结
学习Java高级,学习到了很多的知识和内容,类型、变量、接口、输入输出流、分析异常、抛出异常,也有对Spring Boot,JAP内容的学习懂得了很多的专业知识。在学习Java时真的是每天必须保证一定量的练习,才能熟练贯通。学习编程语言没有捷径可走。需要在学习的过程中慢慢积累经验,扎实基础。才能做的更好。
gitee地址:https://gitee.com/l-zhijie/java-advanced-final-code.git