MyBatis(配置,增删改查,注解与XML两种开发方式)、SpringBoot配置文件(yml简化properties)

JDBC

JDBC:(Java DataBase Connectivity),就是使用Java语言操作关系型数据库的一套API

java 复制代码
public class JDBCTest {

    /**
     * 编写JDBC程序, 查询数据
     */
    @Test
    public void testJdbc() throws Exception {
        // 获取连接
        Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/web", "root", "1234");
        // 创建预编译的PreparedStatement对象
        PreparedStatement pstmt = conn.prepareStatement("SELECT * FROM user WHERE username = ? AND password = ?");
        // 设置参数
        pstmt.setString(1, "daqiao"); // 第一个问号对应的参数
        pstmt.setString(2, "123456"); // 第二个问号对应的参数
        // 执行查询
        ResultSet rs = pstmt.executeQuery();
        // 处理结果集
        while (rs.next()) {
            int id = rs.getInt("id");
            String uName = rs.getString("username");
            String pwd = rs.getString("password");
            String name = rs.getString("name");
            int age = rs.getInt("age");

            System.out.println("ID: " + id + ", Username: " + uName + ", Password: " + pwd + ", Name: " + name + ", Age: " + age);
        }
        // 关闭资源
        rs.close();
        pstmt.close();
        conn.close();
    }

}

**ResultSet(结果集对象):**封装了DQL查询语句查询的结果。

1、next():将光标从当前位置向前移动一行,并判断当前行是否为有效行,返回值为boolean。

  • true:有效行,当前行有数据
  • false:无效行,当前行没有数据
    2、getXxx(...):获取数据,可以根据列的编号获取,也可以根据列名获取(推荐)。

PreparedStatement pstmt只是中转,最终还是存储在ResultSet中

预编译SQL

1、静态SQL(参数硬编码)

java 复制代码
conn.prepareStatement("SELECT * FROM user WHERE username = 'daqiao' AND password = '123456'");
ResultSet resultSet = pstmt.executeQuery();

2、预编译SQL(参数动态传递)

java 复制代码
conn.prepareStatement("SELECT * FROM user WHERE username = ? AND password = ?");
pstmt.setString(1, "daqiao");
pstmt.setString(2, "123456");
ResultSet resultSet = pstmt.executeQuery();

预编译作用:

1、防止SQL注入

2、性能更高

注意:在以后的项目开发中,我们使用的基本全部都是预编译SQL语句。

MyBatis

Spring boot中的三层架构分别为controller(控制层)、service(业务层)、dao(持久层)。MyBatis是一款优秀的dao持久层框架,用于简化JDBC的开发。

使用Mybatis步骤

而对于Mybatis来说,我们在开发持久层程序操作数据库时,需要重点关注以下两个方面:

  1. application.properties
properties 复制代码
#驱动类名称
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
#数据库连接的url
spring.datasource.url=jdbc:mysql://localhost:3306/web01
#连接数据库的用户名
spring.datasource.username=root
#连接数据库的密码
spring.datasource.password=1234
  1. Mapper接口(编写SQL语句)
java 复制代码
@Mapper
public interface UserMapper {
    @Select("select * from user")
    public List<User> list();
}
删除操作
java 复制代码
/**
 * 根据id删除
 */
@Delete("delete from user where id = #{id}")
public void deleteById(Integer id);

在Mybatis中,我们可以通过参数占位符号 #{...} 来占位,在调用deleteById方法时,传递的参数值,最终会替换占位符。

在单元测试类中,增加如下测试方法.

java 复制代码
@Test
public void testDeleteById(){
    userMapper.deleteById(36);
}
新增
java 复制代码
/**
 * 添加用户
 */
@Insert("insert into user(username,password,name,age) values(#{username},#{password},#{name},#{age})")
public void insert(User user);

如果在SQL语句中,我们需要传递多个参数,我们可以把多个参数封装到一个对象中。然后在SQL语句中,我们可以通过#{对象属性名}的方式,获取到对象中封装的属性值。

在测试类中添加测试方法,代码如下:

java 复制代码
@Test
public void testInsert(){
    User user = new User();
    user.setUsername("admin");
    user.setPassword("123456");
    user.setName("管理员");
    user.setAge(30);
    userMapper.insert(user);
}
修改

Mapper接口方法:

java 复制代码
/**
 * 根据id更新用户信息
 */
@Update("update user set username = #{username},password = #{password},name = #{name},age = #{age} where id = #{id}")
public void update(User user);

在测试类中添加测试方法,代码如下:

java 复制代码
@Test
public void testUpdate(){
    User user = new User();
    user.setId(6);
    user.setUsername("admin666");
    user.setPassword("123456");
    user.setName("管理员");
    user.setAge(30);
    userMapper.update(user);
}
查询

