Mybatis简单入门<学习随笔>

在实际项目中,我一直在用Hibernate持久层的开发,但是由于Hibernate的紧密封装,虽然ORM使得对数据库的操作非常简单和方便,但是有时候碰到的各种关联关系,又显得比较呆板不灵活。
MyBatis 是支持普通 SQL查询, 存储过程和高级映射的优秀 持久层框架。MyBatis 消除了几乎所有的 JDBC代码和参数的手工设置以及 结果集的检索。MyBatis 使用简单的 XML或注解用于配置和原始映射,将接口和 Java 的POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。
每个MyBatis应用程序主要都是使用Sql SessionFactory实例的,一个SqlSessionFactory实例可以通过SqlSessionFactoryBuilder获得。SqlSessionFactoryBuilder可以从一个xml配置文件或者一个预定义的配置类的实例获得。
用xml文件构建SqlSessionFactory实例是非常简单的事情。推荐在这个配置中使用类路径资源(classpath resource),但你可以使用任何Reader实例,包括用文件路径或file://开头的url创建的实例。MyBatis有一个实用类----Resources,它有很多方法,可以方便地从类路径及其它位置加载资源
我们先看看mybatis的主要配置文件Configuration.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="UNPOOLED"><!--数据库连接内容  -->
        <property name="driver" value="com.mysql.jdbc.Driver"/>
        <property name="url" value="jdbc:mysql:///mybatis"/>
        <property name="username" value="root"/>
        <property name="password" value="123456"/>
      </dataSource>
    </environment>
  </environments>
  
  <mappers>
  <!--实体类相关操作配置文件  -->
    <mapper resource="orm/Student.xml"/>
  </mappers>

</configuration>
有过持久层框架开发的 一看就明白 废话少说 直接进入demo

实体类Student

/**
 *   
 * 这是一个学生类
 *
 */
public class Student {
    private Integer id;//代理主键
    private String name;//姓名
    private Integer age;//年龄
	public Integer getId() {
		return id;
	}
	public void setId(Integer id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public Integer getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
    
}
与实体类相对应的配置文件Student.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="Student">
  <!--resultMap用来映射表与类之间的字段关系  id标签代表主键列   column代表表里的字段   property是对应类里面的属性 -->
  <resultMap type="orm.Student" id="Student">
    <id column="ID" jdbcType="INTEGER" property="id"/>
    <result column="NAME" jdbcType="VARCHAR" property="name"/>
    <result column="AGE" jdbcType="INTEGER" property="age"/>
  </resultMap>
  <!--查询         resultMap是上面配置的resultMap的id<span style="font-family: arial, 宋体, sans-serif; text-indent: 2em;">名字用来映射实体类,查询出的结果直接封装 --></span>
  <select id="selectID" parameterType="int" resultMap="Student">
  <!-- parameterType 是传入到值类型   java代码中传入int型  配置文件接收时候固定值_parameter 详查mybatis ONGL-->
    select ID,NAME,AGE from Student where ID=#{_parameter}
  </select>
  <insert id="save" parameterType="orm.Student">
  <!-- 传入值类型为实体类,配置文件接收直接#{实体类对应属性} 详查mybatis ONGL-->
  insert into Student(NAME,AGE) values(#{name},#{age})
  </insert>
  <delete id="deleteID" parameterType="int">
  	delete from Student where ID = #{_parameter}
  </delete>
</mapper>
测试类Test.java
package test;

import java.io.IOException;
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 orm.Student;

public class Test {
       public static void main(String[] args) throws IOException {
    	// 通过配置文件获取数据库连接信息
   		Reader reader = Resources.getResourceAsReader("Configuration.xml");
   		// 通过配置信息构建一个SqlSessionFactory
   		SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
   		// 通过sqlSessionFactory打开一个数据库会话
   		SqlSession sqlSession = sqlSessionFactory.openSession();
   		/**
   		 * 保存数据
   		 */
//   		Student student = new Student();
//   		student.setAge(12);
//   		student.setName("张三");
//   		insert 第一个参数 是Student.xml 配置文件中namespace . <insert/>标签中的id  第二个参数代表传入的值
//   		sqlSession.insert("Student.save",student);
//   		sqlSession.commit();//提交事务
   		   /**
   		    * 查询
   		    */
//   		List<Student> list=sqlSession.selectList("Student.selectID", 1);
//   		for(Student s:list){
//   			System.out.println(s.getName()+"====="+s.getAge());
//   		}
   		/**
   		 * 删除
   		 */
//   		sqlSession.delete("Student.deleteID", 1);
//   		sqlSession.commit();
	}
}
具体操作就在代码中的注释,如有疑问可以与我讨论。
以上都是自己学习时候的总结,难免会有错误,如有指出,将不胜感激。
主要jar mybatis-3.2.7.jar

你可能感兴趣的:(java,sql,mybatis,jdbc,持久层框架)