Java程序操作数据库
一、JDBC
1.介绍:
- 使用Java语言操作关系型数据库的一套API
2.本质:
- sun公司官方定义的一套操作所有关系型数据库的规范,即接口
- 各个数据库厂商去实现这套接口,提供数据库驱动jar包
- 我们可以使用这套接口(JDBC)编程,真正执行的代码是驱动jar包中的实现类
3.步骤:
(1)注册驱动
1 |
|
(2)获取连接
1 |
|
(3)获取SQL语句执行对象
1 |
|
(4)执行SQL语句
DML语句:
1
2int i = statement.executeUpdate("DML语句");
System.out.println("影响的记录数为:" + i);DQL语句:
1
ResultSet rs = statement.executeQuery("DQL语句");
(5)释放资源
1 |
|
4.查询数据:
- ResultSet(结果集对象):ResultSet rs = statement.executeQuery()
- next():将光标从当前位置向前移动一行,并判断当前行是否为有效行,返回值为boolean
- true:有效行,当前行有数据
- false:无效行,当前行没有数据
- getXxx(…):获取数据,可以根据列的编号获取,也可以根据列名获取(推荐)
1
2rs.getInt("ID");
rs.getString("USERNAME"); - next():将光标从当前位置向前移动一行,并判断当前行是否为有效行,返回值为boolean
5.预编译SQL(参数动态传递):
- 优势:
- 可以防止SQL注入,更安全
- SQL注入:通过控制输入来修改事先定义好的SQL语句,以达到执行代码对服务器进行攻击的方式
- 性能更高
- SQL语句先编译后执行,性能更高
- 类型安全
- 强类型的setXxx(…)方法
- 可以防止SQL注入,更安全
- 执行:
- PreparedStatement是Statement子接口(专门用于预编译SQL)
- ?:预编译占位符:有几个就需要调用set方法赋值几个
- setXxx(…) :
- 给预编译占位符赋值
- 索引从 1 开始(不是 0!)
1 |
|
二、MyBatis
1.介绍:
- 一款优秀的持久层框架,用于简化JDBC的开发
2.配置:
- 在 resources 的 application.properties 中配置数据库连接信息
1 |
|
3.编写Mybatis程序:
编写Mybatis的持久层接口,定义SQL(注解/XML)
- @Mapper:应用程序在运行时,会自动的为该接口创建一个实现类对象(代理对象),并且会自动将该实现类对象存入IOC容器(bean)
- @Select:查询
- 例:
1
2
3
4
5
6
7
8@Mapper
public interface UserMapper {
@Select("select * from user")
public List<User> findAll(); //User为已定义的实体类,查询到的结果会自动封装到List<User>中
@Select("select * from user where username=#{username} and password=#{password}")
public User findByUsernameAndPassword(@Param("username") String username,@Param("password") String password);
}- 注:
- @Param注解的作用是为接口方法的形参起名字(接口编译时不会保留形参名,多个参数情况下需要使用@Param)
- 基于官方骨架创建的springboot项目中,接口编译时会保留方法形参名,@Param注解可以省略
- @Insert:插入
- 例:
1
2@Insert("insert into user(username,password,name,age) values(#{username},#{password},#{name},#{age})")
public void insert(User user); //#{username},#{password},#{name},#{age}是user对象的属性名- 注:如果需要传递的参数过多,可以将其封装到对象中
- @Update:修改
- 例:
1
2@Update("update user set username=#{username},password=#{password},name=#{name},age=#{age} where id=#{id}")
public void update(User user);- @Delete:删除
- 例:
1
2@Delete("delete from user where id = #{id}")
public Integer deleteById(Integer id);- 注:执行DML(数据操作)语句时返回值为 int 类型,表示DML语句执行影响的记录数
调用
- 例:
1 |
|
4.辅助配置:
- 在Mybatis中查看SQL语句的执行日志(控制台输出)
- 在 resources 的 application.properties 中配置
1 |
|
5.数据库连接池:
介绍:
- 数据库连接池是个容器,负责分配、管理数据库连接(Connection)
- 它允许应用程序重复使用一个现有的数据库连接,而不是再重新建立一个
- 释放空闲时间超过最大空闲时间的连接,来避免因为没有释放连接而引起的数据库连接遗漏
优势:
- 资源重用
- 提升系统响应速度
- 避免数据库连接遗漏
标准接口:DataSource
- 官方(sun)提供的数据库连接池接口,由第三方组织实现此接口
- 功能:
- 获取连接:
1
Connection getConnection() throws SQLException;
切换数据库连接池:
- SpringBoot默认数据库连接池为Hikari
- 在 resources 的 application.properties 中配置
1
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource //切换为德鲁伊连接池,是阿里巴巴开源的数据库连接池项目(需要引入依赖)
6. # 号与 $ 号:
- #{…}:
- 说明:占位符。执行时会将#{…}替换为?,生成预编译SQL
- 场景:参数值传递
- 特点:安全、性能高
- ${…}:
- 说明:拼接符。直接将参数拼接在SQL语句中,存在SQL注入问题
- 场景:表名、字段名动态设置时使用
- 特点:不安全、性能低
7.XML映射配置:
- 在Mybatis中,既可以通过注解配置SQL语句,也可以通过XML配置文件配置SQL语句
- 默认规则:
- XML映射文件的名称必须与Mapper接口名称一致,并且将XML映射文件和Mapper接口放置在相同包下(同包同名)
- XML映射文件的namespace属性为Mapper接口全限定名
- XML映射文件中SQL语句的id与Mapper接口中的方法名一致,并保持返回类型一致
- 例:
- 项目结构:
- 配置:
1
2
3
4
5<mapper namespace="com.itheima.mapper.UserMapper">
<select id="findAll" resultType="com.itheima.pojo.User">
select id,username,password,name,age from user
</select>
</mapper>
注:使用Mybatis的注解主要是来完成一些简单的增删改查功能。如果需要实现复杂的SQL功能,建议使用XML来配置映射语句
- 辅助配置:
- 配置XML映射文件的位置:
- 在 resources 的 application.properties 中配置
1
2//classpath表示类路径(是java和resources的集合),mapper为目录名,*.xml是在其目录(mapper)下查询所有XML文件
mybatis.mapper-locations=classpath:mapper/*.xml- MybatisX:
- 是一款基于IDEA的快速开发Mybatis的插件,为效率而生
- 配置XML映射文件的位置:
Java程序操作数据库
http://example.com/2025/02/13/Java程序操作数据库/