1、JDBC



首先选择模块:

选择java,给文件命名

在pom文件引入依赖:
<dependencies>
<!-- MySQL JDBC driver -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.30</version>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter</artifactId>
<version>5.9.3</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.30</version>
</dependency>
</dependencies>
之后创建一个user表,这里选用的是Datagrip软件中进行创建,也可以直接在mysql上创建:

数据如下:
create table user(
id int unsigned primary key auto_increment comment 'ID,主键',
username varchar(20) comment '用户名',
password varchar(32) comment '密码',
name varchar(10) comment '姓名',
age tinyint unsigned comment '年龄'
) comment '用户表';
insert into user(id, username, password, name, age) values (1, 'daqiao', '123456', '大乔', 22),
(2, 'xiaoqiao', '123456', '小乔', 18),
(3, 'diaochan', '123456', '貂蝉', 24),
(4, 'lvbu', '123456', '吕布', 28),
(5, 'zhaoyun', '12345678', '赵云', 27);
将数据插入之后,显示如下:

之后回到JAVa中创建一个类,在com.itheima下叫jdbcTest,
第一步是注册驱动,在寻找驱动类时,先按两下shift之后输入Driver并勾选右上角的包括非项目条目即可!

之后导入
import com.mysql.cj.jdbc.Driver;
一定要记得在新的方法前加@Test,以下是完整代码:
package com.itheima;
import com.mysql.cj.jdbc.Driver;
import org.junit.jupiter.api.Test;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
public class jdbcTest {
@Test
public void testUpdata() throws Exception {
//注册驱动
Class.forName("com.mysql.cj.jdbc.Driver");
//获取数据库连接
String url="jdbc:mysql://localhost:3306/web01";
String user="root";
String password="123456";
Connection connection= DriverManager.getConnection(url,user,password);
//获取sql语句执行对象
Statement statement=connection.createStatement();
//执行sql
int i=statement.executeUpdate("update user set age=25 where id=1");
System.out.println("sql语句执行完毕,影响的记录数为:"+i);
//关闭连接
connection.close();
statement.close();
System.out.println("数据库连接已关闭");
}
}
结果:数据库中id=1的age已经发生改变

总结:



以下是全部代码:
@Test
public void testSelect() throws SQLException {
String url="jdbc:mysql://localhost:3306/web01";
String user="root";
String password="123456";
Connection conn=null;
PreparedStatement stmt=null;
ResultSet rs=null;//封装查询返回的结果
try{
Class.forName("com.mysql.cj.jdbc.Driver");
conn=DriverManager.getConnection(url,user,password);
//预编译的sql语句
String sql="select id,username,password,name,age from user where username=? and password=?";
stmt=conn.prepareStatement(sql);
stmt.setString(1,"daqiao");//第一个占位符的信息
stmt.setString(2,"123456");
rs=stmt.executeQuery();
while(rs.next()){
User user1=new User(
rs.getInt("id"),
rs.getString("username"),
rs.getString("password"),
rs.getString("name"),
rs.getInt("age")
);
System.out.println(user1);
}
} catch (ClassNotFoundException e) {
throw new RuntimeException(e);
}finally{
try{
if(rs!=null) rs.close();
if(stmt!=null) stmt.close();
if(conn!=null) conn.close();
}catch(SQLException e){
e.printStackTrace();
}
}
}
通过这个方法可以得到以下结果:

总结:


如果使用上面的进行查询,可能出现SQL注入,导致用户名和密码不正确却可以正确登录,如:密码为:' or '1'='1,如果用第一种方式容易导致以下结果:

因此第二种方式更加安全!!!
总结:

2、mybatis




之后选中项目新建模块:

添加以下依赖项:

将User实体类放置在这里:

package com.itheima.pojo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data//将以下属性的get和set都设置了
@AllArgsConstructor//全参构造
@NoArgsConstructor//无参构造
public class User {
//与数据库的属性要一一对应
private Integer id;
private String username;
private String password;
private String name;
private Integer age;
}
之后选择resources中的