Mapper接口方法:

java 复制代码
/**
 * 根据用户名和密码查询用户信息
 */
@Select("select * from user where username = #{username} and password = #{password}")
public User findByUsernameAndPassword(@Param("username") String username, @Param("password") String password);

@param注解的作用是为接口的方法形参起名字的。(由于用户名唯一的,所以查询返回的结果最多只有一个,可以直接封装到一个对象中)

在测试类中添加测试方法,代码如下:

java 复制代码
@Test
public void testFindByUsernameAndPassword(){
    User user = userMapper.findByUsernameAndPassword("admin666", "123456");
    System.out.println(user);
}

说明:基于官方骨架创建的springboot项目中,接口编译时会保留方法形参名,@Param注解可以省略 (#{形参名})。

XML映射配置

Mybatis的开发有两种方式(注意:一个接口方法对应的SQL语句,要么使用注解配置,要么使用XML配置,切不可同时配置。):

  1. 注解
  2. XML

使用Mybatis的注解方式,主要是来完成一些简单的增删改查功能。如果需要实现复杂的SQL功能,建议使用XML来配置映射语句,也就是将SQL语句写在XML配置文件中。

在Mybatis中使用XML映射文件方式开发,需要符合一定的规范:

  1. XML映射文件的名称与Mapper接口名称一致,并且将XML映射文件和Mapper接口放置在相同包下(同包同名)
  2. XML映射文件的namespace属性为Mapper接口全限定名一致
  3. XML映射文件中sql语句的id与Mapper接口中的方法名一致,并保持返回类型一致。

1、创建XML映射文件

2、编写XML映射文件

xml 复制代码
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
  PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  "https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="">
 
</mapper>

3、配置

a. XML映射文件的namespace属性为Mapper接口全限定名

xml 复制代码
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.itheima.mapper.UserMapper">

</mapper>

b. XML映射文件中sql语句的id与Mapper接口中的方法名一致,并保持返回类型一致

xml 复制代码
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.itheima.mapper.EmpMapper">

    <!--查询操作-->
    <select id="findAll" resultType="com.itheima.pojo.User">
        select * from user
    </select>
    
</mapper>
MybatisX的使用

MybatisX是一款基于IDEA的快速开发Mybatis的插件,为效率而生。

MybatisX的安装:

可以通过MybatisX快速定位:

SpringBoot配置文件

application.properties进行属性的配置:

application.yaml , application.yml进行属性的配置:

在项目开发中,我们推荐使用application.yml配置文件来配置信息,简洁、明了、以数据为中心。

yml配置文件的基本语法

简单的了解过springboot所支持的配置文件,以及不同类型配置文件之间的优缺点之后,接下来我们就来了解下yml配置文件的基本语法:

1、大小写敏感

2、数值前边必须有空格,作为分隔符

3、使用缩进表示层级关系,缩进时,不允许使用Tab键,只能用空格(idea中会自动将Tab转换为空格)

4、缩进的空格数目不重要,只要相同层级的元素左侧对齐即可

5、#表示注释,从这个字符一直到行尾,都会被解析器忽略

了解完yml格式配置文件的基本语法之后,接下来我们再来看下yml文件中常见的数据格式。在这里我们主要介绍最为常见的两类:

  1. 定义对象或Map集合
  2. 定义数组、list或set集合

1、对象/Map集合

yaml 复制代码
user:
  name: zhangsan
  age: 18
  password: 123456

2、数组/List/Set集合

yaml 复制代码
hobby: 
  - java
  - game
  - sport

在yml格式的配置文件中,如果配置项的值是以 0 开头的,值需要使用 '' 引起来,因为以0开头在yml中表示8进制的数据。

相关推荐
四谎真好看2 小时前
SSM学习笔记(SpringBoot篇)
spring boot·笔记·学习·学习笔记·ssm
Coder_Boy_3 小时前
Java后端核心技术体系全解析(个人总结)
java·开发语言·spring boot·分布式·spring cloud·中间件
会跑的葫芦怪3 小时前
SaaS点餐平台难点详细解决方案
spring boot·sass
用户8307196840823 小时前
告别冗余!Spring Boot Web 入参转换 6 种玩法,@InitBinder 可以退休了
java·spring boot
忙碌5445 小时前
Spring Boot应用Docker化部署全攻略:从入门到生产环境实践
spring boot·后端·docker
莫寒清5 小时前
MyBatis 的缓存机制
面试·mybatis
zihan03216 小时前
若依(RuoYi)框架升级适配 JDK 21 和 SpringBoot 3.5.10
java·spring boot·spring·若依·若依升级jdk21
kyrie学java6 小时前
SpringBoot搭建项目调试与问题解决
java·spring boot·后端