当前位置: 首页 > news >正文

76、SpringBoot 整合 MyBatis------使用 sqlSession 作为 Dao 组件(就是ssm那一套,在 xml 写sql)

就是 ssm 那套,在xml 上面写sql

★ 基于SqlSession来实现DAO组件的方式

- MyBatis提供的Starter会自动在Spring容器中配置SqlSession(其实SqlSessionTemplate实现类)、并将它注入其他组件(如DAO组件)- DAO组件可直接调用SqlSession的方法来操作数据库。- SqlSession调用insert()、update()、delete()、selectList()、selectOne()执行SQL语句时,如果SQL语句中没有占位符参数,就只要传入第1个参数——该参数代表要执行的SQL语句;如果要执行的SQL语句中带一个占位符参数,那就传入第2个参数——该参数用于为SQL语句中的占位符参数设置值 。 【无论是用insert、update、delete、selectXxx,第一个参数总是指定要执行的SQL语句的名字】。

▲ 开发方式

   (1) 定义映射的对象类,非常普通的POJO,甚至无需任何注解。(2)定义DAO接口。(3)定义DAO实现类,该实现类使用SqlSession的方法来操作数据库。(4)使用XML Mapper文件来定义SQL语句、并为SQL语句指定名字。(5)配置XML Mapper文件的加载路径。# 指定MyBatis的XML Mapper的加载路径mybatis.mapper-locations=classpath*:org/crazyit/app/dao/*.xml# 指定为org.crazyit.app.domain下的所有类指定别名,别名规则是类名首字母小写mybatis.type-aliases-package=org.crazyit.app.domain

POJO 即 Plain Old Java Object 就是一个普通,平凡的Java对象。
POJO(Plain Old Java Object)是指普通的Java对象,它是一个简单的、基本的Java类,没有任何特殊要求或限制。POJO类通常只包含私有字段、公共访问方法(getter和setter)以及一些自定义的方法。

代码演示:

就是 ssm 那套,在xml 上面写sql
这个没什么好说的,就是比较旧的mybatis

User 类

在这里插入图片描述

UserDao 接口

在这里插入图片描述

UserDaoImpl 实现类

在这里插入图片描述
在这里插入图片描述

唯一注意一点的就是:如图
该方法: List selectList(String var1, Object var2); 参数是一个 Object,所以如果有多个参数要传给 selectList , key可以使用 Map 包起来
在这里插入图片描述

UserMapper.xml

命名空间对应的时候UseDao
在这里插入图片描述

创建和UserDao对应的Mapper文件,用来写sql,这个idea版本可以这样快速创建
在这里插入图片描述

UserDaoTest

测试类
在这里插入图片描述

application.properties

在这里插入图片描述

完整代码:

User

package cn.ljh.app.domain;import lombok.Data;//普通的java类
@Data
public class User
{private Integer id;private String name;private String password;private int age;public User(){}public User(Integer id, String name, String password, int age){this.id = id;this.name = name;this.password = password;this.age = age;}@Overridepublic String toString(){return "User{" +"id=" + id +", name='" + name + '\'' +", password='" + password + '\'' +", age=" + age +'}';}
}

UserDao

