❤️爆肝六万字最全总结java数据库编程mybatis(建议收藏)(代码片段)

manor的大数据奋斗之路 manor的大数据奋斗之路     2023-01-08     145

关键词:

前言

今天复习Java数据库编程,二话不说MyBatis手把手保姆级教程献上,再也不用担心学不会!

资料:

链接:https://pan.baidu.com/s/1FIDi_9QiTuhb4x7pksGOUQ
提取码:kevf

1. MyBatis入门

1.1 概述

​ MyBatis是一个优秀的持久层框架,它对jdbc的操作数据库的过程进行封装,使开发者只需要关注 SQL 本身,而不需要花费精力去处理注册驱动、创建Connection、创建Statement、手动设置参数、结果集检索及映射等繁杂的过程代码。

  • 历史进程

    ​ MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis,实质上Mybatis对iBatis进行一些改进。

  • 多学一招

    同层产品:commons-dbutils、spring-jdbc、Hibernate

1.2 下载

MyBaits的代码由github.com管理,地址:https://github.com/mybatis/mybatis-3/releases

  • 可以直接Copy老师的JAR包

1.3 与JDBC对比

  • JDBC编写DAO的步骤

  • MyBatis编写DAO的步骤

1.4 入门案例:搭建环境

1.4.1 构建项目

  • 1)创建新项目:Java --> Java EE --> Web Application

  • 2)创建项目名:mybatis-demo01

  • 3)添加jar包WEB-INF/lib目录下(目录不存在,需手动创建)

  • 4)添加jar

1.4.2 数据库和表:User

# 创建数据库
CREATE DATABASE ssm_db1;
# 使用数据库
USE ssm_db1;
# 1.1 创建用户表
CREATE TABLE `user` (
  `uid` VARCHAR(32) NOT NULL,
  `username` VARCHAR(20) DEFAULT NULL,	#用户名
  `password` VARCHAR(32) DEFAULT NULL,	#密码
  `name` VARCHAR(20) DEFAULT NULL,		#昵称
  `email` VARCHAR(30) DEFAULT NULL,		#电子邮箱
  `telephone` VARCHAR(20) DEFAULT NULL,	#电话
  `birthday` DATE DEFAULT NULL,			#生日
  `sex` VARCHAR(10) DEFAULT NULL,		#性别
  `state` INT(11) DEFAULT 0,			#状态:0=未激活,1=已激活
  `code` VARCHAR(64) DEFAULT NULL,		#激活码
  PRIMARY KEY (`uid`)
) ;
# 1.2 初始化用户默认数据
INSERT INTO `user` VALUES ('u001','jack','1234','杰克','jack@czxy.com','13612345678','2015-11-04','男',0,NULL);
INSERT INTO `user` VALUES ('u002','rose','1234','肉丝','rose@czxy.com','13612345679','2015-11-05','女',0,NULL);
INSERT INTO `user` VALUES ('373eb242933b4f5ca3bd43503c34668b','ccc','ccc','aaa','bbb@store.com','15723689921','2015-11-04','男',0,'9782f3e837ff422b9aee8b6381ccf927bdd9d2ced10d48f4ba4b9f187edf7738'),('3ca76a75e4f64db2bacd0974acc7c897','bb','bb','张三','bbb@store.com','15723689921','1990-02-01','男',0,'1258e96181a9457987928954825189000bae305094a042d6bd9d2d35674684e6'),('62145f6e66ea4f5cbe7b6f6b954917d3','cc','cc','张三','bbb@store.com','15723689921','2015-11-03','男',0,'19f100aa81184c03951c4b840a725b6a98097aa1106a4a38ba1c29f1a496c231'),('c95b15a864334adab3d5bb6604c6e1fc','bbb','bbb','老王','bbb@store.com','15712344823','2000-02-01','男',0,'71a3a933353347a4bcacff699e6baa9c950a02f6b84e4f6fb8404ca06febfd6f'),('f55b7d3a352a4f0782c910b2c70f1ea4','aaa','aaa','小王','aaa@store.com','15712344823','2000-02-01','男',1,NULL);

1.5 入门案例:查询所有

1.5.1 JavaBean:User

package com.czxy.ssm.domain;

import java.util.Date;

/**
 *
 Create Table

 CREATE TABLE `user` (
 `uid` varchar(32) NOT NULL,
 `username` varchar(20) DEFAULT NULL,
 `password` varchar(20) DEFAULT NULL,
 `name` varchar(20) DEFAULT NULL,
 `email` varchar(30) DEFAULT NULL,
 `birthday` date DEFAULT NULL,
 `sex` varchar(10) DEFAULT NULL,
 `state` int(11) DEFAULT NULL,
 `code` varchar(64) DEFAULT NULL,
 PRIMARY KEY (`uid`)
 ) ENGINE=InnoDB DEFAULT CHARSET=utf8

 */

