一.初识mybatis
iBATIS一词来源于“internet”和“abatis”的组合,是一个基于Java的持久层框架。iBATIS提供的持久层框架包括SQL Maps和Data Access Objects(DAO),MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目迁移到了google code,并且改名为MyBatis ,2013年11月迁移到Github。
二.mybatis的基本配置和执行
1.准备mybatis的jar包:mybatis-3.2.8.jar
准备数据库jar包(我用的是mysql):mysql-connector-java-3.1.12-bin.jar
2.准备mybatis的主配置文件:mybatis-config.xml
项目架构看图,其中jdbc.propertis为数据库连接配置文件
下面附上jdbc.propertis和mybatis-config.xml的代码
jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/test
jdbc.username=root
jdbc.password=12345
<?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>
<!-- 方法一: 从外部指定properties配置文件, 除了使用resource属性指定外,还可通过url属性指定url-->
<properties resource="jdbc.properties"/>
<!--
通过package, 可以直接指定package的名字, mybatis会自动扫描你指定包下面的javabean,
并且默认设置一个别名,默认的名字为: javabean 的首字母小写的非限定类名来作为它的别名。
也可在javabean 加上注解@Alias 来自定义别名, 例如: @Alias(user)
<package name="com.dy.entity"/>
-->
<typeAliases>
<typeAlias alias="Student" type="com.douhao.model.Student"/>
</typeAliases>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC" />
<dataSource type="POOLED">
<property name="driver" value="${jdbc.driverClassName}" />
<property name="url" value="${jdbc.url}" />
<property name="username" value="${jdbc.username}" />
<property name="password" value="${jdbc.password}" />
</dataSource>
<!-- 方法二: 直接配置为xml
<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="1234" />
</dataSource>
-->
</environment>
<!-- 一个environments元素下面可以配多个environment元素,可以对应不同的环境,如开发环境和
生产环境。给environment元素配置不同的id就可以实现,至于要用到哪个环境,可通过environments元素
的default属性实现,如<environments default="development">。这时就就会运行id是development的
环境了。
-->
<environment id="final">
<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="1234" />
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="com/douhao/mappers/StudentMapper.xml" />
</mappers>
<!--
<mappers>
第一种方式:通过resource指定
<mapper resource="com/dy/dao/userDao.xml"/>
第二种方式, 通过class指定接口,进而将接口与对应的xml文件形成映射关系
不过,使用这种方式必须保证 接口与mapper文件同名(不区分大小写),
我这儿接口是UserDao,那么意味着mapper文件为UserDao.xml
<mapper class="com.dy.dao.UserDao"/>
第三种方式,直接指定包,自动扫描,与方法二同理
<package name="com.dy.dao"/>
第四种方式:通过url指定mapper文件位置
<mapper url="file://........"/>
</mappers>
-->
</configuration>
现在我们有了mybatis的主配置文件,但要想运行mybatis我们还要知道两个很关键的知识点
1.SqlSessionFactory 2.SqlSession
SqlSessionFactory 根据他的名字就知道,这是一个mybatis的session工厂,用来创建mybatis的核心:SqlSession
所以我们1.要通过刚刚的主配置文件得到SqlSessionFactory。2.通过SqlSessionFactory打开数据库会话,获得SqlSession
再说下SqlSession的作用:
1.向sql语句传入参数
2.执行sql语句
3.获取执行sql语句的结果
4.事务的控制
思路明了:1.通过主配置文件拿到SqlSessionFactory 2.通过SqlSessionFactory 拿到SqlSession 来操作我们的数据库。下面看代码
package com.douhao.service;
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 com.douhao.model.Student;
public class StudentService {
/**
*
* @author
* @description 获得SqlSessionFactory
* @return
* @throws IOException
* @update 2016年9月24日 下午4:21:54
*/
public SqlSessionFactory getSessionFactory() throws IOException{
//通过配置文件获取数据库连接的相关信息
Reader reader= Resources.getResourceAsReader("mybatis-config.xml");
//通过配置信息构建SqlSessionFactory
SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(reader);
return sqlSessionFactory;
}
public static void main(String[] args) {
StudentService studentService=new StudentService();
SqlSession sqlSession=null;
try {
SqlSessionFactory sqlSessionFactory=studentService.getSessionFactory();
sqlSession=sqlSessionFactory.openSession();
List<Student> list=sqlSession.selectList("student.findStudentById");//这里配置的是StudentMapper.xml中 (namespace.元素id)
System.out.println(list.size());
for(Student s:list){
System.out.println(s.getId());
}
} catch (IOException e) {
e.printStackTrace();
}finally {
if(sqlSession!=null){
sqlSession.close();
}
}
}
}
package com.douhao.model;
public class Student {
Integer id;
String name;
String age;
public Student() {
super();
}
public Student(String name, String age) {
super();
this.name = name;
this.age = 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 String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
}
<?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">
<select id="findStudentById" resultType="com.douhao.model.Student">
select * from t_student
</select>
</mapper>
执行main方法后查出纪录。至此mybatis能运行了。