当前位置: 首页 > news >正文

MyBatis入门——基本的增删改查

目录

一、MyBatis简介

二、搭建MyBatis

(一)配置依赖

(二)log4j日志功能

(三)数据库配置文件——jdbc.properties

(四)创建MyBatis的核心配置文件

(五)使用MyBatisX插件

三、项目其他配置搭建

(一)创建数据库连接工具类

(二)创建表

(三)创建数据库的实体类

(四)UserMapper接口

(五)UserMapper.xml

(六)测试类


一、MyBatis简介

        MyBatis是一款优秀的持久层框架,主要用于简化数据库操作,它支持自定义SQL、存储过程以及高级映射。

        它内部封装了JDBC,开发时只需要关注SQL语句本身,不需要花费精力去处理加载驱动、创建连接、创建statement等繁杂的过程。直接编写原生态sql,可以严格控制sql执行性能,灵活度高。

        MyBatis可以使用 XML或注解来配置和映射原生信息,将POJO映射成数据库中的记录,避免了几乎所有的JDBC代码和手动设置参数以及获取结果集。

下载地址:https://github.com/mybatis/mybatis-3 

二、搭建MyBatis

maven:3.8.1

MySQL:8

MyBatis:3.5.16

(一)配置依赖

pom.xml:

<dependencies><!-- Mybatis核心 --><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.5.16</version></dependency><!-- junit测试 -->        <dependency><groupId>org.junit.jupiter</groupId><artifactId>junit-jupiter-api</artifactId><version>5.11.3</version><scope>test</scope></dependency><!-- MySQL驱动 --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.33</version></dependency><!-- lombok --><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.36</version><scope>provided</scope></dependency><!-- log4j日志 --><dependency><groupId>log4j</groupId><artifactId>log4j</artifactId><version>1.2.17</version></dependency></dependencies>

(二)log4j日志功能

日志的级别 FATAL(致命)>ERROR(错误)>WARN(警告)>INFO(信息)>DEBUG(调试)

从左到右打印的内容越来越详细

src/main/resources/log4j.xml:如果有报红无需在意

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/"><appender name="STDOUT" class="org.apache.log4j.ConsoleAppender"><param name="Encoding" value="UTF-8"/><layout class="org.apache.log4j.PatternLayout"><param name="ConversionPattern" value="%-5p %d{MM-dd HH:mm:ss,SSS}%m (%F:%L) \n"/></layout></appender><logger name="java.sql"><level value="debug"/></logger><logger name="org.apache.ibatis"><level value="info"/></logger><root><level value="debug"/><appender-ref ref="STDOUT"/></root>
</log4j:configuration>

(三)数据库配置文件——jdbc.properties

src/main/resources/jdbc.properties:

jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/mybatis?serverTimezone=UTC
jdbc.username=root
jdbc.password=root

        指定serverTimezone=UTC参数的主要作用是解决时区问题,确保从数据库中检索的时间和日期值与Java应用程序中的时区设置一致。

(四)创建MyBatis的核心配置文件

核心配置文件主要用于配置连接数据库的环境以及MyBatis的全局配置信息

src/main/resources/mybatis-config.xml:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration><!--MyBatis核心配置文件中,标签的顺序:properties?,settings?,typeAliases?,typeHandlers?,objectFactory?,objectWrapperFactory?,reflectorFactory?,plugins?,environments?,databaseIdProvider?,mappers?--><!--引入properties文件--><properties resource="jdbc.properties"/><!-- 设置MyBatis的全局配置--><settings><!-- 将_自动映射为驼峰,例如emp_name:empName--><setting name="mapUnderscoreToCamelCase" value="true"/><!-- 开启延迟加载--><setting name="lazyLoadingEnabled" value="true"/></settings><!--设置类型别名--><typeAliases>      <!--以包为单位,将包下所有的类型设置默认的类型别名,即类名且不区分大小写--><package name="com.atguigu.mybatis.pojo"/></typeAliases><!--environments:配置多个连接数据库的环境属性:default:设置默认使用的环境的id--><environments default="development"><!--environment:配置某个具体的环境属性:id:表示连接数据库的环境的唯一标识,不能重复--><environment id="development"><!--transactionManager:设置事务管理方式属性:type="JDBC|MANAGED"JDBC:表示当前环境中,执行SQL时,使用的是JDBC中原生的事务管理方式,事
务的提交或回滚需要手动处理MANAGED:被管理,例如Spring--><transactionManager type="JDBC"/><!--dataSource:配置数据源属性:type:设置数据源的类型type="POOLED|UNPOOLED|JNDI"POOLED:表示使用数据库连接池缓存数据库连接UNPOOLED:表示不使用数据库连接池JNDI:表示使用上下文中的数据源--><dataSource type="POOLED"><property name="driver" value="${jdbc.driver}"/><property name="url" value="${jdbc.url}"/><property name="username" value="${jdbc.username}"/><property name="password" value="${jdbc.password}"/></dataSource></environment></environments><!--引入映射文件--><mappers><!--<mapper resource="mappers/UserMapper.xml"/>--><!--以包为单位引入映射文件,要求:1.mapper接口所在的包要和映射文件所在的包一致2.mapper接口要和映射文件的名字一致--><package name="com.atguigu.mybatis.mapper"/></mappers>
</configuration>

