在开始之前,先在yml配置文件当中增加一个日志配置,打印我们执行的sql语句。
logging:
file:
name: log/log.log
level:
root: info
lzy.springbootuser: debug
- 在dao层中定义UserDao接口(新建new Interface)
接口中用来实现用户的增删改查操作。
要把接口交给mybatis管理,则需要在这里增加一个@Mapper注解,用来告诉springboot这是一个mybatis的mapper类。
这样的话,接下来在mybatis文件夹下的xml文件的namespace就可以直接使用这个接口。
然后增加一个@Repository接口,用来将userdao交由spring容器管理,后续在service层调用dao层时可以直接使用注解进行注入。
然后就可以在UserDao中定义方法。
注:这里list和User会标红,因为需要导入Java包,鼠标放在红色的上面就能看到。也可以以alt+enter。
@Mapper //用来告诉springboot这是一个mybatis的mapper类
@Repository //将userdao交由spring容器管理
public interface UserDao {
// 查询所有用户
public List listUser(); //返回一个list集合。方法名:listUser
//根据用户名查询用户并分页展示
public List listUserByName();
}
这里想要实现分页的功能,需要用到一些参数,在pojo实体类下建一个query包,在query包中创建一个UserQuery实体类,把需要查询的东西都封装到这个实体类里面。
public class UserQuery {
private Integer pageNum = 1; //定义一个pageNum,当前页面,定义为1.
private Integer pageSize = 2; //每页所显示的数据条数
private String name; //根据用户名查询
}
然后交由Lombok来管理
@Data @AllArgsConstructor @NoArgsConstructor
即
到这里,方法已经定义好了,就把参数传递到进去UserDao的方法里。
public interface UserDao {
// 查询所有用户
public List listUser(); //返回一个list集合。方法名:listUser
//根据用户名查询用户并分页展示
public List listUserByName(UserQuery userQuery);
}
接口定义好了。
- 在resources/mybatis下建立xml文件实现接口里想实现的对数据表的操作。
新建UserMapper.xml文件,编写sql语句。
select * from mybatis.user; }在括号里填属性后,这样能直接取到该属性-->
- 然后就需要开始写service层。
新建UserService接口(new Interface)
UserService接口里的方法和dao层里的一样,但是这里分页展示传的并不是list集合了,而是PageInfo,想要使用的话首先需要在pom.xml文件中引入依赖。
com.github.pagehelper
pagehelper-spring-boot-starter
1.3.0
接下来在service层新建UserService的实现类(new class)UserServiceImpl。
让他来实现implements我们的UserService接口,重写一下他的方法。
选择这个重写方法之后就自动有下面的:
在service层需要引用dao层,用@Service注解。
然后在class里把UserDao层注入一下:
@Autowired private UserDao userDao;
左侧出现的一个箭头,点击一下就会转到dao层中调用的地方去,
接下来,就可以直接调用dao层的方法。
修改listUser返回的参数,把null修改:
@Override public ListlistUser() { return userDao.listUser(); }
第二个查询的方法,需要先启动PageHelper,再写入获取的参数:
@Override public PageInfolistUserByName(UserQuery userQuery) { PageHelper.startPage(userQuery.getPageNum(),userQuery.getPageSize()); return new PageInfo (userDao.listUserByName(userQuery)); }
接口和方法都定义好了
- controller层,控制视图跳转。
新建(new class)UserController
加入@Controller注解
然后在controller层注入一下service层:
@Controller
public class UserController {
@Autowired
private UserService userService;
}
后面写视图,需要一个主页,在resource/templates下新建一个index.html页面,然后控制跳转,需要引入一个依赖在pom文件中:
org.springframework.boot
spring-boot-starter-thymeleaf
然后就在UserController编写方法:
@GetMapping("/") //用来设置一个地址
public String index(){
return "index"; //定义跳转到index页面
}
ctrl+鼠标点击index就会跳转到index.html页面了。
到这里就可以运行代码,看看能不能出来这个html的页面。我在运行时出现了一个错误:
网上查到的解决办法:出现的bug大概意思是:不鼓励依赖循环引用,默认情况下是禁止的。更新您的应用程序以删除 bean 之间的依赖循环。作为最后的手段,可以通过将 spring.main.allow-circular-references 设置为 true 来自动中断循环。
在配置文件yml中添加
spring:
main:
allow-circular-references: true
然后就好了,运行后有了index页面
- 前端页面(这里是该Java-Web项目的web页面,不是前后端分离的前端部分)
原教程这里使用了一个Semantic-ui,官方文档链接https://semantic-ui.com
它是一个CSS框架。
样式用在线的CDN方式来引入:
粘贴到我们的html页面里。然后这里引入的JavaScript是基于jquery的,百度一下jquery cdn。
这里出现问题:使用的官方cdn,但是却出现不显示样式、和GET https://cdn.jsdelivr.net/npm/semantic-ui@2.4.2/dist/semantic.min.js net::ERR_CONNECTION_TIMED_OUT这样的错误.
把css的link换为,样式正常显示,但是jquery和js依旧报错,然后把jquery改为,还剩下js的报错,不知道是什么问题,实在没办法,先不管。
首页
达到的效果:
- 在controller层调用业务层
index处传递一个参数model,用来把参数封装到model中,传递前端参数。还需要一个userQuery参数。
然后调用service层userService.listUserByName(userQuery);,后面用到了“ieda-自动引入局部变量(introduce local variable)”,快捷键是ctrl+alt+V,看到它返回的是一个userPageInfo,再把userPageInfo加到model。
@Controller
public class UserController {
@Autowired
private UserService userService;
@GetMapping("/") //用来设置一个地址
public String index(Model model,UserQuery userQuery){
PageInfo userPageInfo = userService.listUserByName(userQuery);
model.addAttribute("page",userPageInfo);
return "index"; //定义跳转到index页面
}
}
- 前端取值
先引入thymeleaf模板,在加入thymeleaf的命名空间,
就可以在html页面中使用了。这里我们想要实现数据库中的用户信息展示在页面当中,在
首页
运行结果
然后加入一个分页展示的部分,
到这里用户列表的分页展示已经实现。
- 根据用户名查询
html页面加一个form表单写搜索框
接下来写@{/}这个跳转路径的搜索的方法:
在controller中:
@PostMapping("/") //查询表单提交是用post方式
public String listUserByName(Model model,UserQuery userQuery){
PageInfo userPageInfo = userService.listUserByName(userQuery);
model.addAttribute("page",userPageInfo);
return "index";
}
搜索功能结束。
Java相关栏目本月热门文章
- 1【Linux驱动开发】设备树详解(二)设备树语法详解
- 2别跟客户扯细节
- 3Springboot+RabbitMQ+ACK机制(生产方确认(全局、局部)、消费方确认)、知识盲区
- 4【Java】对象处理流(ObjectOutputStream和ObjectInputStream)
- 5【分页】常见两种SpringBoot项目中分页技巧
- 6一文带你搞懂OAuth2.0
- 7我要写整个中文互联网界最牛逼的JVM系列教程 | 「JVM与Java体系架构」章节:虚拟机与Java虚拟机介绍
- 8【Spring Cloud】新闻头条微服务项目:FreeMarker模板引擎实现文章静态页面生成
- 9JavaSE - 封装、static成员和内部类
- 10树莓派mjpg-streamer实现监控及拍照功能调试
- 11用c++写一个蓝屏代码
- 12从JDK8源码中看ArrayList和LinkedList的区别
- 13idea 1、报错java: 找不到符号 符号: 变量 log 2、转换成Maven项目
- 14在openwrt使用C语言增加ubus接口(包含C uci操作)
- 15Spring 解决循环依赖
- 16SpringMVC——基于MVC架构的Spring框架
- 17Andy‘s First Dictionary C++ STL set应用
- 18动态内存管理
- 19我的创作纪念日
- 20Docker自定义镜像-Dockerfile