public class User 

	private String uid;
	private String username;
	private String password;
	private String name;
	private String email;
	private Date birthday;
	private String sex;
	private Integer state;
	private String code;


	@Override
	public String toString() 
		return "User" +
				"uid='" + uid + '\\'' +
				", username='" + username + '\\'' +
				", password='" + password + '\\'' +
				", name='" + name + '\\'' +
				", email='" + email + '\\'' +
				", birthday=" + birthday +
				", sex='" + sex + '\\'' +
				", state=" + state +
				", code='" + code + '\\'' +
				'';
	

	public String getUid() 
		return uid;
	

	public void setUid(String uid) 
		this.uid = uid;
	

	public String getUsername() 
		return username;
	

	public void setUsername(String username) 
		this.username = username;
	

	public String getPassword() 
		return password;
	

	public void setPassword(String password) 
		this.password = password;
	

	public String getName() 
		return name;
	

	public void setName(String name) 
		this.name = name;
	

	public String getEmail() 
		return email;
	

	public void setEmail(String email) 
		this.email = email;
	

	public Date getBirthday() 
		return birthday;
	

	public void setBirthday(Date birthday) 
		this.birthday = birthday;
	

	public String getSex() 
		return sex;
	

	public void setSex(String sex) 
		this.sex = sex;
	

	public Integer getState() 
		return state;
	

	public void setState(Integer state) 
		this.state = state;
	

	public String getCode() 
		return code;
	

	public void setCode(String code) 
		this.code = code;
	

	public User(String uid, String username, String password, String name, String email, Date birthday, String sex, Integer state, String code) 

		this.uid = uid;
		this.username = username;
		this.password = password;
		this.name = name;
		this.email = email;
		this.birthday = birthday;
		this.sex = sex;
		this.state = state;
		this.code = code;
	

	public User() 

	


1.5.2 编写Dao:UserMapper

之前的开发中我们编写的都是UserDao,在MyBatis将dao称为Mapper。

所以此后所有dao接口统一命名成Mapper。

  • 在MyBatis只需要编写接口即可,实现类由MyBatis自动生成,并在测试程序时自动执行。

package com.czxy.ssm.mapper;

import com.czxy.ssm.domain.User;
import org.apache.ibatis.annotations.Select;

import java.util.List;

/**
 * @author  manor的大数据之路
 *  
 */
public interface UserMapper 
    /**
     * 查询所有
     * @return
     */
    @Select("select * from user")
    public List<User> selectAll();


1.5.3 编写核心配置文件:SqlMapConfig.xml

  • 配置文件名称:SqlMapConfig.xml

  • 配置文件位置:src

  • 配置文件内容:
<?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>

	<!-- 环境: default的值引用什么id,就表示使用什么数据库了-->
	<environments default="db1">
		<!-- 配置数据库连接信息及事务 -->
		<environment id="db1">
			<!-- 表示使用事务:默认是自动开启事务 -->
			<transactionManager type="JDBC" />
			<!-- 使用连接池 -->
			<dataSource type="POOLED">
				<!-- 数据库连接基本信息 -->
				<property name="driver" value="com.mysql.cj.jdbc.Driver" />
				<property name="url" value="jdbc:mysql://localhost:3306/ssm_db1" />
				<property name="username" value="root" />
				<property name="password" value="1234" />
			</dataSource>
		</environment>
	</environments>

	<mappers>
		<!-- 表示加载此包下的所有dao接口-->
		<package name="com.czxy.ssm.mapper"/>
	</mappers>
</configuration>

1.5.4 测试类

package com.czxy.ssm.test;

import com.czxy.ssm.domain.User;
import com.czxy.ssm.mapper.UserMapper;
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;
import java.util.List;

/**
 * @author  manor的大数据之路
 *  
 */
public class Test01_SelectAll 
    public static void main(String[] args) throws IOException 

        //1 加载配置文件
        // 1.1 获得资源流
        InputStream is = Resources.getResourceAsStream("SqlMapConfig.xml");
        // 1.2 获得工厂
        SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is);

        //2 获得会话(连接)
        SqlSession session = factory.openSession();

        //3获得功能接口
        UserMapper userMapper = session.getMapper(UserMapper.class);

        //4 调用功能
        List<User> userList = userMapper.selectAll();

        //5 打印查询结果
        for (User user : userList) 
            System.out.println(user);
        
    