(五)使用MyBatisX插件

 

三、项目其他配置搭建

(一)创建数据库连接工具类

com.atguigu.mybatis.utils.SqlSessionUtils.SqlSessionUtils:

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 java.io.IOException;
import java.io.InputStream;public class SqlSessionUtils {public static SqlSession getSqlSession() {SqlSession sqlSession = null;try {InputStream is = Resources.getResourceAsStream("mybatis-config.xml");SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(is);sqlSession = sqlSessionFactory.openSession(true);} catch (IOException e) {e.printStackTrace();}return sqlSession;}
}

(二)创建表

create table t_user
(id       int auto_increment primary key,username varchar(20) null,password varchar(20) null,age      int         null,sex      char        null,email    varchar(50) null
);-- 插入数据
insert into t_user
values (null, '张三', '123456', 19, '男', 'abc456@163.com'),(null, '李四', '123456', 20, '女', 'abc123@163.com'),(null, '王五', '123456', 25, '男', '123xyz@qq.com');

(三)创建数据库的实体类

com.atguigu.mybatis.pojo.User:

@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {private Integer id;private String username;private String password;private Integer age;private String sex;private String email;
}

(四)UserMapper接口

import com.atguigu.mybatis.pojo.User;
import org.apache.ibatis.annotations.Param;import java.util.List;public interface UserMapper {/*** 添加用户信息*/int insertUser(User user);/*** 根据id修改用户信息*/int updateUser(User user);/*** 根据id删除用户信息*/int deleteUser(Integer id);/*** 根据id查询用户信息*/User getUserById(Integer id);/*** 根据username查询用户信息*/List<User> getUserByUserNameAndPassword(@Param("username") String username, @Param("password")String password);/*** 查询所有用户信息*/List<User> getAllUser();
}

