mybatis实现数据的增删改查

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
云数据库 RDS PostgreSQL,高可用系列 2核4GB
简介: 概念:mybatis是一个持久层的框架,是apache下的顶级项目让程序将主要精力放在sql上,通过mybatis提供的映射方式,自由灵活生成需要的sql语句。

概念:

  • mybatis是一个持久层的框架,是apache下的顶级项目
  • 让程序将主要精力放在sql上,通过mybatis提供的映射方式,自由灵活生成需要的sql语句。
  • 可以将向prepareStatement中的参数自动进行输入映射,将查询结果集灵活映射成java对象。(输出映射)
遇见的问题:

①Loading class com.mysql.jdbc.Driver'. This is deprecated. The new driver class iscom.mysql.cj.jdbc.Driver'. The driver is automatically registered via the SPI and manual loading of the driver class is generally unnecessary.

原因:使用了当前最新的mysql-connector-java-8.0.11-.jar的MySQL驱动包,新的驱动包中`com.mysql.jdbc.Driver'类已经过时,它通过SPI自动注册,不再需要手动加载驱动类

②java.sql.SQLException: The server time zone value 'Öйú±ê׼ʱ¼ä' is unrecognized or represents more than one time zone.

修改方法:value="jdbc:mysql://localhost:3306/test?serverTimezone=GMT%2B8"/

③当数据表中的内容为Date类型时,查询语句会报错。不知原因,有大佬知道的话请告诉一下

体系结构

img_82bf8bbdde6b7981ca36dc4bb1c1ef88.png
2.png

导入所需jar包:

img_996a59d69f8eef9e5d9591f16e3c8e45.png
1.png

根据Id查询数据

  • log4j.properties
log4j.rootLogger = DEBUG,Console
log4j.appender.Console = org.apache.log4j.ConsoleAppender
log4j.appender.Console.layout = org.apache.log4j.PatternLayout
log4j.appender.Console.layout.ConversionPattern = %d[%t]%-5p [%c] - %m%n
  • User.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="test">
     <select id="findUserById" parameterType="int" resultType="cn.itcast.mybatis.po.Employee">//parameterType输入类型,resultType输出结果类型
         select id,username,sex,address from users where id=#{id};//#{}是一个占位符
     </select>
</mapper>
  • SqlMapConfig.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration  
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"  
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<environments default="development">  
<environment id="development">
 <transactionManager type="JDBC"/> 
 <dataSource type="POOLED">
 <property name="driver" value="com.mysql.cj.jdbc.Driver"/> 
 <property name="url" value="jdbc:mysql://localhost:3306/test?serverTimezone=GMT%2B8"/> 
 <property name="username" value="root"/> 
 <property name="password" value=""/> 
 </dataSource>
 </environment>
</environments> 
<mappers>
   <mapper resource="sqlmap/User.xml"/>
</mappers>
</configuration>
  • Employee.java
package cn.itcast.mybatis.po;
import java.sql.Date;
public class Employee {
    private int id;
    private String username;
    private String sex;
    private String address;
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getUsername() {
        return username;
    }
    public void setUsername(String username) {
        this.username = username;
    }
    public String getSex() {
        return sex;
    }
    public void setSex(String sex) {
        this.sex = sex;
    }
    public String getAddress() {
        return address;
    }
    public void setAddress(String address) {
        this.address = address;
    }
    @Override
    public String toString() {
        return "Employee [id=" + id + ", username=" + username + ", sex=" + sex + ", address=" + address + "]";
    }
}
  • MybatisFirst.java
package sqlmap;
import java.io.IOException;
import java.io.InputStream;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Test;
import cn.itcast.mybatis.po.Employee;
public class MybatisFirst { 
    @Test
    public void findUserByIdTest() throws IOException{
        String resource="SqlMapConfig.xml";//配置文件
         InputStream inputStream= Resources.getResourceAsStream(resource);//得到配置文件流
        SqlSessionFactory sqlSessionFactory =new SqlSessionFactoryBuilder().build(inputStream);//创建会话工厂,传入配置文件信息
        SqlSession sqlSession =sqlSessionFactory.openSession();//通过工厂得到sqlsession
        Employee employee =sqlSession.selectOne("test.findUserById",1);//是selectOne查询一条数据
        System.out.println(employee);
        sqlSession.close();  //关闭会话
        }       
    }

根据名称模糊查询数据

  • SqlMapConfig.xml
 <select id="findUserByName" parameterType="java.lang.String" resultType="cn.itcast.mybatis.po.Employee">
         select id,username,sex,address from users where username like '%${value}%';//${}可能会引起sql注入,只是一个拼接符,不做任何改变
 </select>
  • 测试文件
@Test
    public void findUserByNameTest() throws IOException{
        String resource="SqlMapConfig.xml";
        InputStream inputStream= Resources.getResourceAsStream(resource);
        SqlSessionFactory sqlSessionFactory =new SqlSessionFactoryBuilder().build(inputStream);
        SqlSession sqlSession =sqlSessionFactory.openSession();
        java.util.List<Employee> list= sqlSession.selectList("test.findUserByName", "zhao");//selectList查询多条数据
        System.out.println(list);
               sqlSession.close();
        }       

向数据库中添加数据

  • SqlMapConfig.xml
<insert id="insertUser" parameterType="cn.itcast.mybatis.po.Employee">
       <selectKey keyProperty="id" order="AFTER" resultType="java.lang.Integer">
           select LAST_INSERT_ID(); //查询自增的主键值
       </selectKey>
     insert into users(id,username,sex,address)value(#{id},#{username},#{sex},#{address});
</insert>
  • 测试文件
@Test
    public void insertUserTest() throws IOException{
        String resource="SqlMapConfig.xml";
        InputStream inputStream= Resources.getResourceAsStream(resource);
        SqlSessionFactory sqlSessionFactory =new SqlSessionFactoryBuilder().build(inputStream);
        SqlSession sqlSession =sqlSessionFactory.openSession();
        Employee employee= new Employee();
        employee.setId(10);
        employee.setUsername("wu");
        employee.setSex("nv");
        employee.setAddress("henan");
        sqlSession.insert("test.insertUser",employee);
        sqlSession.commit();
               System.out.println(employee.getId());//输出自增的主键值
        sqlSession.close();
        }       

从数据库中删除文件

  • SqlMapConfig.xml
<delete id="deleteUser" parameterType="java.lang.Integer">
         delete from users where id=#{id};
</delete>
  • 测试文件
@Test
    public void deleteUserTest() throws IOException{
        String resource="SqlMapConfig.xml";
        InputStream inputStream= Resources.getResourceAsStream(resource);
        SqlSessionFactory sqlSessionFactory =new SqlSessionFactoryBuilder().build(inputStream);
        SqlSession sqlSession =sqlSessionFactory.openSession();
        sqlSession.delete("test.deleteUser",12);
        sqlSession.commit();
        sqlSession.close();
        }

更新数据库中的数据

  • SqlMapConfig.xml
<update id="updateUser" parameterType="cn.itcast.mybatis.po.Employee">
         update users set username=#{username},sex=#{sex},address=#{address} where id=#{id};   
</update>
  • 测试文件
@Test
    public void updateUserTest() throws IOException{
        String resource="SqlMapConfig.xml";
        InputStream inputStream= Resources.getResourceAsStream(resource);
        SqlSessionFactory sqlSessionFactory =new SqlSessionFactoryBuilder().build(inputStream);
        SqlSession sqlSession =sqlSessionFactory.openSession();
        Employee employee= new Employee();
        employee.setId(13);
        employee.setUsername("sheng");
        employee.setSex("nv");
        employee.setAddress("diqiu");
        sqlSession.update("test.updateUser",employee);
        sqlSession.commit();
        sqlSession.close();
        }       
相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
3月前
|
XML Java 数据库连接
二、搭建MyBatis采用xml方式,验证CRUD(增删改查操作)
二、搭建MyBatis采用xml方式,验证CRUD(增删改查操作)
148 21
|
9月前
|
Java 数据库连接 数据库
mybatis查询数据,返回的对象少了一个字段
mybatis查询数据,返回的对象少了一个字段
635 8
|
3月前
|
人工智能 Java 数据库连接
MyBatis Plus 使用 Service 接口进行增删改查
本文介绍了基于 MyBatis-Plus 的数据库操作流程,包括配置、实体类、Service 层及 Mapper 层的创建。通过在 `application.yml` 中配置 SQL 日志打印,确保调试便利。示例中新建了 `UserTableEntity` 实体类映射 `sys_user` 表,并构建了 `UserService` 和 `UserServiceImpl` 处理业务逻辑,同时定义了 `UserTableMapper` 进行数据交互。测试部分展示了查询、插入、删除和更新的操作方法及输出结果,帮助开发者快速上手 MyBatis-Plus 数据持久化框架。
178 0
|
5月前
|
SQL Java 数据库连接
【潜意识Java】深入理解MyBatis的Mapper层,以及让数据访问更高效的详细分析
深入理解MyBatis的Mapper层,以及让数据访问更高效的详细分析
550 1
|
8月前
|
SQL JSON Java
mybatis使用三:springboot整合mybatis,使用PageHelper 进行分页操作,并整合swagger2。使用正规的开发模式:定义统一的数据返回格式和请求模块
这篇文章介绍了如何在Spring Boot项目中整合MyBatis和PageHelper进行分页操作,并且集成Swagger2来生成API文档,同时定义了统一的数据返回格式和请求模块。
205 1
mybatis使用三:springboot整合mybatis,使用PageHelper 进行分页操作,并整合swagger2。使用正规的开发模式:定义统一的数据返回格式和请求模块
|
9月前
|
SQL XML Java
mybatis复习02,简单的增删改查,@Param注解多个参数,resultType与resultMap的区别,#{}预编译参数
文章介绍了MyBatis的简单增删改查操作,包括创建数据表、实体类、配置文件、Mapper接口及其XML文件,并解释了`#{}`预编译参数和`@Param`注解的使用。同时,还涵盖了resultType与resultMap的区别,并提供了完整的代码实例和测试用例。
mybatis复习02,简单的增删改查,@Param注解多个参数,resultType与resultMap的区别,#{}预编译参数
|
9月前
|
SQL XML Java
mybatis :sqlmapconfig.xml配置 ++++Mapper XML 文件(sql/insert/delete/update/select)(增删改查)用法
当然,这些仅是MyBatis功能的初步介绍。MyBatis还提供了高级特性,如动态SQL、类型处理器、插件等,可以进一步提供对数据库交互的强大支持和灵活性。希望上述内容对您理解MyBatis的基本操作有所帮助。在实际使用中,您可能还需要根据具体的业务要求调整和优化SQL语句和配置。
139 1
|
10月前
|
Java 数据库连接 测试技术
SpringBoot 3.3.2 + ShardingSphere 5.5 + Mybatis-plus:轻松搞定数据加解密,支持字段级!
【8月更文挑战第30天】在数据驱动的时代,数据的安全性显得尤为重要。特别是在涉及用户隐私或敏感信息的应用中,如何确保数据在存储和传输过程中的安全性成为了开发者必须面对的问题。今天,我们将围绕SpringBoot 3.3.2、ShardingSphere 5.5以及Mybatis-plus的组合,探讨如何轻松实现数据的字段级加解密,为数据安全保驾护航。
696 1
|
10月前
|
SQL 关系型数据库 MySQL
解决:Mybatis-plus向数据库插入数据的时候 报You have an error in your SQL syntax
该博客文章讨论了在使用Mybatis-Plus向数据库插入数据时遇到的一个常见问题:SQL语法错误。作者发现错误是由于数据库字段中使用了MySQL的关键字,导致SQL语句执行失败。解决方法是将这些关键字替换为其他字段名称,以避免语法错误。文章通过截图展示了具体的操作步骤。
|
11月前
|
Java 数据库连接 数据库
mybatis plus 中增删改查及Wrapper的使用
mybatis plus 中增删改查及Wrapper的使用
425 3