MyBatis的增删改查

  • 这几天也是在学习Android,所以也一直没时间给学习过的MyBatis写一些笔记。啊~刚好今天星期三网课就只有上午,所以也就来给前面刚入门的MyBatis总结总结。

我们首先需要创建一个java项目,并且导入相应的mybatis与MySQL的jar包

下载后直接导入项目中就可以了(那么派对开始~)

  • 创建一个存放数据的POJO包(这里我创建了一个User类)

public class User {
	private int uid;
	private String uname;
	private String usex;
	private int uage;
	private int tel;

	public User() {
		super();
	}

	public User(int uid, String uname, String usex, int uage, int tel) {
		super();
		this.uid = uid;
		this.uname = uname;
		this.usex = usex;
		this.uage = uage;
		this.tel = tel;
	}

	public int getUid() {
		return uid;
	}

	public void setUid(int uid) {
		this.uid = uid;
	}

	public String getUname() {
		return uname;
	}

	public void setUname(String uname) {
		this.uname = uname;
	}

	public String getUsex() {
		return usex;
	}

	public void setUsex(String usex) {
		this.usex = usex;
	}

	public int getUage() {
		return uage;
	}

	public void setUage(int uage) {
		this.uage = uage;
	}

	public int getTel() {
		return tel;
	}

	public void setTel(int tel) {
		this.tel = tel;
	}

	@Override
	public String toString() {
		return "User [uid=" + uid + ", uname=" + uname + ", usex=" + usex + ", uage=" + uage + ", tel=" + tel + "]";
	}

}

  • 然后创建存放sql映射文件的Mapper包(这里我创建了一个UserMappe的XML文件)

  1. 这前面的格式就是固定的写法,所以不用太纠结了~

  2. 这里的namespace的内容最好是包路径+pojo包名+Mapper名

  3. 里面的sql语句当然不一定只能一条,如select,insert,update,delete都是一样的,只不过只有查询需要返回结果,其他的都是不需要的(这里着重说明一下~)

<?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="mapper.UserMapper">
	<select id="selectUsers" resultType="pojo.User">
	select * from user 
	</select>
