Mybatis快速入门并实现CRUD操作
MyBatis快速入门
思路流程:搭建环境—>导入Mybatis–>编写代码—>测试
1、代码演示
1.1、搭建数据库
CREATE DATABASE `mybatis`;USE `mybatis`;CREATE TABLE `user` (`id` int(20) NOT NULL AUTO_INCREMENT,`username` varchar(50) NOT NULL,`address` varchar(50) NOT NULL,PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;insert into `user`(`id`,`username`,`address`)
values (1,'詹姆斯','克里夫'),
(2,'科比','洛杉矶'),
(3,'保罗','洛杉矶'),
(4,'苏炳添','中国');
1.2、导入MyBatis相关依赖
<!--导入mybatis依赖--><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.5.5</version></dependency><!--导入mysql依赖--><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.21</version></dependency><!--单元测试--><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.13</version><scope>test</scope></dependency>
1.3、编写Mybatis核心配置文件
<?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><!--配置环境(可以配置多套环境,可以指定选用的环境)--><environments default="development"><!--配置mysql的环境--><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/mybatis?serverTimezone=UTC"/><property name="username" value="root"/><property name="password" value="root"/></dataSource></environment></environments><!--指定映射配置文件的位置--><mappers><mapper resource="mapper/UserMapper.xml"/></mappers>
</configuration>
1.4、编写实体类
package com.lili.entity;/*** 对应数据库下的t_user表** @author: QiJingJing* @create: 2021/8/6*/
public class User {/*** 用户编号*/private int id;/*** 姓名*/private String username;/*** 住址*/private String address;public void setId(int id) {this.id = id;}public User() {}public User(String username, String address) {this.username = username;this.address = address;}public int getId() {return this.id;}public void setUsername(String username) {this.username = username;}public String getUsername() {return this.username;}public void setAddress(String address) {this.address = address;}public String getAddress() {return this.address;}@Overridepublic String toString() {return "User{" +"id=" + id +", username='" + username + '\'' +", address='" + address + '\'' +'}';}
}
1.5、编写Mybatis工具类(获取SqlSession对象)
package com.lili.utils;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;/*** 获取sqlSession对象** @author: QiJingJing* @create: 2021/8/6*/
public class MybatisUtil {private static SqlSessionFactory sqlSessionFactory;static {try {// 获取sqlSessionFactoryInputStream in = Resources.getResourceAsStream("mybatis-config.xml");sqlSessionFactory = new SqlSessionFactoryBuilder().build(in);} catch (IOException e) {e.printStackTrace();}}/*** 获取sqlSession对象*/public static SqlSession getSqlSession() {return sqlSessionFactory.openSession();}
}
1.6、编写Mapper接口类
public interface UserMapper {/*** 查询所有操作*/List<User> findAll();
}
1.7、编写Mapper.xml配置文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapperPUBLIC "-//mapper.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.lili.dao.UserMapper"><!--查询所有信息--><select id="findAll" resultType="com.lili.entity.User">select *from user</select>
</mapper>
1.8、编写测试类
public class MybatisTest {@Testpublic void userDaoTest() {// 放到 try 里面sqlSession会自动关闭try (SqlSession sqlSession = MybatisUtil.getSqlSession()) {// 执行sqlUserMapper mapper = sqlSession.getMapper(UserMapper.class);List<User> userList = mapper.findAll();userList.forEach(System.out::println);} catch (Exception e) {e.printStackTrace();}}
}
1.9、运行测试,结果如下
User{id=1, username='詹姆斯', address='克里夫'}
User{id=2, username='科比', address='洛杉矶'}
User{id=3, username='保罗', address='洛杉矶'}
User{id=4, username='苏炳添', address='中国'}
2、CRUD
2.1、select
select语句的属性
id
- 命名空间中唯一标识符
- 接口中的方法必须与映射文件中的SQL语句ID一一对应
parameterType
- 传入SQL的参数类型。【如果参数过多可以使用Map】
resultType:
- SQL语句返回值类型。【完整的类名或别名】
需求1:根据id查询用户
1.在UserMapper中添加对应方法
public interface UserMapper {/*** 查询所有操作*/List<User> findAll();/*** 根据id查询用户*/User findById(@Param("id") int id);
}
2.在UserMapper.xml中添加对应select语句
<!--查询根据Id查询用户-->
<select id="findById" parameterType="integer" resultType="com.lili.entity.User">select *from userwhere id = #{id}
</select>
3.测试类中进行测试
@Testpublic void test2() {// 获取SqlSessiontry (SqlSession sqlSession = MybatisUtil.getSqlSession()) {// 得到UserMapper对象UserMapper mapper = sqlSession.getMapper(UserMapper.class);// 执行查询User user = mapper.findById(1);// 打印System.out.println(user);} catch (Exception e) {e.printStackTrace();}}
4.输出如下
User{id=1, username='詹姆斯', address='克里夫'}
需求2:根据用户名和住址查询用户
方法一:直接在方法中传递参数
在接口方法的参数前加 @Param属性
Sql语句编写的时候,直接取@Param中设置的值即可,不需要单独设置参数类型
User findByUA(@Param("username") String username,@Param("address") String address);<select id="findByUA" resultType="com.lili.entity.User">select *from userwhere username = #{username}and address = #{address}</select>
方法二:使用Map传参
1.在接口方法上,直接使用map参数
User findByMap(Map<String,Object> map);
2.UserMapper.xml
<select id="findByMap" parameterType="map" resultType="com.lili.entity.User">select *from userwhere username = #{username}and address = #{address}
</select>
3.在使用方法的时候,Map的key为sql中取得值即可,没有顺序要求
Map<String,Object> map = new HashMap<>();
map.put("username","苏炳添");
map.put("address","中国");
// 执行查询
User user = mapper.findByMap(map);
2.2、insert
需求:给数据库增加一个用户
1.在UserMapper中添加对应方法
int addUser(User user);
2.UserMapper.xml
<insert id="addUser" parameterType="com.lili.entity.User">insert into user (`id`, `username`, `address`)values (#{id}, #{username}, #{address})</insert>
3.测试代码
User user = new User();
user.setId(5);
user.setUsername("齐菁菁");
user.setAddress("河南");
// 执行添加
int i = mapper.addUser(user);
System.out.println(i);
// 注意:增删改操作必须提交
sqlSession.commit();
2.3、update
需求 :把id为5的地址改为中国
1.在UserMapper中添加对应方法
int update(@Param("address") String address,@Param("id") int id);
2.UserMapper.xml
<update id="update" >update userset address = #{address}where id = #{id}</update>
3.测试代码
UserMapper mapper = sqlSession.getMapper(UserMapper.class);int i = mapper.update("中国", 5);System.out.println(i);// 注意:增删改操作必须提交sqlSession.commit();
2.4、delete
需求 :根据id删除一个用户
1.在UserMapper中添加对应方法
int deleteById(@Param("id") int id);
2.UserMapper.xml
<delete id="deleteById" >delete from user where id = #{id}</delete>
3.测试代码
int i = mapper.deleteById(1);System.out.println(i);// 注意:增删改操作必须提交sqlSession.commit();
小结:
所有的增删改操作都需要提交事务!
接口所有的普通参数,尽量都写上@Param参数,尤其是多个参数时,必须写上!
有时候根据业务的需求,可以考虑使用map传递参数!
为了规范操作,在SQL的配置文件中,我们尽量将Parameter参数和resultType都写上!
Mybatis快速入门并实现CRUD操作相关推荐
- MyBatis快速入门——第三章、DML语句操作
MyBatis快速入门--第三章.DML语句操作 目录 在接口类中添加[UsersMapper.java] 修改[com.item.mapper.UsersMapper.] [action.java] ...
- MyBatis学习总结(1)——MyBatis快速入门
2019独角兽企业重金招聘Python工程师标准>>> 一.Mybatis介绍 MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis消除了几乎所 ...
- mybatis select count(*) 一直返回0 mysql_Mybatis教程1:MyBatis快速入门
点击上方"Java技术前线",选择"置顶或者星标" 与你一起成长 一.Mybatis介绍 MyBatis是一个支持普通*SQL*查询,存储过程和高级映射的优秀持 ...
- MyBatis学习笔记(一)——MyBatis快速入门
转自孤傲苍狼的博客:http://www.cnblogs.com/xdp-gacl/p/4261895.html 一.Mybatis介绍 MyBatis是一个支持普通SQL查询,存储过程和高级映射的优 ...
- Java基础-SSM之mybatis快速入门篇
Java基础-SSM之mybatis快速入门篇 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 其实你可能会问什么是SSM,简单的说就是spring mvc + Spring + m ...
- 视频教程-mybatis快速入门到精通-Java
mybatis快速入门到精通 十年项目开发经验,主要从事java相关的开发,熟悉各种mvc开发框架. 王振伟 ¥18.00 立即订阅 扫码下载「CSDN程序员学院APP」,1000+技术好课免费看 A ...
- Mybatis Plus 入门 简单的CRUD 使用详解 条件查询 分页查询 DML操作 MP代码生成器
Mybatis Plus入门 MP是 MybatisPlus,简称MP,是一个 Mybatis 的增强工具,在 Mybatis 的基础上只做增强不做改变.MP为简化开发.提高效率而生. 它已经封装好了 ...
- MyBatis 快速入门
MyBatis 简介 MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为 ...
- mybatis 一对多_Springboot整合Mybatis实现级联一对多CRUD操作
在关系型数据库中,随处可见表之间的连接,对级联的表进行增删改查也是程序员必备的基础技能.关于Spring Boot整合Mybatis在之前已经详细写过,不熟悉的可以回顾Spring Boot整合Myb ...
- mybatis快速入门
1.Mybatis MyBatis 原本是apache的一个开源项目iBatis,2010年这个项目由Apache Software Foundation迁移到了Google Code,并且改名为My ...
最新文章
- 【字符串】大小写的转换
- Android+Java中使用RSA加密实现接口调用时的校验功能
- DELPHI加密字串(异或运算加密)
- VMware虚拟机磁盘操作占用过高问题(转:http://blog.csdn.net/New_When/article/details/73731149)
- 不确定规划及应用代码_性能测试划分之应用领域
- C++异常以及错误处理
- c++快速读取配置文件
- mysql 主从数据库设置方法
- 【令人头秃的线段树】线段树入门题目详解(代码逐句分析)
- 天线远场定义_高频电磁仿真软件的选型和评估(天线、雷达、电路与器件、无线电总体等)——探讨分享,思路梳理...
- 面试评估表和评估指标雷达图(附模板下载)
- linux虚拟机scsi类型,linux虚拟机的scsi设备id与盘符不一致问题的解决
- Unity世界坐标转换屏幕坐标(概览)
- SBX子板类及update_atr()方法
- 传国宝玺 第三部 巴山藏宝洞 第三十四章 千魂魈
- 武汉音乐学院声乐专业考研上岸经验分享
- BCG 全局主题样式
- 模拟对象测试技术Mock(一)
- 模型auc指标_auc致命缺陷模型指标
- 基于JAVA供电公司安全生产考试系统计算机毕业设计源码+数据库+lw文档+系统+部署