Mybatis入门案例

本文详细介绍了Mybatis这一轻量级持久化层框架的使用,包括配置全局xml文件、建立模型类、持久化层接口及XML映射文件,并通过实际案例展示了增删查改操作。案例中涉及了SQL语句的编写与执行,展示了Mybatis如何简化JDBC操作。
摘要由CSDN通过智能技术生成


一、Mybatis简介

mybatis是一个轻量级(轻量级框架不带有侵略性API,对容器也没有依赖性,易于进行配置,易于通用,启动时间较短)的持久化层框架,对JDBC操作进行封装,使开发者本身更多关注于SQL语句的执行效率

mybatis是一个半自动(对象+SQL语句)ORM映射框架,支持一对一、一堆多实现,多对多采用两个一对多实现


二、使用案例

项目结构
项目结构

1.引入jar包

外包图片

2.mybatis-config.xml全局配置文件

在src目录下创建mybatis-config.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>
	<!--设置同名(非必要)-->
	<typeAliases>
		<package name="model" />
	</typeAliases>
	<environments default="development">
		<environment id="development">
			<transactionManager type="JDBC" />
			<dataSource type="POOLED">
				<property name="driver" value="com.mysql.jdbc.Driver" />
				<property name="url"
					value="jdbc:mysql://localhost:3306/abc?characterEncoding=utf-8" />
				<property name="username" value="root" />
				<property name="password" value="123456" />
			</dataSource>
		</environment>
	</environments>
</configuration>

3.构建模型类和相应的数据库表

模型Blog类代码如下:

package model;

import java.io.Serializable;

/**
 * 基本的模型类
 * 
 * @author zYan_g 对象序列化是一个用于将对象状态转换为字节流的 过程,可以将其保存到磁盘文件中或通过网络发送
 *         到任何其他程序;从字节流创建对象的相反的过程 称为反序列化。而创建的字节流是与平台无关的,
 *         在一个平台上序列化的对象可以在不同的平台上反序列化。
 * 
 */
public class Blog implements Serializable {
	//Java的序列化机制是通过在运行时判断类的serialVersionUID来验证版本一致性的
	// 这里是用来表明版本一致性的
	private static final long serialVersionUID = 3802226451645914662L;

	private int tid;
	private String tname;
	private int sid;

	public int getTid() {
		return tid;
	}

	public void setTid(int tid) {
		this.tid = tid;
	}

	public String getTname() {
		return tname;
	}

	public void setTname(String tname) {
		this.tname = tname;
	}

	public int getSid() {
		return sid;
	}

	public void setSid(int sid) {
		this.sid = sid;
	}

	@Override
	public String toString() {
		return "Blog [tid=" + tid + ", tname=" + tname + ", sid=" + sid + "]";
	}

}

模型类代码如图所示:
数据库表

4.构建持久化层

1.持久化层java代码如下:

package dao;

import java.util.List;
import java.util.Map;

import org.apache.ibatis.annotations.Param;

import model.ABC;
import model.Blog;

/**
 * 
 * @author zYan_g 对Blog类的持久化操作
 */
public interface BlogMapper {
	/**
	 * 根据id查询一个Blog信息
	 * 
	 * @param id tid
	 * @return 查到一个Blog类的实体信息
	 */
	Blog selectBlogById(int id);

	/**
	 * 查询所有Blog信息
	 * 
	 * @return 查到的所有Blog类的实体信息
	 */
	List<Blog> selectBlogAll();

//	Blog selectBlog(@Param("a")int tid,@Param("b")int sid);
//	ABC selectBlog2(@Param("a")int tid,@Param("b")int sid);
	/**
	 * 添加Blog到数据库中
	 * 
	 * @param b 一个已知的Blog信息
	 * @return SQL影响的记录的数量
	 */
	int insert1(Blog b);

	/**
	 * 批量添加
	 * 
	 * @param item
	 * @return SQL影响的记录的数量
	 */
	int insert_list(List item);

	/**
	 * 更新
	 * 
	 * @param tid
	 * @param tname
	 * @param sid
	 * @return SQL影响的记录的数量
	 */
	int update1(@Param("a") int tid, @Param("b") String tname, @Param("c") int sid);

