湖南省建设厅政务中心网站,汽车网站开发与实现 论文,正规seo需要多少钱,网站重定向怎么做目录#xff1a;
一、Mybatis是什么
三个映射关系如下图#xff1a;
二、mybatis的使用#xff08;前置工作简单案例#xff09;
第一步#xff1a;导入MAVEN依赖
第二步#xff1a; 在spring项目当中新建数据源
第三步#xff1a;新建一个实体类#xff0c;是和…目录
一、Mybatis是什么
三个映射关系如下图
二、mybatis的使用前置工作简单案例
第一步导入MAVEN依赖
第二步 在spring项目当中新建数据源
第三步新建一个实体类是和数据库进行交互的实体类
第四步新建一个mapper文件夹src目录下面)
第五步在mybatis下面新建一个UserMapper.xml的文件夹
第六步在两个mapper标签之间编写查询的sql语句
resultType属性用于标记返回的是什么类型同时指定返回的对象是哪个
第七步在其他类当中调用getAll方法
总结一下mybatis的执行流程
三、复杂操作
3.1根据id查询用户对象
第一步在UserMapper当中编写一个根据id查询用户对象的方法
第二步在配置文件当中编写查询的方法
mybatis两种占位符$和#的区别
3.2把一个对象作为参数进行传递
第一步在UserMapper当中新建一个以User为参数的方法
第二步在配置文件当中直接获取user的属性
第三步进行测试
3.3删改的操作
第一步在mapper层编写增删改的方法
第二步在xml文件当中配置增删改的方法(无需返回值)
第三步 编写测试的方法
3.4新增数据操作(以新增一个User对象为例)
第一步在mapper当中新建一个方法
第二步在xml文件当中配置一个新增方法
第三步新建一个方法用于测试
四、springBoot单元测试
4.1添加springBoot的测试依赖
4.2生成需要测试方法的测试等价类
第一步右键需要测试的方法然后生成get和set方法
第二步为测试类添加SpringBootTest注解
第三步在测试类当中使用Autowired来获取bean进行测试
如何避免测试的数据影响正常数据库的数据(Test Transactional)
一、Mybatis是什么
mybatis是一款优秀的持久层框架主要与数据库层也就是mysql层打交道的它支持自定义sql、存储过程以及数据库对应到实体的映射等等。
也就是把数据库当中的每一行记录与对象建立起来映射的关系。 三个映射关系如下图
数据库当中的属性Java程序当中的属性数据库表(table)类(class记录(record)对象(object)字段(field)对象的属性(attribute) 二、mybatis的使用前置工作简单案例
第一步导入MAVEN依赖 dependencygroupIdorg.mybatis.spring.boot/groupIdartifactIdmybatis-spring-boot-starter/artifactIdversion2.3.0/version/dependencydependencygroupIdmysql/groupIdartifactIdmysql-connector-java/artifactId/dependency第二步 在spring项目当中新建数据源
下面我选择的是application.properties文件配置的
需要在resource目录下面新建一个文件夹文件夹的名称被命名为:mybatis。
后续的xml配置文件就需要在这个mybatis文件夹当中编写了。 配置文件的内容
spring.datasource.urljdbc:mysql://localhost:3306/my_blog_system?characterEncodingutf8useSSLfalse
spring.datasource.usernameroot
spring.datasource.password20021111aA#
spring.datasource.driver-class-namecom.mysql.cj.jdbc.Driver
############设置mybatis的保存路径
mybatis.mapper-locationsclasspath:/mybatis/*Mapper.xml 第三步新建一个实体类是和数据库进行交互的实体类
在这个类当中需要满足上面的一一对应的关系。
/*** author 25043*/
Data
public class User {private int id;private String username;private String password;}第四步新建一个mapper文件夹src目录下面) 这个文件夹用于存放和数据库进行直接交互的实体类但是这些类一般都是接口我们只需要在这些接口当中定义一些方法即可。 例如在下面这个类当中定义一个查询所有用户的方法
/*** 使用这个注解标记这个类是一个持久层的类* author 25043*/
Mapper
public interface UserMapper {/*** 查询所有用户* 查询用户return*/ListUser getAll();
} 第五步在mybatis下面新建一个UserMapper.xml的文件夹
在这个文件夹当中黏贴下面的内容
?xml version1.0 encodingUTF-8?
!DOCTYPE mapper PUBLIC -//mybatis.org//DTD Mapper 3.0//EN http://mybati
s.org/dtd/mybatis-3-mapper.dtd
mapper namespacecom.example.springLearning.Mapper.UserMapper/mapper
需要注意的是mapper namespace这个标签的内容为需要返回的User对象的全限定名。 第六步在两个mapper标签之间编写查询的sql语句
其中select标签为查询标签其余的还有update标签用于修改)指定的id为查询的方法
以及insert标签用于新增。
mapper namespacecom.example.springLearning.Mapper.UserMapperselect idgetAll resultTypecom.example.springLearning.Entity.Userselect *from user/select
/mapper resultType属性用于标记返回的是什么类型同时指定返回的对象是哪个 第七步在其他类当中调用getAll方法
需要注意的是其他类调用的时候一定要确保
Service
public class UserServiceImpl implements UserService {Autowiredprivate UserMapper userMapper;public ListUser getAll(){return userMapper.getAll();}
} 总结一下mybatis的执行流程 三、复杂操作
3.1根据id查询用户对象
第一步在UserMapper当中编写一个根据id查询用户对象的方法 /*** 根据id查询用户* 用户的idparam id* 单个实体用户return*/User getUserById(Param(id) Integer id); 第二步在配置文件当中编写查询的方法 select idgetUserById resultTypecom.example.springLearning.Entity.Userselect *from user where userId${id};/select mybatis两种占位符$和#的区别
占位符主要区别优缺点${}直接替换相当于直接拼接 ①不可以解决sql注入 ②当查询的数据类型需要手动添加引号的时候会报错因为是直接拼接数据 #{}占位符也就是?进行替换 ①可以解决sql注入 ②无需手动添加引号。 3.2把一个对象作为参数进行传递
第一步在UserMapper当中新建一个以User为参数的方法
/*** 处理用户登录* 用户对象param user* 用户对象return*/User login(User user); 第二步在配置文件当中直接获取user的属性 第三步进行测试 Testvoid login() {User usernew User();user.setUsername(zhangSan);user.setPassword(123);User userGetuserMapper.login(user);System.out.println(userGet);} 3.3删改的操作
第一步在mapper层编写增删改的方法 /*** 删除user* user对象param user* 删除return*/Integer delete(User user);
注意这里的返回值一定要设置为包装类型不可以是基本数据类型 第二步在xml文件当中配置增删改的方法(无需返回值)
和查询操作类似但是无需在标签当中指定resultType。 select iddeletedelete from user where username#{username};/select 第三步 编写测试的方法
Testvoid testInsert(){User usernew User();user.setUsername(lisi);userMapper.delete(user);} 3.4新增数据操作(以新增一个User对象为例)
第一步在mapper当中新建一个方法
Integer insert(User user); 第二步在xml文件当中配置一个新增方法
select idinsertinsert into user(username,password) values(#{username},#{password});
/select 第三步新建一个方法用于测试
public int insert(User user){return userMapper.insert(user);
} 四、springBoot单元测试
4.1添加springBoot的测试依赖
dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-test/artifactIdscopetest/scope/dependency 4.2生成需要测试方法的测试等价类
第一步右键需要测试的方法然后生成get和set方法 然后就可以看到生成了测试的目录并且在测试的目录下面生成了这样的代码 第二步为测试类添加SpringBootTest注解 第三步在测试类当中使用Autowired来获取bean进行测试
SpringBootTest
class UserServiceImplTest {Autowiredprivate UserMapper userMapper;Testvoid getAll() {}Testvoid getUserById() {User useruserMapper.getUserById(2);System.out.println(user);}
} 如何避免测试的数据影响正常数据库的数据(Test Transactional)
只需要在一个测试的方法上面标注Test注解加上Transactional两个注解即可。
Test
Transactional
void testInsert(){User usernew User();user.setUsername(张三);userMapper.delete(user);}
这样子即使插入了数据也会在方法调用结束之后回滚事物。