MyBatis是什么java
MyBatis是什么,MyBatis的jar包中有它的官方文档,文档是这么描述MyBatis的:mysql
MyBatis is a first class persistence framework with support for custom SQL, stored procedures and advanced mappings. MyBatis eliminates almost all of the JDBC code and manual setting of parameters and retrieval of results. MyBatis can use simple XML or Annotations for configuration and map primitives, Map interfaces and Java POJOs (Plain Old Java Objects) to database records.
翻译过来就是:MyBatis是一款支持普通SQL查询、存储过程和高级映射的持久层框架。MyBatis消除了几乎全部的JDBC代码、参数的设置和结果集的检索。MyBatis可使用简单的XML或注解用于参数配置和原始映射,将接口和Java POJO(普通Java对象)映射成数据库中的记录。sql
本文先入门地搭建表、创建实体类、写基础的配置文件、写简单的Java类,从数据库中查出数据,深刻的内容后面的文章再逐一研究。数据库
建表、创建实体类mybatis
从简单表开始研究MyBatis,因此咱们先创建一张简单的表:app
create table student ( studentId int primary key auto_increment not null, studentName varchar(20) not null, studentAge int not null, studentPhone varchar(20) not null )charset=utf8 insert into student values(null, 'Jack', 20, '000000'); insert into student values(null, 'Mark', 21, '111111'); insert into student values(null, 'Lily', 22, '222222'); insert into student values(null, 'Lucy', 23, '333333'); commit;
一个名为student的表格,里面存放了student相关字段,固然此时咱们须要有一个Java实体类与之对应:框架
public class Student { private int studentId; private String studentName; private int studentAge; private String studentPhone; public int getStudentId() { return studentId; } public void setStudentId(int studentId) { this.studentId = studentId; } public String getStudentName() { return studentName; } public void setStudentName(String studentName) { this.studentName = studentName; } public int getStudentAge() { return studentAge; } public void setStudentAge(int studentAge) { this.studentAge = studentAge; } public String getStudentPhone() { return studentPhone; } public void setStudentPhone(String studentPhone) { this.studentPhone = studentPhone; } public String toString() { return "StudentId:" + studentId + "\tStudentName:" + studentName + "\tStudentAge:" + studentAge + "\tStudentPhone:" + studentAge; } }
OK,这样student表及其对应的实体类Student.java就建立好了。dom
写config.xml文件ui
在写SQL语句以前,首先得有SQL运行环境,所以第一步是配置SQL运行的环境。建立一个Java工程,右键src文件夹,建立一个普通文件,取个名字叫作config.xml,config.xml里这么写:this
<?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> <typeAlias alias="Student" type="com.xrq.domain.Student"/> </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/test"/> <property name="username" value="root"/> <property name="password" value="root"/> </dataSource> </environment> </environments> <mappers> <mapper resource="student.xml"/> </mappers> </configuration>
这就是一个最简单的config.xml的写法。接着右键src,建立一个普通文件,命名为student.xml,和mapper里面的一致(resource没有任何的路径则表示student.xml和config.xml同路径),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="com.xrq.StudentMapper"> <select id="selectStudentById" parameterType="int" resultType="Student"> <![CDATA[ select * from student where studentId = #{id} ]]> </select> </mapper>
专门有一个student.xml表示student表的sql语句,固然也能够几张表共用一个.xml文件,这个看本身的项目和我的喜爱。至此,MyBatis须要的两个.xml文件都已经创建好,接下来须要作的就是写Java代码了。
Java代码实现
首先要进入MyBatis的jar包:
第二个MySql-JDBC的jar包注意一下要引入,这个很容易忘记。
接着建立一个类,我起名字叫作StudentOperator,因为这种操做数据库的类被调用频繁可是调用者之间又不存在数据共享的问题,所以使用单例会比较节省资源。为了好看,写一个父类BaseOperator,SqlSessionFactory和Reader都定义在父类里面,子类去继承这个父类:
public class BaseOperator { protected static SqlSessionFactory ssf; protected static Reader reader; static { try { reader = Resources.getResourceAsReader("config.xml"); ssf = new SqlSessionFactoryBuilder().build(reader); } catch (IOException e) { e.printStackTrace(); } } }
而后建立子类StudentOperator:
public class StudentOperator extends BaseOperator { private static StudentOperator instance = new StudentOperator(); private StudentOperator() { } public static StudentOperator getInstance() { return instance; } public Student selectStudentById(int studentId) { SqlSession ss = ssf.openSession(); Student student = null; try { student = ss.selectOne("com.xrq.StudentMapper.selectStudentById", 1); } finally { ss.close(); } return student; } }
这个类里面作了两件事情:
一、构造一个StudentOperator的单示例
二、写一个方法根据studentId查询出一个指定的Student
验证
至此,全部步骤所有就绪,接着写一个类来验证一下:
public class MyBatisTest { public static void main(String[] args) { System.out.println(StudentOperator.getInstance().selectStudentById(1)); } }
运行结果为:
StudentId:1 StudentName:Jack StudentAge:20 StudentPhone:20
看一下数据库中的数据:
数据一致,说明以上的步骤都OK,MyBatis入门完成,后面的章节,将会针对MyBatis的使用细节分别进行研究。