文章目录
环境配置
- jdk- 视频:https://b23.tv/WN28YAm- 博客:只需四步完成java JDK1.8的下载安装与配置【图文详解】
- maven- 视频:https://b23.tv/Lmo8rWl- 博客:只需五步学会Maven 3.6.1的下载安装与配置【图文详解】
- idea- 公众号:关注软件科技管家回复idea2019
- idea配置jdk和maven
正文开始之前
问题:大家有没有学习过这两本书?
为了开发时的层次清晰和分工明确,现如今基本上都将web应用的开发分成了五个层级结构,分别是表示层(Presentation)、控制/中介层(Controller/Mediator)、领域层(Domain)、数据持久层(Data Persistence)和数据源层(Data Source)。
我们都知道,为了方便数据的存储和查询一般都是将数据存储在数据库中,我们我可以通过SQL的增删改查语句来操作数据库的所有记录。以我的理解,数据持久化就是将程序代码中对数据记录的各种操作体现在数据库中,下一次再去查询数据库的时候不会说查到的还是操作之前的数据。学习数据持久层之前,我们需要先来复习一下SQL语句。
1 简单SQL语句
1.1 查询
讲解SQL语句之前先演示如何使用Navicat导入SQL文件,创建表并添加记录。如果没有图形化操作软件的话可以使用dos窗口的命令导入https://blog.csdn.net/qq_37918817/article/details/81107433
SELECT 列名称 FROM 表名称;
查询所有的记录
SELECT*FROM singer;
倒序查询所有的记录
SELECT*FROM singer
ORDERBY id DESC;
1.2 新增
INSERT INTO 表名称 [列名称…]
VALUES (值…);
插入一条记录
INSERTINTO singer
VALUES(64,'张三',1,'/img/singerPic/1586091210109Sanna Nielsen.jpg','1984-11-27 00:00:00','平顶山','五音不全');
1.3 修改
UPDATE 表名称
SET 列名称 = 新值 [,列名称 = 新值,…]
[WHERE <条件>];
修改id为64的introduction为歌声甜美
UPDATE singer
SET introduction='歌声甜美'WHERE id=64;
1.4 删除
DELETE FROM 表名称
[WHERE <条件>];
按照id删除一条记录
DELETEFROM singer
WHERE id=64;
1.5 多表查询
SELECT*FROM singer sr INNERJOIN song sg
ON sr.id = sg.singer_id
WHERE sr.name LIKE'王%'ORDERBY sr.id DESC;
工程创建
创建一个project
创建两个maven的module分别是jdbc_test和mybatis_test创建一个Spring Initializr模块
2 JDBC
为什么需要数据持久化技术?每次修改数据库的时候直接使用SQL语句不就可以了?想象一下数据库就像是一台老式按键电视机,你家的沙发离这台电视机的距离不近(当然距离取决于个人家庭情况)。各种CRUD操作就像是你父母的节目需求,你正在看《巴啦啦小魔仙》,你家父皇来了想看《谭谈交通》,你家母后来了想要看《爱情保卫战》,过了一会你家父皇又想看《金牌调解》……你是不是就需要来回跑到电视前面使用按钮换台,这时候有人问你有个东西叫遥控器,他可以在十米范围内随意换台,你说你用不用?
2.1 什么是JDBC
JDBC就是Java数据库连接(Java Database Connectivity)是Java语言中用来规范客户端程序如何来访问数据库的应用程序接口,提供了诸如查询和更新数据库中数据的方法。jdbc是sun公司为了在Java语言中提供对数据库访问的支持,而提供的一套用于访问数据库的标准Java类库。我们通常说的JDBC是面向关系型数据库的,今天讲解的所有持久层框架也是以关型数据库为例
2.2 什么是jar和maven
之前java web的学习涉及到jar包也就是 Java Archive File文件,jar包其实是一种zip格式的文件,也就是压缩包它里面的内容就是Java代码,在项目的编写阶段导入jar包就可以使用里面提供的方法。不要认为jar包很是神秘,其实自己也可以创建一个jar包,只需要将写好的Java代码打成jar包再导入即可使用里面定义的方法。就好比你把一首歌的MP3文件放在压缩包发给你的朋友,他解压缩之后就可以听了。jar包参考博客
maven风格的项目,把所有的jar包都放在了本地"仓库“ 里,然后哪个项目需要用到这个jar包,只需要给出jar包的名称和版本号就行了(也就是常说的坐标),这样就实现了jar包共享,避免每一个项目都单独引入jar包带来的麻烦。使用maven管理就相当于,直接发给你的朋友这首歌的链接。maven参考博客
查询依赖的网站:https://mvnrepository.com/
2.3 JDBC的使用
首先需要导入数据库连接依赖,这样才能将Java代码连接到数据库
<!--数据库连接依赖--><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.32</version><scope>runtime</scope></dependency>
然后创建实体类,实体类中的字段与数据库中的列名一一对应,数据类型也是相对应的
privateInteger id;privateString name;privateInteger sex;privateString pic;privateDate birth;privateString location;privateString introduction;publicSinger(){}publicSinger(Integer id,String name,Integer sex,String pic,Date birth,String location,String introduction){this.id = id;this.name = name;this.sex = sex;this.pic = pic;this.birth = birth;this.location = location;this.introduction = introduction;}publicIntegergetId(){return id;}publicvoidsetId(Integer id){this.id = id;}publicStringgetName(){return name;}publicvoidsetName(String name){this.name = name;}publicIntegergetSex(){return sex;}publicvoidsetSex(Integer sex){this.sex = sex;}publicStringgetPic(){return pic;}publicvoidsetPic(String pic){this.pic = pic;}publicDategetBirth(){return birth;}publicvoidsetBirth(Date birth){this.birth = birth;}publicStringgetLocation(){return location;}publicvoidsetLocation(String location){this.location = location;}publicStringgetIntroduction(){return introduction;}publicvoidsetIntroduction(String introduction){this.introduction = introduction;}@OverridepublicStringtoString(){return"Singer{"+"id="+ id +", name='"+ name +'\''+", sex="+ sex +", pic='"+ pic +'\''+", birth="+ birth +", location='"+ location +'\''+", introduction='"+ introduction +'\''+'}';}
因为后面使用jdbc操作会频繁的连接数据库,关闭数据库释放资源,于是将这两个部分抽取成工具类中的静态方法,直接调用
// 加载驱动并建立数据库驱动publicstaticConnectiongetConnection()throwsClassNotFoundException,SQLException{String url ="jdbc:mysql://localhost:3306/music";String username ="root";String password ="123456";String driver ="com.mysql.jdbc.Driver";Class.forName(driver);returnDriverManager.getConnection(url, username, password);}// 关闭数据库连接,释放资源publicstaticvoidrelease(Statement statement,Connection conn){if(statement !=null){try{
statement.close();}catch(SQLException e){
e.printStackTrace();}
statement =null;}if(conn !=null){try{
conn.close();}catch(SQLException e){
e.printStackTrace();}
conn =null;}}publicstaticvoidrelease(ResultSet resultSet,Statement statement,Connection conn){if(resultSet !=null){try{
resultSet.close();}catch(SQLException e){
e.printStackTrace();}
resultSet =null;}release(statement, conn);}
持久层CRUD的方法api和测试方法的测试
查询所有记录
/**
* 查询所有方法
* @return
*/publicArrayList<Singer>selectAll(){Connection conn =null;Statement statement =null;ResultSet resultSet =null;ArrayList<Singer> singers =newArrayList<Singer>();try{// 获取数据库连接
conn =JDBCUtil.getConnection();// 获得statement对象
statement = conn.createStatement();//发送SQL语句String sql ="select * from singer;";System.out.println(sql);
resultSet = statement.executeQuery(sql);// 处理查询结果while(resultSet.next()){Singer singer =newSinger();
singer.setId(resultSet.getInt("id"));
singer.setName(resultSet.getString("name"));
singer.setSex(resultSet.getInt("sex"));
singer.setPic(resultSet.getString("pic"));
singer.setBirth(resultSet.getDate("birth"));
singer.setLocation(resultSet.getString("location"));
singer.setIntroduction(resultSet.getString("introduction"));
singers.add(singer);return singers;}}catch(ClassNotFoundException e){
e.printStackTrace();}catch(SQLException e){JDBCUtil.release(statement, conn);}returnnull;}
// 查询所有的SingerDao singerDao =newSingerDao();ArrayList<Singer> singers = singerDao.selectAll();for(Singer singer : singers){System.out.println(singer);}
按照id查询
/**
* 按id查询方法
* @return
*/publicSingerselectById(Integer id){Connection conn =null;Statement statement =null;ResultSet resultSet =null;try{// 获取数据库连接
conn =JDBCUtil.getConnection();// 获得statement对象
statement = conn.createStatement();//发送SQL语句String sql ="select * from singer where id="+ id +";";System.out.println(sql);
resultSet = statement.executeQuery(sql);// 处理查询结果while(resultSet.next()){Singer singer =newSinger();
singer.setId(resultSet.getInt("id"));
singer.setName(resultSet.getString("name"));
singer.setSex(resultSet.getInt("sex"));
singer.setPic(resultSet.getString("pic"));
singer.setBirth(resultSet.getDate("birth"));
singer.setLocation(resultSet.getString("location"));
singer.setIntroduction(resultSet.getString("introduction"));return singer;}returnnull;}catch(ClassNotFoundException e){
e.printStackTrace();}catch(SQLException e){JDBCUtil.release(statement, conn);}returnnull;}
// 按照id查询SingerDao singerDao =newSingerDao();Singer singer = singerDao.selectById(63);System.out.println(singer);
新增
/**
* insert操作
* @param singer
* @return
*/publicbooleaninsert(Singer singer){Connection conn =null;Statement statement =null;try{// 获取数据库连接
conn =JDBCUtil.getConnection();// 获得statement对象
statement = conn.createStatement();//发送SQL语句SimpleDateFormat sdf =newSimpleDateFormat("yyyy-MM-dd");String birth = sdf.format(singer.getBirth());String sql ="INSERT INTO singer"+" VALUES("+ singer.getId()+",'"+ singer.getName()+"',"+ singer.getSex()+",'"+ singer.getPic()+"','"+ birth +"','"+ singer.getLocation()+"','"+ singer.getIntroduction()+"');";System.out.println(sql);int num = statement.executeUpdate(sql);if(num >0){returntrue;}returnfalse;}catch(ClassNotFoundException e){
e.printStackTrace();}catch(SQLException e){JDBCUtil.release(statement, conn);}returnfalse;}
// 插入语句测试// 先创建一个singer对象Singer singer =newSinger();
singer.setId(64);
singer.setName("张三");
singer.setSex(1);
singer.setPic("/img/singerPic/1586091210109Sanna Nielsen.jpg");
singer.setBirth(newDate());
singer.setLocation("平顶山");
singer.setIntroduction("五音不全");// 调用业务方法SingerDao singerDao =newSingerDao();boolean insert = singerDao.insert(singer);System.out.println(insert);
修改
/**
* update方法
* @param singer
* @return
*/publicbooleanupdate(Singer singer){Connection conn =null;Statement statement =null;try{// 获取数据库连接
conn =JDBCUtil.getConnection();// 获得statement对象
statement = conn.createStatement();//发送SQL语句String sql ="update singer set introduction='"+ singer.getIntroduction()+"' where id="+ singer.getId()+";";System.out.println(sql);int num = statement.executeUpdate(sql);if(num >0){returntrue;}returnfalse;}catch(ClassNotFoundException e){
e.printStackTrace();}catch(SQLException e){JDBCUtil.release(statement, conn);}returnfalse;}
// 修改Singer singer1 =newSinger();
singer1.setId(64);
singer1.setIntroduction("歌声甜美");SingerDao singerDao =newSingerDao();boolean update = singerDao.update(singer1);System.out.println(update);
按照id删除
/**
* delete方法
* @param id
* @return
*/publicbooleandelete(Integer id){Connection conn =null;Statement statement =null;try{// 获取数据库连接
conn =JDBCUtil.getConnection();// 获得statement对象
statement = conn.createStatement();//发送SQL语句String sql ="delete from singer where id="+ id +";";System.out.println(sql);int num = statement.executeUpdate(sql);if(num >0){returntrue;}returnfalse;}catch(ClassNotFoundException e){
e.printStackTrace();}catch(SQLException e){JDBCUtil.release(statement, conn);}returnfalse;}
// 删除SingerDao singerDao =newSingerDao();boolean delete = singerDao.delete(64);System.out.println(delete);
2.4 JDBC总结
使用JDBC进行CRUD的步骤:
- 导入数据库连接依赖(jar包)
- 创建实体类
- 创建工具类(连接数据库,释放资源)
- 接口api方法(crud方法)
- 测试,创建方法类的对象,使用对象调用方法完成数据持久化操作
3 mybatis
还以遥控器为例,假如说你家的客厅100平,之前的遥控的范围不够,你还是要走几步,现在人家又说了,最新款的遥控器可以支持15米,你说你换不换?
mybatis是一种优秀的ORM框架
3.1 什么是ORM?为什么是ORM不是JDBC?
ORM(Object Relational Mapping)即对象关系映射,是一种开发规范。将简单的java对象(pojo)和数据库表记录进行映射,使得表中的记录能和POJO一一对应。
JDBC的劣势:代码繁琐(sql语句的拼接发送接收),SQL拼接复杂且容易出错,耦合度太高(SQL语句硬编码到java程序,不利于后期的维护),性能问题。基于以上诸多问题,企业中的开发慢慢过度到了ORM框架,下面讲到的mybatis框架就是一个十分优秀的ORM框架
3.2 mybatis的使用
maven项目的第一步,导依赖
<!--mybatis的依赖--><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.4.6</version></dependency><!--数据库连接依赖--><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.32</version></dependency>
创建POJO类Singer
privateInteger id;privateString name;privateInteger sex;privateString pic;privateDate birth;privateString location;privateString introduction;
使用lombok简化开发
<!--lombok简化实体类开发,如果之前没有下载过依赖的同名插件的话需要下载安装,然后重启一下idea--><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.22</version><optional>true</optional></dependency>
创建jdbc.properties数据库连接配置
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/music
jdbc.username=root
jdbc.password=123456
创建mybatis.xml配置文件
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPEconfigurationPUBLIC"-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd"><configuration><!--加载配置文件--><propertiesresource="jdbc.properties"/><typeAliases><typeAliastype="com.xiaochen.domain.Singer"alias="singer"/></typeAliases><!--数据源环境--><environmentsdefault="development"><environmentid="development"><transactionManagertype="JDBC"></transactionManager><dataSourcetype="POOLED"><propertyname="driver"value="${jdbc.driver}"/><propertyname="url"value="${jdbc.url}"/><propertyname="username"value="${jdbc.username}"/><propertyname="password"value="${jdbc.password}"/></dataSource></environment></environments><!--加载映射文件--><mappers><mapperresource="mapper/SingerMapper.xml"/></mappers></configuration>
创建mapper接口
/**
* 查询全部
* @Param void
* @return ArraryList<Singer>
*/publicArraryList<Singer>queryAll();/**
* 按id查
* @param id
* @return Singer
*/publicSingerqueryById(Integer id);/**
* 增
* @param singer
* @return boolean
*/publicbooleansave(Singer singer);/**
* 改
* @param singer
* @return boolean
*/publicbooleanupdate(Singer singer);/**
* 删
* @param id
* @return boolean
*/publicbooleandelete(Integer id);
使用Spring整合mybatis先导入依赖
<!--spring整合mybatis--><dependency><groupId>org.mybatis</groupId><artifactId>mybatis-spring</artifactId><version>1.3.1</version></dependency>
spring框架整合mybatis需要满足的四个条件
- mapper标签的namespace = 接口全限定名
- 接口方法名 = mapper字标签的id
- 接口方法参数类型 = mapper字标签的parameterType
- 接口方法返回值类型 = mapper字标签的resultType
满足条件即可使用框架底层逻辑完成之前JDBC的数据库连接,SQL语句发送等过程。现在按照四个条件构建xml映射文件
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPEmapperPUBLIC"-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mappernamespace="com.xiaochen.mapper.SingerMapper"><!--查所有--><selectid="queryAll"resultType="singer">
select * from singer order by id desc ;
</select><!--条件查--><selectid="queryById"parameterType="int"resultType="singer">
select * from singer where id = #{id};
</select><!--增--><insertid="save"parameterType="singer">
insert into singer values (#{id},#{name},#{sex},#{pic},#{birth},#{location},#{introduction});
</insert><!--改--><insertid="update"parameterType="singer">
update singer set introduction = #{introduction} where id = #{id};
</insert><!--删--><insertid="delete"parameterType="int">
delete from singer where id = #{id};
</insert></mapper>
测试类使用Junit进行测试
导依赖
<!--Junit测试依赖--><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.11</version><scope>test</scope></dependency>
/**
* 查询操作
* @Param void
* @return
*/@TestpublicvoidqueryTest()throwsIOException{InputStream in =Resources.getResourceAsStream("mybatis.xml");SqlSessionFactory sqlSessionFactory =newSqlSessionFactoryBuilder().build(in);SqlSession session = sqlSessionFactory.openSession(true);SingerMapper mapper = session.getMapper(SingerMapper.class);ArrayList<Singer> singers = mapper.queryAll();for(Singer singer : singers){System.out.println(singer);}
session.close();}
/**
* 条件查询操作
* @Param void
* @return
*/@TestpublicvoidqueryByIdTest()throwsIOException{InputStream in =Resources.getResourceAsStream("mybatis.xml");SqlSessionFactory sqlSessionFactory =newSqlSessionFactoryBuilder().build(in);SqlSession session = sqlSessionFactory.openSession(true);SingerMapper mapper = session.getMapper(SingerMapper.class);Singer singer = mapper.queryById(63);System.out.println(singer);
session.close();}
/**
* 插入操作
* @Param void
* @return
*/@TestpublicvoidsaveTest()throwsIOException{Singer singer =newSinger();
singer.setId(64);
singer.setName("张三");
singer.setSex(1);
singer.setPic("/img/singerPic/1586091210109Sanna Nielsen.jpg");
singer.setBirth(newDate());
singer.setLocation("平顶山");
singer.setIntroduction("五音不全");InputStream in =Resources.getResourceAsStream("mybatis.xml");SqlSessionFactory sqlSessionFactory =newSqlSessionFactoryBuilder().build(in);SqlSession session = sqlSessionFactory.openSession(true);SingerMapper mapper = session.getMapper(SingerMapper.class);boolean result = mapper.save(singer);System.out.println(result);queryTest();
session.close();}
/**
* 更新操作
* @Param void
* @return
*/@TestpublicvoidupdateTest()throwsIOException{Singer singer =newSinger();
singer.setId(64);
singer.setIntroduction("歌声甜美");InputStream in =Resources.getResourceAsStream("mybatis.xml");SqlSessionFactory sqlSessionFactory =newSqlSessionFactoryBuilder().build(in);SqlSession session = sqlSessionFactory.openSession(true);SingerMapper mapper = session.getMapper(SingerMapper.class);boolean update = mapper.update(singer);System.out.println(update);queryTest();
session.close();}
/**
* 删除操作
* @Param void
* @return
*/@TestpublicvoiddeleteTest()throwsIOException{InputStream in =Resources.getResourceAsStream("mybatis.xml");SqlSessionFactory sqlSessionFactory =newSqlSessionFactoryBuilder().build(in);SqlSession session = sqlSessionFactory.openSession(true);SingerMapper mapper = session.getMapper(SingerMapper.class);boolean result = mapper.delete(64);System.out.println(result);queryTest();
session.close();}
3.3 mybatis总结
mybatis开发步骤:
- 导依赖
- 创建实体类
- 配置文件
- spring框架整合mybatis需要满足的四个条件 - mapper标签的namespace = 接口全限定名- 接口方法名 = mapper字标签的id- 接口方法参数类型 = mapper字标签的parameterType- 接口方法返回值类型 = mapper字标签的resultType
- 按照条件创建接口和映射文件
- 测试类读取配置文件创建mapper对象,调用方法
4 mybatis与jdbc的逻辑相同处
将mybatis对标jdbc可以发现,使用流程大体上是一样的,导入数据库连接依赖,创建实体类,创建持久层api方法供测试调用(mybatis将SQL抽取成了映射文件),测试类调用api并完成相应的操作。
5 mybatis-plus
mybatis-plus(简称 MP)是一个 MyBatis的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。
首先创建一个Spring Initializr模块,由于需要前后端的交互于是勾选web开发依赖
5.1 代码生成器
顾名思义,代码生成器就是用来直接生成代码的一个程序。首先导入相关依赖
<!--Mybatis-Plus生成器依赖--><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-generator</artifactId><version>3.3.1.tmp</version></dependency><!--freemarker 模板引擎(没有用原生的模板引擎)--><dependency><groupId>org.freemarker</groupId><artifactId>freemarker</artifactId><version>2.3.31</version></dependency>
创建utils包,拷贝代码生成器,需要修改的两个地方:数据库连接的数据库名、项目目录名。生成的代码需要使用lombok简化实体类开发导入相关依赖
<!--lombok简化实体类开发,如果之前没有下载过依赖的同名插件的话需要下载安装,然后重启一下idea--><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency>
运行main方法,报错java.lang.ClassNotFoundException:com.mysql.jdbc.Driver,没有驱动,需要导入数据库连接依赖
<!--数据库连接驱动--><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.32</version></dependency>
生成成功之后,mapper层的接口上加@mapper和@Repository注解,简单说一下service的方法都从哪里来,也就是Ctrl进源码看他继承方法内部又实现的接口里定义了后面需要使用到的所有方法。
5.2 配置数据库
导入mybatis-plus的场景启动器
<!--mybatis-plus的场景启动器 内置了jdbc的启动器无需重复引用--><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.5.1</version></dependency>
修改配置文件的拓展名为yml,配置数据库的相关信息
server:# 修改后端项目运行时的端口号信息port:8888spring:# 配置数据源信息datasource:url: jdbc:mysql://localhost:3306/music
username: root
password:123456driver-class-name: com.mysql.jdbc.Driver
type: com.alibaba.druid.pool.DruidDataSource
上面使用到了pool(池子),数据库连接池也就是数据源,所谓的数据库连接池从字面意思上翻译就是将数据库连接放到一个池子里。相比之前的好处就是只需要创建一次连接,后面的都直接用不用一次次创建。数据源使用到了Druid的,需要导入Druid的依赖
<!--整合druid的数据源--><dependency><groupId>com.alibaba</groupId><artifactId>druid-spring-boot-starter</artifactId><version>1.1.17</version></dependency>
5.3 开始mp的编码
controller层的代码编写
service的crud方法接口的官方文档:https://baomidou.com/
@AutowiredprivateSingerService service;
@RequestMapping("/queryAll")publicList<Singer>queryAll(){// 先演示普通的查询,再逆序查询returnnull;}@RequestMapping("/queryByName")publicList<Singer>queryByName(String name){// 使用lambdaQueryWrapper 的like方法模糊查询// list方法查询到所有的符合条件值并返回returnnull;}@PostMapping("/save")publicStringsave(HttpServletRequest request){Singer singer =newSinger();
singer.setId(64).setName(request.getParameter("name")).setSex(Integer.parseInt(request.getParameter("sex"))).setPic(request.getParameter("pic")).setBirth(newDate()).setLocation(request.getParameter("location")).setIntroduction(request.getParameter("introduction"));// 调用save方法,并判断返回值的正误,返回前端对应的字符串returnnull;}@RequestMapping("/update")publicStringupdate(int id,String introduction){// 使用eq和set去设置条件构造器// 调用update传入条件构造器,并判断返回值的正误,返回前端对应的字符串returnnull;}@RequestMapping("/delete")publicStringdelete(Integer id){// 调用removeById方法直接删returnnull;}
查询所有的方法
查询所有
http://localhost:8888/singer/queryAll
@RequestMapping("/queryAll")publicList<Singer>queryAll(){LambdaQueryWrapper<Singer> lambdaQueryWrapper =newLambdaQueryWrapper<>();
lambdaQueryWrapper.orderByDesc(Singer::getId);List<Singer> singers = service.list(lambdaQueryWrapper);return singers;}
按照id查询
按照id查询
http://localhost:8888/singer/queryByName?name=王
@RequestMapping("/queryByName")publicList<Singer>queryByName(String name){LambdaQueryWrapper<Singer> lambdaQueryWrapper =newLambdaQueryWrapper<>();
lambdaQueryWrapper.like(Singer::getName,name);List<Singer> singers = service.list(lambdaQueryWrapper);return singers;}
url的请求之后,尝试运用前端的form表单做添加操作,创建一个名为index的html文件,复制html内容
导入thymeleaf引擎的场景启动器
<!--thymeleaf引擎的场景启动器--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-thymeleaf</artifactId></dependency>
编写添加记录的方法
@PostMapping("/save")publicStringsave(HttpServletRequest request){Singer singer =newSinger();
singer.setId(64).setName(request.getParameter("name")).setSex(Integer.parseInt(request.getParameter("sex"))).setPic(request.getParameter("pic")).setBirth(newDate()).setLocation(request.getParameter("location")).setIntroduction(request.getParameter("introduction"));boolean save = service.save(singer);String result = save ==true?"添加成功":"添加失败";return result;}
修改方法
修改
http://localhost:8888/singer/update?id=64&introduction=歌声甜美
@RequestMapping("/update")publicStringupdate(int id,String introduction,HttpServletRequest request){LambdaUpdateWrapper<Singer> lambdaUpdateWrapper =newLambdaUpdateWrapper<>();
lambdaUpdateWrapper.eq(Singer::getId,id).set(Singer::getIntroduction,introduction);boolean update = service.update(lambdaUpdateWrapper);String result = update ==true?"修改成功":"修改失败";return result;}
删除方法
删除
http://localhost:8888/singer/delete?id=64
@RequestMapping("/delete")publicStringdelete(Integer id){boolean remove = service.removeById(id);String result = remove ==true?"删除成功":"删除失败";return result;}
5.4 mp总结
mp的使用步骤:
- 代码生成器的使用(导入依赖,修改配置,运行main方法)
- 导入场景启动器依赖,配置配置文件
- 借助mp的开发文档使用方法完成业务编写
版权归原作者 扎哇太枣糕 所有, 如有侵权,请联系我们删除。