栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

springboot-mybatis实现增删改查(二)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

springboot-mybatis实现增删改查(二)

二、实现用户列表的分页展示及查询

在开始之前,先在yml配置文件当中增加一个日志配置,打印我们执行的sql语句。

logging:
  file:
    name: log/log.log
  level:
    root: info
    lzy.springbootuser: debug
  1. 在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);
}

接口定义好了。

  1. 在resources/mybatis下建立xml文件实现接口里想实现的对数据表的操作。
    新建UserMapper.xml文件,编写sql语句。



    
    
    
        select *
        from mybatis.user;
    
    
    
}在括号里填属性后,这样能直接取到该属性-->



  1. 然后就需要开始写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 List listUser() {
		return userDao.listUser();
	}

第二个查询的方法,需要先启动PageHelper,再写入获取的参数:

	@Override
	public PageInfo listUserByName(UserQuery userQuery) {
		PageHelper.startPage(userQuery.getPageNum(),userQuery.getPageSize());
		return new PageInfo(userDao.listUserByName(userQuery));
	}

接口和方法都定义好了

  1. 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页面

  1. 前端页面(这里是该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的报错,不知道是什么问题,实在没办法,先不管。



    
    首页

    


id 姓名 密码 操作
James 24 Engineer 编辑 删除

达到的效果:

  1. 在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页面
	}
}
  1. 前端取值
    先引入thymeleaf模板,在加入thymeleaf的命名空间,

就可以在html页面中使用了。这里我们想要实现数据库中的用户信息展示在页面当中,在标签以th开头,并且遍历数组,数组的变量名是user,它是从page里面以$方式拿到list集合,这个list集合里面就是我们的user对象集合,接下来在标签以$方式取user的id和name、pwd.




    
    首页

    


id 姓名 密码 操作
James 24 Engineer 编辑 删除

运行结果

然后加入一个分页展示的部分,

上一页 第 2 页/共 4 页 共 29 条
  下一页


到这里用户列表的分页展示已经实现。

  1. 根据用户名查询
    html页面加一个form表单写搜索框

接下来写@{/}这个跳转路径的搜索的方法:
在controller中:

@PostMapping("/")  //查询表单提交是用post方式
	public String listUserByName(Model model,UserQuery userQuery){
		PageInfo userPageInfo = userService.listUserByName(userQuery);
		model.addAttribute("page",userPageInfo);
		return "index";
	}

搜索功能结束。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/894842.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号