</mapper>
  • 映射文件创建好后,我们还需要创建一个存放配置文件的Config包(这里我创建了一个mybatis的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>
	<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://IP地址/数据库名" />
				<property name="username" value="账号" />
				<property name="password" value="密码" />
			</dataSource>
		</environment>
	</environments>

	<mappers>
	<!-- mappers读取sql映射文件 -->
		<mapper resource="mapper/DeptMapper.xml" />
	</mappers>
</configuration>

  • 那么最后我们来写一下刚刚弄好查询语句的测试类(这里我创建了一个Demo01的类)

package test;

import java.io.IOException;
import java.lang.annotation.Annotation;
import java.util.List;

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 pojo.User;

public class Demo01 {

	public static void main(String[] args) {
		selects();//这里我为了简洁,封装了方法~ 直接调用不爽吗
	}

	public static void selects() {
		SqlSession session = null;//创建session的全局实例
		try {
			SqlSessionFactory build = new SqlSessionFactoryBuilder().build(Resources.getResourceAsReader("mybatis.xml"));//这里就是获取我们刚刚写过的配置文件
			session = build.openSession();//将会开启一个事务
			List<User> list = session.selectList("selectUsers", null);//这里我们使用集合来接收
			for (User user : list) {
				System.out.println(user);//循环打印控制台
			}
		} catch (IOException e) {
			// TODO 自动生成的 catch 块
			e.printStackTrace();
		} finally {
			if (session != null) {//最后在finally块中关闭session流
				session.close();
			}
		}
	}

}

写到这是不是感觉与标题的增删改查有些不一样,确实。但当学会了查询过后,增删改就不遥远了,我们只需要在原有文件中加入几行代码就可以实现需求。这里我就简单的添加一下,然后我们来看一下效果(这里记得着重看添加的代码)

  • 在原有的UserMapper的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="mapper.UserMapper">
	<insert id="insertUser" parameterType="pojo.User">
		insert into dept(deptno,dname,loc) values (#{deptno},#{dname},#{loc})
	</insert>
	<update id="updateUser" parameterType="pojo.User">
		update dept set loc = #{loc} where deptno = #{deptno}
	</update>
	<delete id="deleteUser" parameterType="int">
		delete from dept where deptno = #{id}
	</delete>
	<select id="selectUser" parameterType="int"
		resultType="pojo.User">
		select * from dept where deptno = #{id}
	</select>
	<!-- 如果返回的是一个对象的集合,resultType写集合里面对象的类路径List<Dept> -->
	<select id="selectUsers" resultType="pojo.User">
	select * from user 
	</select>
</mapper>
  • 由于我们都只是在原有的UserMapper文件中添加数据,所以这里我们并不需要改动原有的配置文件(mybatis.xml),只需要在测试类中加入增删改的测试代码就行啦

public class Demo1 {

	public static void main(String[] args) {
		// insert();
		// update();
		// delete();
		// select();
		selectList();
	}
	public static void selectList() {
		SqlSession session = null;
		try {
			// 获取SqlSessionFactory,也是读取配置文件
			SqlSessionFactory build = new SqlSessionFactoryBuilder()
					.build(Resources.getResourceAsReader("mybatis.xml"));
			// 读取SqlSession
			session = build.openSession();
			List<User> users = session.selectList("selectUsers", null);
			for (User user : users) {
				System.out.println(user);
			}
		} catch (IOException e) {
			// TODO 自动生成的 catch 块
			e.printStackTrace();
		} finally {
			if (session != null) {
				session.close();
			}
		}
	}
	public static void select() {
		SqlSession session = null;
		try {
			// 获取SqlSessionFactory,也是读取配置文件
			SqlSessionFactory build = new SqlSessionFactoryBuilder()
					.build(Resources.getResourceAsReader("mybatis.xml"));
			// 读取SqlSession
			session = build.openSession();
			User user = session.selectOne("selectUser", 50);// 查询一条语句
			System.out.println(user);
		} catch (IOException e) {
			// TODO 自动生成的 catch 块
			e.printStackTrace();
		} finally {
			if (session != null) {
				session.close();
			}
		}
	}

	public static void delete() {
		SqlSession session = null;
		try {
			// 获取SqlSessionFactory,也是读取配置文件
			SqlSessionFactory build = new SqlSessionFactoryBuilder()
					.build(Resources.getResourceAsReader("mybatis.xml"));
			// 读取SqlSession
			session = build.openSession();
			session.update("deleteUser", 50);
			// 提交事务
			session.commit();
		} catch (IOException e) {
			// TODO 自动生成的 catch 块
			e.printStackTrace();
		} finally {
			if (session != null) {
				session.close();
			}
		}
	}

	public static void update() {
		SqlSession session = null;
		try {
			// 获取SqlSessionFactory,也是读取配置文件
			SqlSessionFactory build = new SqlSessionFactoryBuilder()
					.build(Resources.getResourceAsReader("mybatis.xml"));
			// 读取SqlSession
			session = build.openSession();
			Dept dept = new Dept(50, null, "九江");
			session.update("mapper.DeptMapper.updateDept", dept);
			// 提交事务
			session.commit();
		} catch (IOException e) {
			// TODO 自动生成的 catch 块
			e.printStackTrace();
		} finally {
			if (session != null) {
				session.close();
			}
		}
	}

	public static void insert() {
		SqlSession session = null;
		try {
			// 获取SqlSessionFactory,也是读取配置文件
			SqlSessionFactory build = new SqlSessionFactoryBuilder()
					.build(Resources.getResourceAsReader("mybatis.xml"));
			// 读取SqlSession
			session = build.openSession();
			User user = new User(50, "张皓鹏", "江西");
			session.insert("insertUser", user);
			// 提交事务
			session.commit();
		} catch (IOException e) {
			// TODO 自动生成的 catch 块
			e.printStackTrace();
		} finally {
			if (session != null) {
				session.close();
			}
		}
	}

}

写到这 MyBatis的基础使用的总结就写完啦~ 一开始使用的JDBC顿时就不香了。。这么少代码量多舒服,对吧 哈哈~

文章作者: 大熊先生
版权声明: 本站所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 大雄先生
MySQL
喜欢就支持一下吧