根据实际需求进行更改:
#下面这些内容是为了让MyBatis映射
#指定Mybatis的Mapper文件
mybatis.mapper-locations=classpath:mappers/*xml
#指定Mybatis的实体目录
mybatis.type-aliases-package=com.itheima.mybatis.entity
#配置数据库的连接信息
spring.datasource.url=jdbc:mysql://localhost:3306/web01
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.username=root
spring.datasource.password=123456
如果以上文件在打开时,中文是乱码,需要点击文件------设置------文件编码进行更改为UTF-8

之后在com.itheima下新建一个软件包叫:Mapper,之后在这里新建一个接口

之后在新建的类名上添加:@Mapper

输入以下代码:
package com.itheima.Mapper;
import com.itheima.pojo.User;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;
import java.util.List;
@Mapper
public interface UserMapper {
@Select("select * from user")//执行查询使用Select,删除Delete,修改Update,新增是Insert
public List<User> findAll();
}
之后到测试类下的启动类:

package com.itheima;
import com.itheima.Mapper.UserMapper;
import com.itheima.pojo.User;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import java.util.List;
@SpringBootTest
class SpringbootMybatisQuickerApplicationTests {
@Autowired
private UserMapper userMapper;
@Test
public void testAll(){
List<User> list=userMapper.findAll();
list.forEach(user -> System.out.println(user));
}
}
将数据遍历输出:

总结:

之后点击右侧的数据库的标识,点击到MySQL页面:

根据实际输入用户、密码和数据库名称:

先测试连接,成功之后就可以应用并确定
之后就可以看到数据表:


在application.properties中添加以下内容实现日志输出:
#mybatis日志输出
mybatis.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl




如果要将Hikari换成Druid的数据池:先在pom文件中引入依赖------之后在application文件中添加一行,datasource.type的类型,如下所示:

总结:

删除用户:

首先打到UserMapper中:
@Delete("delete from user where id=#{id}")
public void deleteById(int id);
加入以上代码
之后在test的测试类中添加以下代码:
@Test
public void testDeleteID(){
userMapper.deleteById(5);
}
运行后有这样的结果:

最终数据发生变化

新增用户:

首先在UserMapper中添加以下代码:
@Insert("insert into user(username,password,name,age) values (#{username},#{password},#{name},#{age})")
public void insert(User user);
之后在测试类中添加如下内容:
@Test
public void testInsert(){
User user=new User(null,"admin","123456","登录",18);
userMapper.insert(user);
}
结果显示,成功插入数据:


首先在Mapper:
@Update("update user set username=#{username},password=#{password},name=#{name},age=#{age} where id=#{id}")
public void update(User user);
}
之后在测试类中,此时的id要给值,不然无法确定要更改的是哪一行参数:
@Test
public void testUpdate(){
User user=new User(6,"add","123456","添加",25);
userMapper.update(user);
}
结果如下所示:


首先在mapper中添加如下代码:
@Select ("select * from user where username=#{username} and password=#{password}")
public User finduserpass(@Param("username") String username,@Param ("password")String password);
之后在测试中添加:
@Test
public void testFindUserPass(){
User user=userMapper.finduserpass("add","123456");
System.out.println(user);
}
最终查询结果如下所示:



首先在建立新目录:com/itheima/Mapper,之后在这个目录下新建一个类,名字为:UserMapper.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>
其中mapper namespace的内容需要在主程序文件中的UserMapper中给出,右键类名选择复制引用即可!!!

之后在xml的mapper语句中添加如下内容:
<mapper namespace="com.itheima.Mapper.UserMapper">
<select id="findAll" resultType="com.itheima.pojo.User">
select * from user
</select>
</mapper>
id与UserMapper中的方法名保持一致,resulttype则是要存储对象的返回值,这里是User类,下面的语句就是UserMapper中注解后边的sql语句,之后将UserMapper中的注解进行注释,返回测试类中进行测试,结果正常输出!!!

如果你创建的新的UserMapper.xml并不是放在与主程序Mapper的同名同类包下,就会导致出错,还有一种解决方法就是在application.properties中进行定义

添加如下代码:
#指定Mybatis的Mapper文件
mybatis.mapper-locations=classpath:mappers/*.xml
添加一个插件:主要用于快速跳转到对应的接口

如果加上插件之后出现如下错误:

将同一个项目下的其他重名的模块下的类移除之后即可消失