Mybatis快速入门(1)工程搭建+增删改查

MyBatis 是一款优秀的持久层框架,
它支持定制化 SQL、存储过程以及高级映射。
MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。
MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Ordinary Java Object,普通的 Java对象)映射成数据库中的记录。

一、需求列表

根据用户ID查询用户信息
根据用户名查找用户列表
添加用户
修改用户
删除用户

在这之前需要创建数据库

SQL语句

SET FOREIGN_KEY_CHECKS=0;
-- ----------------------------
-- Table structure for `orders`
-- ----------------------------
DROP TABLE IF EXISTS `order`;
CREATE TABLE `order` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `user_id` int(11) NOT NULL COMMENT '下单用户id',
  `number` varchar(32) NOT NULL COMMENT '订单号',
  `createtime` datetime NOT NULL COMMENT '创建订单时间',
  `note` varchar(100) DEFAULT NULL COMMENT '备注',
  PRIMARY KEY (`id`),
  KEY `FK_orders_1` (`user_id`),
  CONSTRAINT `FK_order_id` FOREIGN KEY (`user_id`) REFERENCES `user` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8;
-- ----------------------------
-- Records of orders
-- ----------------------------
INSERT INTO `order` VALUES ('3', '1', '1000010', '2015-02-04 13:22:35', null);
INSERT INTO `order` VALUES ('4', '1', '1000011', '2015-02-03 13:22:41', null);
INSERT INTO `order` VALUES ('5', '10', '1000012', '2015-02-12 16:13:23', null);
-- ----------------------------
-- Table structure for `user`
-- ----------------------------
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `username` varchar(32) NOT NULL COMMENT '用户名称',
  `birthday` date DEFAULT NULL COMMENT '生日',
  `sex` char(1) DEFAULT NULL COMMENT '性别',
  `address` varchar(256) DEFAULT NULL COMMENT '地址',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=27 DEFAULT CHARSET=utf8;
-- ----------------------------
-- Records of user
-- ----------------------------
INSERT INTO `user` VALUES ('1', '王五', null, '2', null);
INSERT INTO `user` VALUES ('10', '张三', '2019-07-10', '1', '北京市');
INSERT INTO `user` VALUES ('16', '张小明', null, '1', '河南郑州');
INSERT INTO `user` VALUES ('22', '陈小明', null, '1', '河南郑州');
INSERT INTO `user` VALUES ('24', '张三丰', null, '1', '河南郑州');
INSERT INTO `user` VALUES ('25', '陈小明', null, '1', '河南郑州');
INSERT INTO `user` VALUES ('26', '王五', null, null, null);

二、工程搭建(增删改查)

1.创建工程,并创建包结构以及对应的lib文件

在这里插入图片描述

2.导入依赖jar包,官网下载

github下载地址:
https://github.com/mybatis/mybatis-3/releases
在这里插入图片描述

下载解压后

在这里插入图片描述

导入jar

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.配置SqlMapConfig.xml
创建config

在这里插入图片描述
在这里插入图片描述

创建xml

在这里插入图片描述
在这里插入图片描述

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>
	<!-- 和spring整合后 environments配置将废除 -->
	<environments default="development">
		<environment id="development">
			<!-- 使用jdbc事务管理 -->
			<transactionManager type="JDBC" />
			<!-- 数据库连接池 -->
			<dataSource type="POOLED">
				<property name="driver" value="com.mysql.jdbc.Driver" />
				<property name="url"
					value="jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf-8" />
				<property name="username" value="root" />
				<property name="password" value="root" />
			</dataSource>
		</environment>
	</environments>
</configuration>
4.配置log4j.properties

创建log4j.properties
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

# Global logging configuration
log4j.rootLogger=DEBUG, stdout
# Console output...
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n
5.创建pojo到工程目录下

创建几个类
创建order和user类
在这里插入图片描述

package com.itzheng.mybatis.pojo;

import java.util.Date;

public class Order {
    
    
	private Integer id;

	private Integer userId;

	private String number;

	private Date createtime;

	private String note;

	public Integer getId() {
    
    
		return id;
	}

	public void setId(Integer id) {
    
    
		this.id = id;
	}

	public Integer getUserId() {
    
    
		return userId;
	}

