MyBatis学习总结(一)---简单配置使用(基于XML方式实现CRUD以及加载配置文件的三种方式)

  一、Mybatis简介

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

   MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架。MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装。MyBatis可以使用简单的XML或注解用于配置和原始映射,将接口和Java的POJO(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录。

 二、简单配置使用示例

   1.Mybatis可应用于普通JAVA项目或JAVAWeb项目中,此处我建立的是一个JAVAWeb项目,目录结构如下:

      

      2.导入相应的jar包

        一个是mybatis的包,如:mybatis-3.4.6.jar;一个是数据库的包,如:mysql-connector-java-5.1.37.jar 

       3.配置Mybatis的配置文件,如:

<?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:信息配置的是连接数据库的(数据源的)一些参数,如用户名,密码等,MyBatis数据库操作的session就是根据这些信息初始化的-->
	<environments default="development">
		<environment id="development">
			<transactionManager type="JDBC" />
			<!-- 数据源配置 -->
			<dataSource type="POOLED">
			    <!-- 数据库驱动 -->
				<property name="driver" value="com.mysql.jdbc.Driver" />
				<!-- 数据库连接URL  -->
				<property name="url" value="jdbc:mysql://localhost:3306/mybatisstudy?useUnicode=true&amp;characterEncoding=utf8"/>
				<!-- 数据库用户名和密码 -->
				<property name="username" value="root" />
				<property name="password" value="" />
			</dataSource>
		</environment>
	</environments>
   <!-- mappers:配置的是一个个Mapper文件,这些文件来约束数据库的信息(Relationship) 和 对象(Object)的信息映射(Mapper);它负责完成对象和数据库表的映射,是ORM最具体的配置-->
	<mappers>
	    <!-- 配置实体映射文件 -->
		<mapper resource="com/mybatisstudy/mapper/userMap.xml" />
	</mappers>
</configuration>

   

   4.建表,如:

       

    5.编写用于测试的实体类,如:

package com.mybatisstudy.model;

public class User {
	private int id;
	private String name;
	private String sex;
	private int age;

	public User() {
		super();
	}

	public User(String name, String sex, int age) {
		super();
		this.name = name;
		this.sex = sex;
		this.age = age;
	}

	public User(int id, String name, String sex, int age) {
		super();
		this.id = id;
		this.name = name;
		this.sex = sex;
		this.age = age;
	}

	public int getId() {
		return id;
	}

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

	public String getName() {
		return name;
	}

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

	public String getSex() {
		return sex;
	}

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

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}

	@Override
	public String toString() {
		return "[id:" + id + ",name:" + name + ",sex:" + sex + ",age:" + age + "]";
	}

}

     6.编写该实体类的映射文件,注意需要在Mybatis的配置文件中引用该文件,如:

    

<?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="com.mybatisstudy.mapper.userMap">
	<select id="selectAllUser"
		resultType="com.mybatisstudy.model.User">
		SELECT * FROM user ;
	</select>
	
	<select id="selectUserById" parameterType="int" 
		resultType="com.mybatisstudy.model.User">
		SELECT * FROM user where id = #{id} ;
	</select>

	<insert id="addUser" parameterType="com.mybatisstudy.model.User">
		INSERT INTO user(id,name,sex,age) VALUES(#{id},#{name},#{sex},#{age});
	</insert>

	<delete id="deleteUserById" parameterType="com.mybatisstudy.model.User">
		DELETE FROM user WHERE id=#{id};
	</delete>
	
	
	<update id="updateUserById" parameterType="com.mybatisstudy.model.User">
		UPDATE user SET age=#{age} ,name=#{name}  WHERE id=#{id}
	</update>

</mapper>

     7.测试,如:

       其中加载Mybatis的配置文件的方式主要有三种,第一种是通过类加载器来加载;第二种是采用文件读取的方式来加载;第三种是使用Mybatis提供的Resources类来进行加载。

       注意:对于涉及到增删改数据时,需要手动进行提交(session.commit())。

package com.mybatisstudy.test;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.Reader;
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 com.mybatisstudy.model.User;

public class Test {
	public static void main(String[] args) {

		// mybatis的配置文件
		String resource = "mybatisconf.xml";
		InputStream inputStream = null;

		// 方式一:使用类加载器加载mybatis的配置文件
		// inputStream = Test.class.getClassLoader().getResourceAsStream(resource);

		// 方式二:采用文件读取的方式,读取配置文件
		/*File file = new File("src/mybatisconf.xml");
		Reader reader = null;
		try {
			reader = new FileReader(file);
		} catch (FileNotFoundException e1) {
			e1.printStackTrace();
		}
		SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);*/

		// 方式三:使用MyBatis提供的Resouces类加载mybatis的配置文件
		try {
			inputStream = Resources.getResourceAsStream(resource);
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

		// 构建SqlSessionFacoty工厂
		SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

		// 创建session对象,并使用它来进行数据库的各项 操作
		SqlSession session = sqlSessionFactory.openSession();

		// 根据Id查询用户
		String statement = "com.mybatisstudy.mapper.userMap.selectUserById";
		User user = session.selectOne(statement, 1001);
		System.out.println(user);

		// 查询所有的用户
		String statement2 = "com.mybatisstudy.mapper.userMap.selectAllUser";
		List<User> users = session.selectList(statement2);
		System.out.println(users);

		// 添加用户信息
		User user2 = new User(1003, "小杰", "男", 20);
		String statement3 = "com.mybatisstudy.mapper.userMap.addUser";
		int line = session.insert(statement3, user2);
		// 对于增删改,需要手动提交事务,才能将数据持久化,才能避免出现脏数据
		session.commit();

		// 修改用户信息
		User user3 = new User(1003, "小明", "男", 21);
		String statement4 = "com.mybatisstudy.mapper.userMap.updateUserById";
		int line2 = session.update(statement4, user3);
		session.commit();

		// 删除用户信息
		String statement5 = "com.mybatisstudy.mapper.userMap.deleteUserById";
		int line3 = session.delete(statement5, 1003);
		session.commit();

		session.close();

	}
}

    8.结果:

    

猜你喜欢

转载自blog.csdn.net/qq_40348465/article/details/84309345
今日推荐