旅游政务网站建设中国农业工程建设协会网站
- 作者: 五速梦信息网
- 时间: 2026年04月20日 10:28
当前位置: 首页 > news >正文
旅游政务网站建设,中国农业工程建设协会网站,网站建设有模板吗,上海做网站吧说明#xff1a;MyBatis是作用于三层架构开发#xff0c;数据访问层#xff08;Data Access Object#xff09;的框架#xff0c;用于访问数据库#xff0c;对数据进行操作。
一、环境搭建
首先#xff0c;创建一个SpringBoot模块#xff0c;然后把MyBatis的环境搭建…说明MyBatis是作用于三层架构开发数据访问层Data Access Object的框架用于访问数据库对数据进行操作。
一、环境搭建
首先创建一个SpringBoot模块然后把MyBatis的环境搭建起来。因为MyBatis是作用于Dao层的故先省去Service层重点关注Dao层中与数据库的交流。
1创建Springboot模块
我这里是手动创建SpringBoot模块方式在idea中创建一个SpringBoot模块参考http://t.csdn.cn/RJ2gu
pom.xml文件中添加的继承和依赖 2添加MyBatis依赖
在SpringBoot模块基础上添加MyBatis依赖和数据库的配置文件
添加MyBatis依赖 添加数据库的配置文件application.properties
放在 src/main/resources 目录下注意 数据库链接数据库端口号、数据库名、用户名和密码
3添加其他依赖
启动项目我们还需要一些额外的依赖lombok、druid、test方便开发和测试另外数据库的配置文件也添加一些额外配置
pom.xml文件
lomhok可以帮助我们一键生成javaBean的set()、get()、toString()方法
druid使用阿里巴巴提供的连接池
test方便测试功能
数据库的配置文件application.properties
开启驼峰支持Java和MySQL的命名规范不同如createTime对应的是MySQL中的create_time开启此设置可以自动匹配
SQL日志可以将执行的SQL语句打印在控制台中方便我们排查SQL语句是否执行错误 4准备数据库
创建数据库注意数据库名和上面application.properties中配置的数据库名要一致
创建表添加一些数据
create database mybatis;use mybatis;create table tb_stu(id int auto_increment primary key comment 序列号,name varchar(10) comment 姓名,gender varchar(2) comment 性别,age tinyint comment 年龄,create_time date comment 创建日期
) comment 学生表;insert into tb_stu values (null, 加缪, 男, 20, null),(null, 萨特, 男, 25, null),(null, 陀思妥耶夫斯基, 男, 30, 2023-06-08),(null, 阿加莎克里斯蒂,女,27, null);5创建类
创建学生类Student
Data、NoArgsConstructor、AllArgsConstructor相当于自动为类添加了set()、get()、toString()、无参和全参构造方法
package com.essay.domain;import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;import java.time.LocalDate;/*** 学生类/
Data
NoArgsConstructor
AllArgsConstructor
public class Student {private Integer id;private String name;private String gender;private Integer age;private LocalDate createTime;
}创建Mapper类
Mapper是Dao层中MyBatis的取名方式也是Dao层的具体表现之一。
package com.essay.mapper;import org.apache.ibatis.annotations.Mapper;Mapper
public interface StuMapper {/** 访问数据库处理数据/}创建启动类Start
package com.essay;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;SpringBootApplication
public class Start {public static void main(String[] args) {SpringApplication.run(Start.class, args);}
}
创建测试类MyTest模拟Controller层。本来应该注入Service层依赖因为是介绍MyBatis我这里直接注入MapperDao层依赖
package com.essay;import com.essay.mapper.StuMapper;
import org.springframework.boot.test.context.SpringBootTest;SpringBootTest
public class MyTest {// 注入Mapper依赖Autowiredprivate StuMapper stuMapper;// 接收前端请求响应数据
}另外还需要注意两点
a. 测试类的目录要与main中的启动类平行 b. 测试类的类名不要取名为Test因为测试的注解也是TestTest
至此环境搭建完成可以开始紧张又刺激的开发了。
二、注解方式
注解方式是将对数据库进行操作的SQL语句写在Dao层的各个方法上。
1查找所有
在MyTestController层中接收请求
SpringBootTest
public class MyTest {// 注入Mapper依赖Autowiredprivate StuMapper stuMapper;/** 查找所有/Testpublic void findAll(){ListStudent list stuMapper.findAll();System.out.println(list);}
}在StuMapperDao层中访问数据库返回数据
Mapper
public interface StuMapper {/** 查找所有*/Select(select * from tb_stu)ListStudent findAll();
}2添加数据
在MyTestController层中接收请求
这里是我手动创建的对象在正式业务中数据会由前端传过来封装成一个对象需要使用RequestParam注解另外对象的创建时间会在Service层中设置之后再传至Dao层写入数据库。 /*** 添加记录/Testpublic void insertStu(){Student s new Student();s.setName(伏尔泰);s.setGender(男);s.setAge(40);s.setCreateTime(LocalDate.now());stuMapper.insertStu(s);}在StuMapperDao层中访问数据库添加数据
#{}表示对象s中的对应的属性值所以一定要注意#{}里面的名称是对象里面的属性名而不是数据库里面的字段名 /** 添加记录/Insert(insert into tb_stu(name,gender,age,create_time) value(#{name},#{gender},#{age},#{createTime}))void insertStu(Student s);3修改数据
在MyTestController层中接收请求同样具体业务中被修改的对象会被前端传过来我这里是手动创建模拟修改 /** 根据ID修改记录/Testpublic void updateStu(){Student s new Student();s.setId(1);s.setName(加缪——修改后);stuMapper.updateStu(s);}在StuMapperDao层中访问数据库修改数据 /** 修改记录/Update(update tb_stu set name#{name},gender#{gender},age#{age} where id#{id})void updateStu(Student s);这里问题出现了除了name其他字段也被修改成了。这是因为传进来的对象仅设置了name其他属性未设置默认是null。那有没有一种方案修改时判断对象的属性值是否为空不为空说明需要修改此字段则修改数据库中的数据为空说明不需要修改此字段那么数据库中就不修改在xml方式中可以解决此问题在修改之前根据ID把数据库中的对象值先找出来然后在Service层做逻辑判断是否也可以解决。 4删除数据
在MyTestController层中接收请求我这里模拟删除ID是为1的记录 /** 根据ID删除记录/Testpublic void deleteStu(){Integer id 1;stuMapper.delete(id);}在StuMapperDao层中访问数据库删除数据 /** 根据ID删除记录*/Delete(delete from tb_stu where id#{id})void delete(Integer id);小结
以上展现了使用注解方式对数据库进行查找所有、添加数据、根据ID修改和删除操作如果还需要做条件查找、删除所有记录等功能可以先写好SQL语句根据SQL语句所需要的参数再设计好Controller层的代码。
三、xml方式
除了注解方式MyBatis还提供了xml的方式将方法对应的SQL语句配置到xml文件中通过方法调用实现对数据操作。首先创建好Mapper类对应的xml文件。
创建xml文件
创建xml文件需要注意以下两点
a. xml文件需要和Mapper类平行同包同名 b. 在Resource文件夹中创建多级目录不能使用点.要用斜杠/ 以上两点至关重要这是xml文件与Mapper类建立联系的过程联系建立不起来程序跑不起来。
文件创建好之后首先在xml文件开头添加约束不要手敲建议从官网复制过来https://mybatis.net.cn/getting-started.html 约束添加后敲一个mapper标签属性namaspace为Mapper类的全类名。同样也不要手敲点击类文件快捷键ctrlaltshiftc复制粘贴过来。 1查找所有
在xml文件中配置查找所有方法
StuMapper.xml文件
?xml version1.0 encodingUTF-8 ?
!DOCTYPE mapperPUBLIC -//mybatis.org//DTD Mapper 3.0//ENhttp://mybatis.org/dtd/mybatis-3-mapper.dtdmapper namespacecom.essay.mapper.StuMapper!–1.查找所有–select idfindAll resultTypecom.essay.domain.Studentselect * from tb_stu;/select/mapperStuMapper类前面写的注解删掉 /*** 查找所有/ListStudent findAll();需要注意以下两点
a. xml文件中标签id要与StuMapper类中的对应的方法名一致
b. resultType为返回类型即返回的数据需要封装为对象的对象的类全名。 2添加数据
在xml文件中配置添加数据方法 !–2.添加数据–insert idinsertStuinsert into tb_stu(name,gender,age,create_time) value(#{name},#{gender},#{age},#{createTime})/insertStuMapper类前面写的注解删掉 /** 添加记录/void insertStu(Student s);MyTest测试类 /** 添加记录*/Testpublic void insertStu(){Student s new Student();s.setName(卢梭);s.setGender(男);s.setAge(20);s.setCreateTime(LocalDate.now());stuMapper.insertStu(s);}3修改数据
前文说过使用注解方式修改数据的问题修改指定字段的数据因为传入Dao层的是一个新建的javaBean对象未设置的属性是null修改数据库时会覆盖原数据。导致欲修改的字段修改成功未设置的字段因为修改被置空。
使用xml方式可以解决这个问题。使用if标签判断传入的属性值是否为空不为空说明是前端请求需要修改的字段就修改为空说明是前端不需要修改的字段就不修改。
StuMapper.xml文件注意不要漏掉最后的where语句 !–3.修改数据–update idupdateStuupdate tb_stusetif testname!null and name! name#{name},/ifif testgender!null and gender! gender#{gender},/if/因为age是Integer类型仅判断不为null就行下面的时间格式也是/if testage!null age#{age},/ifif testcreateTime!null create_Time#{createTime},/if/setwhere id#{id}/updateStuMapper类前面写的注解删掉 /*** 修改记录/void updateStu(Student s);MyTest测试类测试只修改ID为1的姓名字段 /** 根据ID修改记录/Testpublic void updateStu(){Student s new Student();s.setId(1);s.setName(加缪——修改后);stuMapper.updateStu(s);}执行程序达到了预期结果。 需要注意以下两点
a. 不要在set标签里面写注释程序执行时会把注释也当做SQL语句的内容的所以程序会报错 b. set标签里面的每一个修改语句末尾都要加一个英文逗号,
4删除数据
StuMapper.xml文件 !–4.删除数据–delete iddeleteStudelete from tb_stu where id#{id}/deleteStuMapper类前面写的注解删掉 /** 根据ID删除记录/void deleteStu(Integer id);MyTest测试类测试删除ID为1的记录 /** 根据ID删除记录*/Testpublic void deleteStu(){Integer id 1;stuMapper.deleteStu(id);}小结
使用xml方式的where条件查找、set、if标签可以完成一些复杂的SQL语句另外使用include标签可以将重复的SQL语句抽取出来给其他的语句复用。
如我们查询所有语句使用全字段id,name,gender,age,create_time比使用*效率高我们就可以把这部分抽出来。 !–定义SQL片段–sql idselectAllselect id,name,gender,age,create_time/sql!–1.查找所有–select idfindAll resultTypecom.essay.domain.Studentinclude refidselectAll/includefrom tb_stu/select需要注意写在sql片段内的SQL语句末尾不要加分号建议xml内的所有语句末尾都不要加分号。因为分号表示语句结束加了分号被其他操作引用时其他语句操作都会失效。
总结
1如果执行过程中出现以下异常排查方向如下
空指针异常1检查数据库配置文件2检查依赖注入和控制反转相关的注解
SQL异常检查注解和xml文件中的SQL语句是否有错误
2关于注解方式和xml方式的选择在MyBatis中文官网https://mybatis.net.cn/getting-started.html中有段话值得参考。
- 上一篇: 旅游微信网站建设网站要放备案号吗
- 下一篇: 旅游资源网站建设的功能及内容广告公司服务方案
相关文章
-
旅游微信网站建设网站要放备案号吗
旅游微信网站建设网站要放备案号吗
- 技术栈
- 2026年04月20日
-
旅游网站做精准营销的建站之星怎么使用
旅游网站做精准营销的建站之星怎么使用
- 技术栈
- 2026年04月20日
-
旅游网站制作代码施工企业部门目标责任书
旅游网站制作代码施工企业部门目标责任书
- 技术栈
- 2026年04月20日
-
旅游资源网站建设的功能及内容广告公司服务方案
旅游资源网站建设的功能及内容广告公司服务方案
- 技术栈
- 2026年04月20日
-
旅游最好的网站建设最新网站建设
旅游最好的网站建设最新网站建设
- 技术栈
- 2026年04月20日
-
旅游最好的网站建设做网站怎么买服务器吗
旅游最好的网站建设做网站怎么买服务器吗
- 技术栈
- 2026年04月20日
