文章目录
一、SpringBoot整合Mybatis步骤
1. 导入依赖
- 必选项
- 数据源(MySQL)
- 导入SpringBoot整合的持久层框架(Mybatis)
- 可选项
- lombok(提供简单的实体类常用方法,日志等功能)
2. 编写配置文件
- 数据库连接配置
- Mybatis映射文件地址/路径绑定
3. 编写POJO实体类用于封装数据
- 必写项
- entity(与单表对应)
- 选写项
- vo(数据库中查询出来的信息)
- dto(前端接受过来的数据)
4. 编写持久层接口及抽象方法
5. 将持久层接口交给Mybatis管理
下列情况任选其一即可:
- 在对应的
XXXMapper
接口上添加@Mapper
注解 - 在配置类上添加
@MapperScan("持久层接口所在包的全路径名")
- 使用现有的配置类 SpringBoot项目的启动类
XXXSpringBootApplication
- 自己创建一个配置类
- 使用现有的配置类 SpringBoot项目的启动类
6. 编写映射文件(需要和配置文件中映射文件的路径保持一致)
7. 编写测试类及测试方法
二、简单的增删改查业务
此增删改查业务跳过上述 SpringBoot整合Mybatis步骤
中的 1,2,3 等步骤,直接从 4. 编写持久层接口及抽象方法
开始,前面的步骤可以参考
Mybatis入门(五)SpringBoot整合Mybatis_1
有具体的讲解说明及详细步骤
项目目录结构:
1. 新增
- 业务:增加用户数据
- 编写持久层接口及抽象方法
public interface UserMapper { /** * @param user 参数:添加数据的对象 * @return int 返回值类型:表示影响的行数 * 方法名可以为:insertXXX / saveXXX */ int insertUser(User user); }
- 将持久层接口交给Mybatis管理(写一次即可,下面其他的功能不需要再重复了)
使用方式:启动类添加@MapperScan
注解,这样就不需要在每个持久层XXXMapper
接口上再添加@Mapper
注解了@SpringBootApplication @MapperScan("com.cy.mybatis.mapper") // 扫描持久层所在包的路径 public class MybatisDemo01Application { public static void main(String[] args) { SpringApplication.run(MybatisDemo01Application.class, args); } }
- 编写映射文件
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <!-- namespace:绑定/映射的对应接口的全路径名 --> <mapper namespace="com.cy.mybtis.mapper.UserMapper"> <!-- id:绑定/映射的对应方法的方法名称 keyProperty:将取出的主键自增的值赋值给实体类中的 id 字段,与 useGeneratedKeys 搭配使用 useGeneratedKeys:是否取出数据库中主键自增的主键,默认值为 false,与 keyProperty 搭配使用 --> <!-- insert into user values(null,ls,"123",李四) --> <insert id="insertUser" keyProperty="id" useGeneratedKeys="true"> insert into user values(#{id},#{username},#{password},#{nickname}) </insert> </mapper>
- 编写测试类及测试方法
@SpringBootTest public class UserMapperTests { @Autowired UserMapper userMapper; @Test void testInsertUser() { User user = new User(); user.setId(null); user.setUsername("ls"); user.setPassword("123"); user.setNickname("李四"); int rows = userMapper.insertUser(user); System.out.println("rows = " + rows); // rows = 1 响应的行数 System.out.println("id = " + user.getId()); // id = 1 插入的数据对应的id值 } }
2. 查询
-
业务:
- 业务1:根据用户名查询用户对象
- 业务2:查询所有用户对象
-
编写持久层接口及抽象方法
/** * 根据用户名查询用户信息 * @param username 用户名 * @return User 用户对象 * 方法名可以为:findUserByUsername / selectUserByUsername */ User findUserByUsername(String username); /** * 查询用户对象列表 * @return List<User> 用户列表数据/用户集合数据 * 方法名可以为:getUsers / getAllUser */ List<User> getUsers();
-
编写映射文件
<!-- select * from user where username = 'ls' --> <select id="findUserByUsername" resultType="com.cy.mybtis.pojo.entity.User"> select * from user where username = #{username} </select> <!-- resultType(结果类型) 查询中必须包含resultType或者resultMap属性 如果返回的是一个对象,resultType的值为对应实体类的路径 如果返回的是一个集合,resultType的值为对应泛型中类型的路径 --> <!-- select * from user --> <select id="getUsers" resultType="com.cy.mybtis.pojo.entity.User"> select * from user </select>
-
编写测试类及测试方法
@Test void testFindUserByUsername() { User user = userMapper.findUserByUsername("ls"); System.out.println(user); } @Test void testGetUsers() { List<User> users = userMapper.getUsers(); System.out.println(users); }
3. 修改
- 业务:根据用户id修改用户信息
- 编写持久层接口及抽象方法
/** * 根据id修改用户信息 * @param user 用户信息 * @return int 影响的行数 * 方法名可以为:updateUsernameById */ int updateUsernameById(User user);
- 编写映射文件
<!-- 动态SQL标签:<if> 经常使用的场景:where子句中,新增操作中,修改操作中 这里以修改为例:通过判断参数值是否为空来决定是否将SQL字段加入到SQL语句中: --> <!-- update user set username = ? where id= ? update user set username=#{username},password=#{password},nickname=#{nickname} where id=#{id} --> <update id="updateUsernameById"> update user <set> <if test="username != null">username=#{username},</if> <if test="password != null">password=#{password},</if> <if test="nickname != null">nickname=#{nickname}</if> </set> where id=#{id} </update>
- 编写测试类及测试方法
@Test void testUpdateUsernameById() { User user = new User(); user.setId(1); user.setUsername("ww"); user.setNickname("王五"); int rows = userMapper.updateUsernameById(user); System.out.println("rows = " + rows); // 影响的行数 }
4. 删除
-
业务:根据用户id删除用户对象
-
编写持久层接口及抽象方法
/** * 根据用户id删除用户对象 * @param id 用户id * @return int 影响的行数 * 方法名可以为:deleteUserById */ int deleteUserById(int id);
-
编写映射文件
<!-- delete from user where id=? --> <delete id="deleteUserById"> delete from user where id=#{id} </delete>
-
编写测试类及测试方法
@Test void testDeleteUserById() { int id = 6; int rows = userMapper.deleteUserById(id); System.out.println("rows = " + rows); }
总结
-
增 删 改
业务一般返回一个int
类型,返回值为影响的行数
-
查
业务xml文件中必须加入resultType
或者resultMap
属性 -
增
业务一般方法的命名insertXXX
或者saveXXX
-
删
业务一般方法的命名deleteXXXByXXX
或者removeXXXByXXX
-
改
业务一般方法的命名updateXXXByXXX
-
查
业务一般方法的命名selectXXXByXXX
或者findXXXByXXX
- 查询单个对象方法的命名可以使用
getXXX
- 查询多个对象方法的命名可以使用
listXXX
- 获取统计值的方法的命名使用
countXXX
- 查询单个对象方法的命名可以使用
-
测试方法命名规则:
- 类名:测试的为架构中的那个层次,哪个对应的接口,就进行对应的命名
xxxMapperTests
、xxxServiceTests
,如UserMapperTests
- 方法名:test + 对应测试的方法名:
testxxx
,如testInsertUser
、testSelectUserById
- 类名:测试的为架构中的那个层次,哪个对应的接口,就进行对应的命名
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/107605.html