	public void setUserId(Integer userId) {
    
    
		this.userId = userId;
	}

	public String getNumber() {
    
    
		return number;
	}

	public void setNumber(String number) {
    
    
		this.number = number == null ? null : number.trim();
	}

	public Date getCreatetime() {
    
    
		return createtime;
	}

	public void setCreatetime(Date createtime) {
    
    
		this.createtime = createtime;
	}

	public String getNote() {
    
    
		return note;
	}

	public void setNote(String note) {
    
    
		this.note = note == null ? null : note.trim();
	}

	@Override
	public String toString() {
    
    
		return "Order [id=" + id + ", userId=" + userId + ", number=" + number + ", createtime=" + createtime
				+ ", note=" + note + "]";
	}

}
package com.itzheng.mybatis.pojo;

import java.util.Date;

public class User {
    
    

	private Integer id;
	private String username;// 用户姓名
	private String sex;// 性别
	private Date birthday;// 生日
	private String address;// 地址

	public Integer getId() {
    
    
		return id;
	}

	public void setId(Integer 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 Date getBirthday() {
    
    
		return birthday;
	}

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

	public String getAddress() {
    
    
		return address;
	}

	public void setAddress(String address) {
    
    
		this.address = address;
	}

	@Override
	public String toString() {
    
    
		return "User [id=" + id + ", username=" + username + ", sex=" + sex + ", birthday=" + birthday + ", address="
				+ address + "]";
	}

}

6.配置sql查询的映射文件

创建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">
<!-- namespace:命名空间,用于隔离SQL语句,后继有重要 -->
<mapper namespace="user"> 
</mapper>
7.SqlMapConfig.xml当中加载映射文件

在这里插入图片描述

	<!-- 加载映射文件 -->
	<mappers>
		<mapper resource="mybatis/user.xml" />
	</mappers>

三、完成需求(增删改查)

1、根据用户ID查询用户信息
(1)编写SQL语句
SELECT 	id, 
	username, 
	birthday, 
	sex, 
	address
FROM   `user`
WHERE id = 1
(2)配置user映射文件:修改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">
<!-- namespace:命名空间,用于隔离SQL语句,后继有重要 
	#{}:是一个占位符,相当于jdbc的?号
-->
<mapper namespace="user"> 
	<!-- 
		id:sql语句的唯一标识
		parameterType:入参的数据类型
		resultType:返回结果的数据类型
	 -->
	<select id="getUserByid" parameterType="int" resultType="com.itzheng.mybatis.pojo.User" >
			SELECT * FROM USER WHERE id = #{id1}
	</select>
</mapper>
(3)编写测试程序:创建MybatisTest类

在这里插入图片描述

package com.itzheng.mybatis.test;
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 com.itzheng.mybatis.pojo.User;
public class MybatisTest {
    
    
	@Test
	public void testGetUserById() throws IOException {
    
    
		// 加载配置文件,创建SqlSessionFactoryBuilder
		SqlSessionFactoryBuilder ssfb = new SqlSessionFactoryBuilder();
		// 创建核心配置文件的输入流
		InputStream inputStream = Resources.getResourceAsStream("SqlMapConfig.xml");
		// 通过输入流创建sqlSessionFactory对象
		SqlSessionFactory sqlSessionFactory = ssfb.build(inputStream);
		// 创建SqlSession对象
		SqlSession sqlSession = sqlSessionFactory.openSession();
		// 执行查询,参数一SQL id    参数二,入参
		User user = (User) sqlSession.selectOne("user.getUserByid", 1);
		//输出查询到的对象
		System.out.println(user);
		//释放资源
		sqlSession.close();
	}
}
2、根据用户名模糊查询用户列表

方式一

(1)编写SQL语句
SELECT 	id, 
	username, 
	birthday, 
	sex, 
	address 
FROM   `user`
WHERE username LIKE '%张%'
(2)配置user映射文件:修改user.xml

在这里插入图片描述

	<!-- 
		resultType:如果返回结果为集合,只需要设置为每一个数据类型
	 -->
	<select id="getUserByUserName" parameterType="string" resultType="com.itzheng.mybatis.pojo.User" >
		SELECT id,username,birthday,sex,address FROM   `user` WHERE username LIKE #{name}
	
