腾讯快速建站平台,空气炸锅做糕点的网站,wordpress自适应商城,怎么做盲盒前面几篇我们介绍了使用Mybatis查询数据#xff0c;并且也了解了如何在Mybatis中使用JDK的日志系统打印日志#xff1b;本篇我们继续介绍如何使用Mybatis完成数据的插入、修改和删除。
如果您对查询数据和Mybatis集成JDK日志系统不太了解#xff0c;建议您先进行了解后再阅…前面几篇我们介绍了使用Mybatis查询数据并且也了解了如何在Mybatis中使用JDK的日志系统打印日志本篇我们继续介绍如何使用Mybatis完成数据的插入、修改和删除。
如果您对查询数据和Mybatis集成JDK日志系统不太了解建议您先进行了解后再阅读本篇可以参考
Mybatis查询数据https://blog.csdn.net/m1729339749/article/details/132469672Mybatis 日志(JDK Log)https://blog.csdn.net/m1729339749/article/details/132565362
一、数据准备
这里我们直接使用脚本初始化数据库中的数据
-- 如果数据库不存在则创建数据库
CREATE DATABASE IF NOT EXISTS demo DEFAULT CHARSET utf8;
-- 切换数据库
USE demo;
-- 创建用户表
CREATE TABLE IF NOT EXISTS T_USER(ID INT PRIMARY KEY,USERNAME VARCHAR(32) NOT NULL,AGE INT NOT NULL
);
-- 插入用户数据
INSERT INTO T_USER(ID, USERNAME, AGE)
VALUES(1, 张三, 20),(2, 李四, 22),(3, 王五, 24);创建了一个名称为demo的数据库并在库里创建了名称为T_USER的用户表并向表中插入了数据
二、环境搭建
1、创建实体类
在cn.horse.demo下创建UserInfo类
UserInfo类
package cn.horse.demo;public class UserInfo {private Integer id;private String name;private Integer age;public void setId(Integer id) {this.id id;}public void setName(String name) {this.name name;}public void setAge(Integer age) {this.age age;}Overridepublic String toString() {StringBuilder stringBuilder new StringBuilder();stringBuilder.append({);stringBuilder.append(id: this.id);stringBuilder.append(, );stringBuilder.append(name: this.name);stringBuilder.append(, );stringBuilder.append(age: this.age);stringBuilder.append(});return stringBuilder.toString();}
}2、Mapper配置文件
在resources的目录下新建UserInfoMapper.xml配置文件
?xml version1.0 encodingUTF-8 ?
!DOCTYPE mapperPUBLIC -//mybatis.org//DTD Mapper 3.0//ENhttps://mybatis.org/dtd/mybatis-3-mapper.dtd
mapper namespacecn.horse.demo.UserInfoMapperselect idfindById resultTypecn.horse.demo.UserInfoSELECTID,USERNAME name,AGEFROM T_USERWHERE ID #{id}/select
/mapper3、引入配置文件
在resources下新建mybatis-config.xml配置文件并引入UserInfoMapper.xml配置文件
?xml version1.0 encodingUTF-8 ?
!DOCTYPE configurationPUBLIC -//mybatis.org//DTD Config 3.0//ENhttp://mybatis.org/dtd/mybatis-3-config.dtd
configurationsettingssetting namelogImpl valueJDK_LOGGING//settingsenvironments defaultdevelopmentenvironment iddevelopmenttransactionManager typeJDBC/dataSource typePOOLEDproperty namedriver valueorg.gjt.mm.mysql.Driver/property nameurl valuejdbc:mysql://localhost:3306/demo?useUnicodetrueamp;useSSLfalseamp;characterEncodingutf8/property nameusername valueroot/property namepassword valuehorse//dataSource/environment/environmentsmappersmapper resourcedemo/UserInfoMapper.xml //mappers
/configuration4、会话工具类
在cn.horse.demo包下新建SqlSessionUtils工具类
package cn.horse.demo;import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;import java.io.InputStream;
import java.util.Objects;public class SqlSessionUtils {private static final SqlSessionFactory sqlSessionFactory;static {// 读取mybatis配置文件InputStream inputStream ClassLoader.getSystemClassLoader().getResourceAsStream(mybatis-config.xml);// 根据配置创建SqlSession工厂sqlSessionFactory new SqlSessionFactoryBuilder().build(inputStream);}/*** 开启会话* return*/public static SqlSession openSession() {return sqlSessionFactory.openSession();}/*** 关闭会话* param sqlSession*/public static void closeSession(SqlSession sqlSession) {if(Objects.nonNull(sqlSession)) {sqlSession.close();}}
}5、JDK 日志系统配置
在resources的目录下新建logging.properties配置文件
handlersjava.util.logging.ConsoleHandler
.levelINFOcn.horse.demo.UserInfoMapper.levelFINER
java.util.logging.ConsoleHandler.levelALL
java.util.logging.ConsoleHandler.formatterjava.util.logging.SimpleFormatter
java.util.logging.SimpleFormatter.format%1$tY-%1$tm-%1$td %1$tT.%1$tL %4$s %3$s - %5$s%6$s%n在cn.horse.demo下创建JdkLogConfig类
JdkLogConfig类
package cn.horse.demo;import java.io.IOException;
import java.io.InputStream;
import java.util.logging.LogManager;public class JdkLogConfig {public JdkLogConfig() {try {InputStream inputStream ClassLoader.getSystemClassLoader().getResourceAsStream(logging.properties);LogManager.getLogManager().readConfiguration(inputStream);} catch (IOException e) {throw new RuntimeException(e);}}
}6、启动程序
package cn.horse.demo;import org.apache.ibatis.session.SqlSession;import java.util.List;public class Main {public static void main(String[] args) {// 配置日志文件System.setProperty(java.util.logging.config.class, cn.horse.demo.JdkLogConfig);findById(2);}private static void findById(Integer id) {SqlSession sqlSession null;try {sqlSession SqlSessionUtils.openSession();UserInfo userInfo sqlSession.selectOne(cn.horse.demo.UserInfoMapper.findById, id);System.out.println(userInfo);} finally {SqlSessionUtils.closeSession(sqlSession);}}
}测试
查询id为2的用户信息
执行后的结果如下 三、插入数据
在UserInfoMapper.xml配置文件中新增insert标签并写入insert语句
insert idinsertINSERT INTO T_USER(ID,USERNAME,AGE)VALUES(#{id}, #{name}, #{age})
/insertinsert标签id代表的是标签的编号标签的内容是insert语句insert语句中可以使用参数用法与查询时一致。 测试
在启动程序中新建insert方法
private static void insert(UserInfo userInfo) {SqlSession sqlSession null;try {sqlSession SqlSessionUtils.openSession();sqlSession.insert(cn.horse.demo.UserInfoMapper.insert, userInfo);sqlSession.commit();} finally {SqlSessionUtils.closeSession(sqlSession);}
}这里插入数据我们调用了SqlSession对象的insert方法另外还需要调用SqlSession对象的commit方法用于提交事务。
在main方法中调用insert方法插入一条数据并查询
// 引入JDK日志配置
System.setProperty(java.util.logging.config.class, cn.horse.demo.JdkLogConfig);UserInfo userInfo new UserInfo();
userInfo.setId(5);
userInfo.setName(王五);
userInfo.setAge(5);
// 插入
insert(userInfo);
findById(5);执行后的结果如下 从执行的日志中可以看到insert语句以及传入的参数执行的结果受影响的行数
插入结束后我们使用id进行查询发现查询出来了新添加的数据
四、修改数据
在UserInfoMapper.xml配置文件中新增update标签并写入update语句
update idupdateUPDATE T_USERSET USERNAME #{name},AGE #{age}WHERE ID #{id}
/updateupdate标签id代表的是标签的编号标签的内容是update语句update语句中可以使用参数用法与查询时一致。 测试
在启动程序中新建update方法
private static void update(UserInfo userInfo) {SqlSession sqlSession null;try {sqlSession SqlSessionUtils.openSession();sqlSession.update(cn.horse.demo.UserInfoMapper.update, userInfo);sqlSession.commit();} finally {SqlSessionUtils.closeSession(sqlSession);}
}这里更新数据我们调用了SqlSession对象的update方法另外还需要调用SqlSession对象的commit方法用于提交事务。
在main方法中调用update方法更新数据并查询
// 引入JDK日志配置
System.setProperty(java.util.logging.config.class, cn.horse.demo.JdkLogConfig);UserInfo userInfo new UserInfo();
userInfo.setId(5);
userInfo.setName(王五2);
userInfo.setAge(50);
// 更新
update(userInfo);
findById(5);执行后的结果如下 从执行的日志中可以看到update语句以及传入的参数执行的结果受影响的行数
更新结束后我们使用id进行查询发现查询出来了修改后的数据
五、删除数据
在UserInfoMapper.xml配置文件中新增delete标签并写入delete语句
delete iddeleteDELETE FROM T_USERWHERE ID #{id}
/deletedelete标签id代表的是标签的编号标签的内容是delete语句delete语句中可以使用参数用法与查询时一致。 测试
在启动程序中新建delete方法
private static void delete(Integer id) {SqlSession sqlSession null;try {sqlSession SqlSessionUtils.openSession();sqlSession.delete(cn.horse.demo.UserInfoMapper.delete, id);sqlSession.commit();} finally {SqlSessionUtils.closeSession(sqlSession);}
}这里删除数据我们调用了SqlSession对象的delete方法另外还需要调用SqlSession对象的commit方法用于提交事务。
在main方法中调用delete方法删除数据并查询
// 引入JDK日志配置
System.setProperty(java.util.logging.config.class, cn.horse.demo.JdkLogConfig);// 删除
delete(5);
findById(5);执行后的结果如下 从执行的日志中可以看到delete语句以及传入的参数执行的结果受影响的行数
删除结束后我们使用id进行查询发现已经查询不到数据了