(五)UserMapper.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!--MaBatis面向接口编程的两个一致:1.映射文件的namespace要和mapper接口的全类名保持一致,通过接口就能找到映射文件2.映射文件中SQL语句的id要和mapper接口中的方法名一致,通过接口中的抽象方法就能找到SQL语句
-->
<mapper namespace="com.atguigu.mybatis.mapper.UserMapper"><!-- int insertUser(User user);--><insert id="insertUser">insert into t_uservalues (null, #{username}, #{password}, #{age}, #{sex}, #{email});</insert><!-- int updateUser(User user);--><update id="updateUser">update t_userset username = #{username},password = #{password},age      = #{age},sex      = #{sex},email    = #{email}where id = #{id};</update><!-- int deleteUser(Integer id);--><delete id="deleteUser">deletefrom t_userwhere id = #{id}</delete><!-- User getUserById(Integer id);--><!-- 当数据库字段和属性相同时,resultType="User" 可以不写 MyBatis可自动映射  --><select id="getUserById" resultType="User">select *from t_userwhere id = #{id}</select><!-- List<User> getUserByUserNameAndPassword(String username,String password);--><select id="getUserByUserNameAndPassword" resultType="User">select *from t_userwhere username = #{username}and password = #{password}</select><!-- List<User> getAllUser();--><select id="getAllUser" resultType="User">select * from t_user</select>
</mapper>

(六)测试类

com.atguigu.mybatis.test.MyBatisTest:

public class MyBatisTest {@Testpublic void testInsertUser() {SqlSession sqlSession = SqlSessionUtils.getSqlSession();UserMapper mapper = sqlSession.getMapper(UserMapper.class);int row = mapper.insertUser(new User(null, "jack", "789789", 26, "男", "123@qq.com"));System.out.println(row); // 1}@Testpublic void testUpdateUser() {SqlSession sqlSession = SqlSessionUtils.getSqlSession();UserMapper mapper = sqlSession.getMapper(UserMapper.class);int row = mapper.updateUser(new User(4, "jack", "777777", 23, "男", "12344@qq.com"));System.out.println(row); // 1}@Testpublic void testDeleteUser() {SqlSession sqlSession = SqlSessionUtils.getSqlSession();UserMapper mapper = sqlSession.getMapper(UserMapper.class);int row = mapper.deleteUser(4);System.out.println(row); // 1}@Testpublic void testGetUserById() {SqlSession sqlSession = SqlSessionUtils.getSqlSession();UserMapper mapper = sqlSession.getMapper(UserMapper.class);User user = mapper.getUserById(3);System.out.println(user);}// User(id=3, username=王五, password=123456, age=25, sex=男, email=123xyz@qq.com)@Testpublic void testGetUserByUserNameAndPassword() {SqlSession sqlSession = SqlSessionUtils.getSqlSession();UserMapper mapper = sqlSession.getMapper(UserMapper.class);List<User> userList = mapper.getUserByUserNameAndPassword("李四", "123456");userList.forEach(System.out::println);}// User(id=2, username=李四, password=123456, age=20, sex=女, email=abc123@163.com)@Testpublic void testGetAllUser() {SqlSession sqlSession = SqlSessionUtils.getSqlSession();UserMapper mapper = sqlSession.getMapper(UserMapper.class);List<User> userList = mapper.getAllUser();userList.forEach(System.out::println);}/*** User(id=1, username=张三, password=123456, age=19, sex=男, email=abc456@163.com)* User(id=2, username=李四, password=123456, age=20, sex=女, email=abc123@163.com)* User(id=3, username=王五, password=123456, age=25, sex=男, email=123xyz@qq.com)*/
}
http://www.lryc.cn/news/490210.html

相关文章:

  • 学习Gentoo系统中二进制软件包和源代码包的概念
  • 麦肯锡报告 | 未来的经济引擎:解读下一代竞争领域
  • 连接mysql并读取指定表单数据到DataFrame
  • 从入门到精通数据结构----四大排序(上)
  • 【bug】使用transformers训练二分类任务时,训练损失异常大
  • 文献阅读与笔记整理技巧
  • Python Flask中集成SQLAlchemy和Flask-Login
  • esp32 JTAG 串口 bootload升级
  • 【linux】(17)压缩和解压
  • 摄像机视频分析软件下载LiteAIServer视频智能分析平台玩手机打电话检测算法技术的实现
  • springboot购物推荐网站的设计与实现(代码+数据库+LW)
  • 【Unity3D插件】Unity3D HDRP Outline高亮发光轮廓描边插件教程
  • QT基础 UI编辑器 QT5.12.3环境 C++环境
  • 计算机网络socket编程(5)_TCP网络编程实现echo_server
  • go语言闭包捕获的是变量的引用而不是变量的值
  • 周期法频率计的设计
  • 【Linux】drop cache与reclaim的区别
  • 【Linux课程学习】:命令行参数,环境变量
  • HTB:WifineticTwo[WriteUP]
  • mac安装Pytest、Allure、brew
  • 关于相机选型的一些参数说明
  • 深入解析 Cron 表达式高级用法:Spring 与 Linux Crontab 的全面对比与实践20241120
  • 24软专 数据结构
  • 洛谷 P1616 疯狂的采药 C语言 记忆化搜索
  • #渗透测试#红蓝攻防#HW#SRC漏洞挖掘01之静态页面渗透
  • element-plus入门教程:Button
  • oneplus6线刷、trwp、magisk(apatch)、LSPosed、Shamiko、Hide My Applist
  • flux的版本
  • Kafka 数据倾斜:原因、影响与解决方案
  • 【从零开始的LeetCode-算法】3297. 统计重新排列后包含另一个字符串的子字符串数目 I