package cn.ljh.app.dao;
import cn.ljh.app.domain.User;
import org.apache.ibatis.annotations.*;
import java.util.List;public interface UserDao
{//增int save(User user);//删int deleteById(Integer id);//根据名字模糊查询List<User> findByNameLike(String namePattern);//根据年龄区间进行范围查询List<User> findByAgeBetween(@Param("startAge") int startAge, @Param("endAge") int endAge);}

UserDaoImpl

package cn.ljh.app.dao.impl;import cn.ljh.app.dao.UserDao;
import cn.ljh.app.domain.User;
import org.apache.ibatis.session.SqlSession;
import org.springframework.stereotype.Repository;import java.util.List;
import java.util.Map;//作为dao组件,把这个类交给容器管理
@Repository
public class UserDaoImpl implements UserDao
{private final SqlSession sqlSession;//通过有参构造器进行依赖注入public UserDaoImpl(SqlSession sqlSession){this.sqlSession = sqlSession;}//UserMapper.xml 的命名空间private final static String namespace = "cn.ljh.app.dao.UserDao.";//增@Overridepublic int save(User user){//insert 、 delete 、 update 、select 等方法的第一个参数一直都是 SQL 语句的 ID ,就是命名空间int insert = sqlSession.insert(namespace + "save", user);return insert;}//删@Overridepublic int deleteById(Integer id){int delete = sqlSession.delete(namespace + "deleteById", id);return delete;}//根据名字模糊查询@Overridepublic List<User> findByNameLike(String namePattern){List<User> users = sqlSession.selectList(namespace + "findByNameLike", namePattern);return users;}//根据年龄区间进行范围查询@Overridepublic List<User> findByAgeBetween(int startAge, int endAge){//该方法:<E> List<E> selectList(String var1, Object var2); 参数是一个 Object//所以如果有多个参数要传给 selectList , key可以使用 Map 包起来List<User> users = sqlSession.selectList(namespace + "findByAgeBetween",Map.of("startAge", startAge, "endAge", endAge));return users;}
}

UserMapper.xml

<?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">
<mapper namespace="cn.ljh.app.dao.UserDao"><insert id="save">insert into user_inf values (null , #{name} , #{password} , #{age})</insert><delete id="deleteById">delete from user_inf where user_id = #{id}</delete><select id="findByNameLike" resultType="user">select user_id as id , name , password , age from user_inf where name like #{namePattern}</select><select id="findByAgeBetween" resultType="cn.ljh.app.domain.User">select user_id as id ,name , password , age from user_inf where age between #{startAge} and #{endAge}</select>
</mapper>

UserDaoTest

package cn.ljh.app;import cn.ljh.app.dao.UserDao;
import cn.ljh.app.domain.User;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.CsvSource;
import org.junit.jupiter.params.provider.ValueSource;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;import java.util.List;@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.NONE)
public class UserDaoTest
{@Autowiredprivate UserDao userDao;//添加user对象@ParameterizedTest@CsvSource({"aa,xxx,2", "bb,xxx,3"})public void testSave(String name, String password, int age){//没有id,save就是添加int save = userDao.save(new User(null, name, password, age));System.err.println(save);}//根据id删除用户对象@ParameterizedTest@ValueSource(ints = {17})public void testDelete(Integer id){userDao.deleteById(id);}//根据名字模糊查询@ParameterizedTest@ValueSource(strings = {"孙%", "%精"})public void testFindByNameLike(String namePattern){List<User> users = userDao.findByNameLike(namePattern);users.forEach(System.err::println);}//根据年龄区间进行范围查询@ParameterizedTest@CsvSource({"15,20", "500,1000"})public void testFindByAgeBetween(int startAge, int endAge){List<User> users = userDao.findByAgeBetween(startAge, endAge);users.forEach(System.err::println);}
}

application.properties

spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/springboot?serverTimezone=UTC
spring.datasource.username=root
spring.datasource.password=123456# 如果想看到SQL语句输出,需要将Mapper组件的日志级别设置为debug
logging.level.cn.ljh.app.dao=debug# 指定 MyBatisXML Mapper 的加载路径
mybatis.mapper-locations=classpath*:cn/ljh/app/dao/*.xml
# 指定为 cn.ljh.app.domain 下的所有类指定别名,别名规则是类名首字母小写
# 就是说xml的这个 resultType="user"
mybatis.type-aliases-package=cn.ljh.app.domain

pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.4.5</version></parent><groupId>cn.ljh</groupId><artifactId>MyBatis_sqlSession</artifactId><version>1.0.0</version><name>MyBatis_sqlSession</name><properties><java.version>11</java.version></properties><dependencies><!-- 导入 MyBatis 整合 spring boot 的 starter --><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>2.2.0</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId><scope>runtime</scope><optional>true</optional></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><scope>runtime</scope></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><configuration><excludes><exclude><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></exclude></excludes></configuration></plugin></plugins></build></project>
http://www.lryc.cn/news/170582.html

相关文章:

  • 【ROS】RViz、Gazebo和Navigation的关系
  • 智能井盖:提升城市井盖安全管理效率
  • JavaWeb开发-06-SpringBootWeb-MySQL
  • 十六、垃圾回收相关概念
  • hive、spark、presto 中的增强聚合-grouping sets、rollup、cube
  • elasticsearch bulk 批量操作
  • 力扣11、 盛最多水的容器
  • IIC协议详解
  • element ui-表头自定义提示框
  • Python 图形化界面基础篇:创建顶部菜单
  • java实现十大排序算法
  • Linux日志管理-logrotate(crontab定时任务、Ceph日志转储)
  • 用PHP异步协程控制python爬虫脚本,实现多协程分布式爬取
  • VUE3写后台管理(3)
  • 机器学习笔记之最优化理论与算法(十二)无约束优化问题——共轭梯度法
  • JVM中的java同步互斥工具应用演示及设计分析
  • 数据治理-数据质量
  • [sqoop]hive3.1.2 hadoop3.1.1安装sqoop1.4.7
  • js事件的详细介绍
  • 虚幻4学习笔记(12)操控导入的角色、动画蓝图、播放蒙太奇和打包、角色重定向
  • hive with tez:无法从链中的任何提供者加载aws凭据
  • Ubuntu修改静态IP、网关和DNS的方法总结
  • Eureka服务器注册
  • Windows安装GPU版本的pytorch详细教程
  • 理解Kruskal算法的前提----深入理解并查集【超简单~】
  • Jenkins+Gitee+Docker+Ruoyi项目前后端分离部署
  • 笙默考试管理系统-MyExamTest----codemirror(23)
  • 重学Java (一) 泛型
  • Docker 部署 Redis 服务
  • 阿里云产品试用系列-负载均衡 SLB