1.6 总结

  • 到这里MyBatis的入门案例已经完成。我们总结一下:
    • 编写SqlMapConfig.xml,用于配置数据源和需要加载的Mapper
    • 编写UserMapper.java接口,用于执行方法与SQL语句的绑定
    • 基本API使用,流程是:加载资源、获得工厂、获得会话、获得Mapper。

2. 基本操作:增删改查

2.1 模糊查询

  • 功能接口中的方法

    • 如果参数简单类型,sql语句需要使用value [不推荐]

      @Select("select * from user where name like #value")
      public List<User> selectByName(String name);
      
    • 如果使用@Param,可以进行相应的命名 【推荐】

      @Select("select * from user where name like #name")
      public List<User> selectByName(@Param("name") String name);
      
  • 测试类

package com.czxy.ssm.test;

import com.czxy.ssm.domain.User;
import com.czxy.ssm.mapper.UserMapper;
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;
import java.util.List;

/**
 * @author  manor的大数据之路
 *  
 */
public class Test02_Like 
    public static void main(String[] args) throws IOException 

        //1 加载配置文件
        // 1.1 获得资源流
        InputStream is = Resources.getResourceAsStream("SqlMapConfig.xml");
        // 1.2 获得工厂
        SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is);

        //2 获得会话(连接)
        SqlSession session = factory.openSession();

        //3获得功能接口
        UserMapper userMapper = session.getMapper(UserMapper.class);

        //4 调用功能
        List<User> userList = userMapper.selectByName("%王%");

        //5 打印查询结果
        for (User user : userList) 
            System.out.println(user);
        
    



2.2 插入数据

  • 功能接口中的方法
    /**
     * 插入数据
     * @param user
     */
    @Insert("insert into user(uid, username, password, name, email, birthday, sex, state) values(#uid,#username,#password,#name,#email,#birthday,#sex,#state)")
    public Integer insert(User user);

  • 测试类(注意:需要提交事务)
package com.czxy.ssm.test;

import com.czxy.ssm.domain.User;
import com.czxy.ssm.mapper.UserMapper;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import爆肝六万字整理的python基础,快速入门python的首先(代码片段)

文章目录1环境安装2Python的第一程序HelloWorld3变量定义和类型3.1什么是变量。3.2变量的类型3.3变量的命名规则3.4常用的数据类型转换4注释4.1单行注释4.2多行注释4.3编码5输入输出5.1输入5.2输出5.2.1格式化输出6运算符7判断语句7.1if语... 查看详情

❤️爆肝万字!一文最全总结之spring从入门到入土❤️(建议收藏)(代码片段)

文章目录最新更新前言1.Spring概述1.1介绍2.IoC入门2.1什么是IoC2.2IoC入门案例1(基础案例)2.3IoC入门案例2(依赖注入)2.4IoC入门案例3(面向接口编程)2.5IoC入门案例4(整合JUnit4)3.IoC详解3.1Bean的创建... 查看详情

❤️爆肝万字!一文最全总结之spring从入门到入土❤️(建议收藏)(代码片段)

文章目录前言1.Spring概述1.1介绍2.IoC入门2.1什么是IoC2.2IoC入门案例1(基础案例)2.3IoC入门案例2(依赖注入)2.4IoC入门案例3(面向接口编程)2.5IoC入门案例4(整合JUnit4)3.IoC详解3.1Bean的创建3.2依赖注... 查看详情

❤️爆肝四万字的mysql总结全面整理+详细解释❤️(代码片段)