	</select>
(3)编写测试程序:创建SqlSessionFactoryUtils抽取加载配置文件以及查询数据库的内容

在这里插入图片描述

package com.itzheng.mybatis.jdbc.utils;
import java.io.IOException;
import java.io.InputStream;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
/*
 * SqlSessionFactory工具类
 */
public class SqlSessionFactoryUtils {
    
    
	private static SqlSessionFactory sqlSessionFactory;
	static {
    
    
		try {
    
    
			// 加载配置文件,创建SqlSessionFactoryBuilder
			SqlSessionFactoryBuilder ssfb = new SqlSessionFactoryBuilder();
			// 创建核心配置文件的输入流
			InputStream inputStream;
			inputStream = Resources.getResourceAsStream("SqlMapConfig.xml");
			// 通过输入流创建sqlSessionFactory对象
			sqlSessionFactory = ssfb.build(inputStream);

		} catch (IOException e) {
    
    
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	/*
	 * 获取sqlSessionFactory
	 */
	public static SqlSessionFactory getSqlSessionFactory() {
    
    
		return sqlSessionFactory;
	}
}
(4) 在SqlSessionFactoryUtils当中的testGetUserByUserName()方法,方式一

在这里插入图片描述

	@Test
	public void testGetUserByUserName() {
    
    
		// 获取sqlSessionFactory
		SqlSessionFactory sqlSessionFactory = SqlSessionFactoryUtils.getSqlSessionFactory();
		// 创建SqlSession
		SqlSession openSession = sqlSessionFactory.openSession();
		List<User> selectList = openSession.selectList("user.getUserByUserName", "%张%");
		for (User user : selectList) {
    
    
			System.out.println(user);
		}
		// 释放资源
		openSession.close();
	}

方式二

(1)修改user.xml :使用字符串拼接指令${}:字符串拼接指令,如果入参为普通数据类型{}内部只能写value

在这里插入图片描述

(2)修改MybatisTest的testGetUserByUserName方法

在这里插入图片描述

	@Test
	public void testGetUserByUserName() {
    
    
		// 获取sqlSessionFactory
		SqlSessionFactory sqlSessionFactory = SqlSessionFactoryUtils.getSqlSessionFactory();
		// 创建SqlSession
		SqlSession openSession = sqlSessionFactory.openSession();
		//List<User> selectList = openSession.selectList("user.getUserByUserName", "%张%");
		List<User> selectList = openSession.selectList("user.getUserByUserName", "张");
		for (User user : selectList) {
    
    
			System.out.println(user);
		}
		// 释放资源
		openSession.close();
	}

在这里插入图片描述

3、mybatis入门
(1)编写SQL语句
INSERT INTO `user `
	(id, 
	username, 
	birthday, 
	sex, 
	address )
VALUES
	('id', 
	'username', 
	'birthday', 
	'sex', 
	'address' );
(2)配置user映射文件:修改user.xml

在这里插入图片描述

<!-- 插入用户 -->
	<insert id="insertUser" parameterType="com.itzheng.mybatis.pojo.User">
		INSERT INTO USER
		            (`username`,
		             `birthday`,
		             `sex`,
		             `address`)
		VALUES (#{username},
		        #{birthday},
		        #{sex},
		        #{address});
	</insert>
(3)编写测试程序:MybatisTest当中创建testInsertUser方法

在这里插入图片描述

@Test
	public void testInsertUser() {
    
    
		// 获取sqlSessionFactory
		SqlSessionFactory sqlSessionFactory = SqlSessionFactoryUtils.getSqlSessionFactory();
		// 创建SqlSession
		SqlSession sqlSession = sqlSessionFactory.openSession();
		User user = new User();
		user.setSex("1");
		user.setBirthday(new Date());
		user.setUsername("张飞");
		user.setAddress("四川");
		sqlSession.insert("user.insertUser", user);
		//提交事务
		sqlSession.commit();
		// 释放资源
		sqlSession.close();
	}

插入成功
在这里插入图片描述

(4)将sqlSessionFactory.openSession(true);设置为true自动提交事务

在这里插入图片描述

4、插入用户,返回主键

返回主键:方式一

(1)修改user.xml

在这里插入图片描述

(2)MybatisTest

在这里插入图片描述

@Test
	public void testInsertUser() {
    
    
		// 获取sqlSessionFactory
		SqlSessionFactory sqlSessionFactory = SqlSessionFactoryUtils.getSqlSessionFactory();
		// 创建SqlSession
		SqlSession sqlSession = sqlSessionFactory.openSession(true);// 设置为true自动提交事务
		User user = new User();
		user.setSex("1");
		user.setBirthday(new Date());
		user.setUsername("张飞4");
		user.setAddress("四川");
		sqlSession.insert("user.insertUser", user);
		System.out.println(user);// 输出数控影响的行数
		// 提交事务
		// sqlSession.commit();
		// 释放资源
		sqlSession.close();
	}

返回主键:方式二

(1)修改user.xml:替代了SQL语句并返回了int类型的值,到User的id当中

在这里插入图片描述

<insert id="insertUser" parameterType="com.itzheng.mybatis.pojo.User" 
useGeneratedKeys="true" keyProperty="id">
(2)MybatisTest当中的testInsertUser方法得到结果

在这里插入图片描述

5、插入用户,uuid使用
a、修改user的表结构

在这里插入图片描述

b、修改User类

在这里插入图片描述

	private String uuid2;
	public String getUuid2() {
    
    
		return uuid2;
	}
	public void setUuid2(String uuid2) {
    
    
		this.uuid2 = uuid2;
	}

在这里插入图片描述

c、修改user.xml

创建新的插入数据库的规则
在这里插入图片描述

d、在MybatisTest当中添加testInsertUserUUID方法

在这里插入图片描述

	@Test
	public void testInsertUserUUID() {
    
    
		// 获取sqlSessionFactory
		SqlSessionFactory sqlSessionFactory = SqlSessionFactoryUtils.getSqlSessionFactory();
		// 创建SqlSession
		SqlSession sqlSession = sqlSessionFactory.openSession(true);// 设置为true自动提交事务
		User user = new User();
		user.setSex("1");
		user.setBirthday(new Date());
		user.setUsername("张飞7");
		user.setAddress("四川");
		sqlSession.insert("user.insertUserUUID", user);
		System.out.println(user);// 输出数控影响的行数
		// 提交事务
		// sqlSession.commit();
		// 释放资源
		sqlSession.close();
	}
6、修改用户
(1)修改user.xml

在这里插入图片描述

<!-- 更新用户 -->
	<update id="updateUser" parameterType="com.itzheng.mybatis.pojo.User"  >
		UPDATE `user`
		SET
		`username` = #{username}
		WHERE
		`id` = #{id} ;
	</update>
(2)在MybatisTest当中添加testUpdateUser方法

在这里插入图片描述

@Test
	public void testUpdateUser() {
    
    
		// 获取sqlSessionFactory
		SqlSessionFactory sqlSessionFactory = SqlSessionFactoryUtils.getSqlSessionFactory();
		// 创建SqlSession
		SqlSession sqlSession = sqlSessionFactory.openSession(true);// 设置为true自动提交事务
		User user = new User();
		user.setId(30);
		user.setUsername("张角");
		sqlSession.insert("user.updateUser", user);
		// 提交事务
		// sqlSession.commit();
		// 释放资源
		sqlSession.close();
	}
7、删除用户
(1)修改user.xml

在这里插入图片描述

<!-- 删除用户 -->
	<update id="deleteUser" parameterType="int"  >
		DELETE `user`
		FROM `user`
		WHERE `id` = #{id};
	</update>
(2)在MybatisTest当中添加testDeleteUser方法

在这里插入图片描述

	@Test
	public void testDeleteUser() {
    
    
		// 获取sqlSessionFactory
		SqlSessionFactory sqlSessionFactory = SqlSessionFactoryUtils.getSqlSessionFactory();
		// 创建SqlSession
		SqlSession sqlSession = sqlSessionFactory.openSession(true);// 设置为true自动提交事务

		sqlSession.delete("user.deleteUser", 33);
		// 提交事务
		// sqlSession.commit();
		// 释放资源
		sqlSession.close();
	}

三、Mybatis的架构体系

在这里插入图片描述
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_44757034/article/details/112845474
今日推荐