Mybatis
简介:
MyBatis 是支持定制化 SQL、存储过程以及高级映射的优秀的持久层框架。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以对配置和原生Map使用简单的 XML 或注解,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。(与hibernate的作用相同,都是与数据库进行交互,hibernate 可以反射生成实体类,mybatis不能)
使用:
1.导包
导入mybatis的包:只有一个包
另外需要的是jdbc的驱动包(这里是使用oracle):
2.配置(在配置之前,在数据库中已经建好了一个user表 有三个字段 id,userName,password,并且实体类已经写好)
在src下建立一个xml文件,名字没有限制
配置的属性如下,也可去官网找(百度: 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> <!-- mybatis配置环境(复数) default为哪个 就执行哪个--> <environments default="test1"> <!-- mybatis环境 --> <environment id="test1"> <!-- mybatis支持的事务 JDBC 数据源自己的事务管理 MANAGE 托管(不支持tomcat 一般用在大型商业服务器, weblogic ,jboss) --> <transactionManager type="JDBC"></transactionManager> <!-- 数据源 type的属性:POOLED ,UNPOOLED, JNDI --> <!--POOLED:使用连接池 可以联想成c3p0 UNPOOLED:不使用连接池 可以联想成jdbc的链接方式 JNDI:使用应用服务器的数据源链接(不常用) --> <dataSource type="POOLED"> <property name="driver" value="oracle.jdbc.driver.OracleDriver"/> <!-- Oracle数据库的驱动 --> <property name="url" value="jdbc:oracle:thin:@localhost:1521:orcl"/> <!-- Oracle数据库的jdbc协议 --> <property name="username" value="zhao"/> <property name="password" value="123"/> </dataSource> </environment> </environments> <!-- 每个实体类对应的配置文件映射 --> <mappers> <mapper resource="com/maya/dao/TUserMapper.xml"/> </mappers> </configuration>
3.建立一个util包,在util包下建立(SessionFactory)
MybatisUtil类
package com.maya.util;
import java.io.IOException;
import java.io.InputStream;
import java.io.Reader;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
public class MybatisUtil {
private static SqlSessionFactory SessionFactory; //与hibernate的sessionfactory很相像
private static SqlSession sqlsession;
public static SqlSession getSqlSession(){
//用流的方式
InputStream in=null;
//第二种方式
Reader reader=null;
try {
in=Resources.getResourceAsStream("mybatis.xml"); //读取配置文件
SessionFactory=new SqlSessionFactoryBuilder().build(in);
//第二种方法
//reader=Resources.getResourceAsReader("mybatis.xml");
//SessionFactory=new SqlSessionFactoryBuilder().build(reader);
sqlsession=SessionFactory.openSession();
in.close();
} catch (IOException e) {
e.printStackTrace();
}
return sqlsession;
}
}
总配置文件配置完成,接下来配置每个实体类对应的配置文件,有两种方式:
1.直接使用配置文件映射实体类(优缺点: 不需要写接口,不好维护)
2.使用接口
1.xml配置文件的方式:建立dao包,在该包下建立一个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.maya.dao.TUserMapper"><!-- 一般的命名规则,包名开始,到对应的配置文件结束 --> <!-- 查询集合 --> <select id="List" resultType="com.maya.model.TUser" > <!-- parameterType 参数类型(String.int.等等) resultType返回类型 parameterMap--> select * from t_user <!-- sql语句 这里是我们自己来写 --> </select> </mapper>
建立一个JUint测试用例
package com.maya.util; import static org.junit.Assert.*; import java.util.List; import org.apache.ibatis.session.SqlSession; import org.junit.After; import org.junit.Before; import org.junit.Test; import com.maya.model.TUser; public class JTest { private SqlSession ss; @Before public void setUp() throws Exception { //执行时自动先执行该方法 ss=MybatisUtil.getSqlSession(); } @After public void tearDown() throws Exception { //执行完test之后自动执行该语句 ss.commit(); ss.close(); } @Test public void test() { List<TUser> list=ss.selectList("com.maya.dao.TUserMapper.List"); for(TUser us:list){ System.out.println(us); } } }
执行代码如下
数据库中的数据:
我们不是制造者,我们是代码搬运工