文章目录1.初识MySQL1.2数据库分类1.3MySQL简介1.4MySQL安装1.5MySQL(压缩包)安装配置1.6SQLyog使用的注意事项1.7连接数据库和一些基本命令2.操作数据库2.1操作数据库2.2数据库的数据类型(列类型)2.3数据库的字段属性2.4创建数据库表(... 查看详情

python基础知识点六万字总结,爆肝一周熬夜完成建议收藏(代码片段)

大家好,我是辣条。今天给大家带来Python基础知识点的总结,不夸张的说我一周才写完,这才是第一弹,如果大家喜欢记得三连呦,我会火速更新下一弹,争取把这个系列做完,希望得到大家的支持。... 查看详情

❤️❤️新生代农民工爆肝8万字,整理python编程从入门到实践(建议收藏)已码:8万字❤️❤️(代码片段)

人生苦短,我用Python开发环境搭建安装Python验证是否安装成功安装Pycharm配置pycharm编码规范基本语法规则保留字单行注释多行注释行与缩进多行语句数据类型空行等待用户输入print输出运算符算术运算符逻辑运算符成员运算符... 查看详情

❤️六万字《算法和数据结构》之《画解数据结构》总纲,算法零基础教程❤️(建议收藏)(代码片段)

前言  据说「前言」写太多会被人唾弃,所以,这次直接进入正题。「画解数据结构」点击我跳转末尾获取粉丝专属《算法和数据结构》源码。第一章线性表❤️《画解数据结构》(1-1)画解顺序表❤️❤️《... 查看详情

❤️六万字《算法和数据结构》之《画解数据结构》总纲,算法零基础教程❤️(建议收藏)(代码片段)

前言  据说「前言」写太多会被人唾弃,所以,这次直接进入正题。「画解数据结构」点击我跳转末尾获取粉丝专属《算法和数据结构》源码。第一章线性表❤️《画解数据结构》(1-1)画解顺序表❤️❤️《... 查看详情

爆肝一周面试10多家中大厂后的万字总结——❤️javaweb篇❤️(建议收藏)(代码片段)

⭐欢迎订阅《大厂面试突击》专栏,面试10多家大厂总结出的高频面试知识,免费阶段大家赶快订阅⭐更多精品专栏简介点这里⭐更多大厂全路线学习视频+笔记,PC端看左侧「关于作者」,手机端「私信」博主... 查看详情

python基础知识点六万字总结,爆肝一周熬夜完成建议收藏(代码片段)

大家好,我是辣条。今天给大家带来Python基础知识点的总结,不夸张的说我一周才写完,这才是第一弹,如果大家喜欢记得三连呦,我会火速更新下一弹,争取把这个系列做完,希望得到大家的支持。... 查看详情

☀️~算法系列之爆肝万字总结七种查找算法,持续补充更新中,建议收藏~☀️(代码片段)

🍅作者主页:Roninaxious🍅欢迎点赞👍收藏⭐留言📝🍅话不多说🍁开卷!🚢顺序查找算法🚢二分查找算法💥优化二分查找算法🚢插值查找算法🚢斐波那契查找算法🚢顺序... 查看详情

❤️六万字《spring框架从入门到精通》(建议收藏)❤️(代码片段)

❤️Spring代码:https://github.com/Donkequan/Spring-Study❤️希望各位博友三连+关注!!!1、简介spring理念:是现有的技术更加容易使用,本身是一个大杂烩。SSH:Struct2+Spring+HibernateSSM:Spri 查看详情

❤️肝爆六万字+各种图解案例《大数据etl开发之kettle工具》小白保姆级教程❤️建议收藏

文章目录第0章ETL简介第1章Kettle简介1.1Kettle是什么1.2Kettle的两种设计1.3Kettle的核心组件1.4Kettle的特点第2章Kettle安装部署2.1Kettle下载2.1.1下载地址2.1.2Kettle目录说明2.1.2Kettle文件说明2.2Kettle安装部署2.2.1概述2.2.2安装2.3Kettle界面介绍2.... 查看详情

☀️~爆肝万字总结递归~❤️玩转算法系列之我如何才能掌握递归解题的能力❤️~十大经典问题助你突破极限~☀️(代码片段)

🍅作者主页:Roninaxious🍅欢迎点赞👍收藏⭐留言📝🚢前言🎐何为递归递归顾名思义就是´递´和´归´👀所谓的‘递’也就是“向下递去”,这个问题可以分解为若干个且形式相同的子问题... 查看详情

六万字java高并发编程入门第十九篇:并发编程入门总览包教包会值得收藏

您好,我是码农飞哥,感谢您阅读本文,欢迎一键三连哦。阅读本文你将收获:1.如何进行并发编程以及如何处理线程安全问题;2.了解各种并发容器的数据结构。专栏地址。 查看详情

六万字java高并发编程入门第十九篇:并发编程入门总览包教包会值得收藏

您好,我是码农飞哥,感谢您阅读本文,欢迎一键三连哦。阅读本文你将收获:1.如何进行并发编程以及如何处理线程安全问题;2.了解各种并发容器的数据结构。专栏地址。 查看详情

(大厂必备)厂长熬夜爆肝万字之多线程高并发juc编程⭐学妹已收藏(代码片段)

🔥(大厂必备)厂长熬夜爆肝万字之多线程高并发JUC编程(一)⭐学妹已收藏❤️‍大家好,我是java厂长,今天带你们体验一把多线程高并发的面试高频!❤️‍关于作者作者介绍🍓博客主页:作者主页🍓... 查看详情

(大厂必备)厂长熬夜爆肝万字之多线程高并发juc编程⭐学妹已收藏(代码片段)

🔥(大厂必备)厂长熬夜爆肝万字之多线程高并发JUC编程(二)⭐学妹已收藏❤️‍大家好,我是java厂长,今天再次带你们体验一把多线程高并发的面试高频!❤️‍关于作者作者介绍🍓博客主页:作者主页&#... 查看详情