	/**
	 * 删除
	 * 
	 * @param tid
	 * @return SQL影响的记录的数量
	 */
	int delete1(@Param("a") int tid);
}

2.dao配置文件BlogMapper.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">
<!-- 接口路径 -->
<mapper namespace="dao.BlogMapper">
	<resultMap id="a" type="ABC">
		<id property="x" column="tid" />
		<result property="y" column="tname" />
		<result property="z" column="sid" />
	</resultMap>

	<resultMap id="b" type="Blog">
		<id property="tid" column="tid" />
		<result property="tname" column="tname" />
		<result property="sid" column="sid" />
	</resultMap>
	<!-- 按已知的tid查询 -->
	<select id="selectBlogById" resultType="Blog">
		select * from teacher
		where tid = #{id}
	</select>
	<!-- 查询所有 -->
	<select id="selectBlogAll" resultMap="b">
		select * from teacher
	</select>
	<!-- <select id="selectBlog" resultType="Blog"> -->
	<!-- select * from teacher -->
	<!-- where -->
	<!-- tid = #{a} and sid=#{b} -->
	<!-- </select> -->

	<!-- <select id="selectBlog2" resultMap="a"> -->
	<!-- select * from teacher -->
	<!-- where -->
	<!-- tid = #{a} and sid=#{b} -->
	<!-- </select> -->
	<!-- 插入一个Blog -->
	<insert id="insert1" parameterType="Blog"
		useGeneratedKeys="true" keyProperty="tid">
		insert into teacher(tid, tname,
		sid) values(#{tid},#{tname}, #{sid})
	</insert>
	<!-- 批量插入 -->
	<insert id="insert_list" useGeneratedKeys="true"
		keyProperty="tid">
		insert into teacher(tname,sid) values
		<foreach item="item" collection="list" separator=",">
			(#{item.tname}, #{item.sid})
		</foreach>
	</insert>
	<!-- 更新 注解@Param接收参数 -->
	<update id="update1">
		update teacher set
		tname = #{b},
		sid = #{c}
		where tid =
		#{a}
	</update>
	<delete id="delete1">
		delete from teacher where tid = #{a}
	</delete>
</mapper>

5.将dao配置文件配置到全局配置文件中

加入的位置:mappers标签与上面的environments标签同级
代码如下:

<mappers>
		<mapper resource="dao/BlogMapper.xml" />
</mappers>

6.运行

package mybatis00;

import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

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 dao.BlogMapper;
import model.ABC;
import model.Blog;

public class test0 {

	public static void main(String[] args) throws IOException {
		String resource = "mybatis-config.xml";
		InputStream inputStream = Resources.getResourceAsStream(resource);
		SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

		try (SqlSession session = sqlSessionFactory.openSession()) {
			BlogMapper mapper = session.getMapper(BlogMapper.class);
//			Blog bm = mapper.selectBlogById(1);
//			System.out.println(bm.toString());
			
//			List<Blog> list1 = mapper.selectBlogAll();
//			for(Blog b:list1) {
//				System.out.println(b.toString());
//			}
//			Blog bm1 = mapper.selectBlog(1, 2);
//			System.out.println(bm1.toString());
			
//			ABC bm2 = mapper.selectBlog2(1, 2);
//			System.out.println(bm2.toString());
			
//			Blog bt = new Blog("ttt", 2);
//			int a = mapper.insert1(bt);
//			System.out.println(bt.getTid());
//			System.out.println(a);
			
//			List<Blog> a = new ArrayList<>();
//			for(int i=50;i<60;i++) {
//				String tname = "aa"+i;
//				Blog bt = new Blog(tname, i);
//				a.add(bt);
// 			}
//			int b = mapper.insert_list(a);
//			System.out.println(b);
			
//			int b = mapper.update1(50, "ddd", 33);
//			System.out.println(b);
			
			int b = mapper.delete1(69);
			System.out.println(b);
			
			// 提交事务
			session.commit();
			// 关闭 session
			session.close();
			
		}
	}
}

7.结果

1.query

根据id查询
查询所有

2.insert

添加一条记录

批量插入

3.update

在这里插入图片描述
执行前
在这里插入图片描述
执行后
在这里插入图片描述

4.delete

在这里插入图片描述

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值