mybatis的作用就不提了。
先写一个例子来说明mybatis的使用方法。
要加载一些相关的依赖包。mybatis的相对比较简单,就只有Mybatis-3.1.1.jar ,当然还有这个包依赖的一些jar(从mybatis网站下载的zip中包括)
要让mybatis正常启动并能够起作用,首先我们需要一个 SqlSessionFactoryBuilder,这个类再调用.build(reader) 方法去创建一个SqlSessionFactory 类;
--> SqlSessionFactory类再通过 .openSession() 方法去创建一个SqlSession
-->SqlSession 就可以通过 .getMapper(Class<?> arg0) 来创建一个对应的mapper类了
-->有了这个mapper类,后续的操作都通过mapper类完成
告一段落,这里会有几个疑问:
a SqlSessionFactoryBuilder 在创建SqlSessionFactory的时候,需要知道一些信息。比如数据源、mapper
(1)实体类
可以跟数据库结构完全一样,也可以有不同。比如我有一个user、 role、 user_role三个表,的user实体类可以完全对应user表,也可以添加一个 List<role>属性,表示该user对象的role列表,或者添加一个login_time属性记录登录时间等等。
本例中user类与user表完全一致。
package example1.model;
public class baiuser {
private Long ID;
private String USERNAME;
private String PASSWORD;
private Integer STATUS;
private String DESCN;
然后是一堆get set方法......
(2)mapper
有了实体对象,我们还需要有对实体对象到数据库的操作相关的方法,这就需要使用mapper类。
maybatis中,使用接口+mapper文件的方式进行处理(先不管mybatis怎么实现的,目前仅记住是这样配置就好)。
首先我们定义一个dao的接口
package example1.dao;
import example1.model.baiuser;
public interface baiuserMapper {
int delete(Long ID);
int insert(baiuser record);
baiuser select(Long ID);
int update(baiuser record);
baiuser selectByUsername(String username);
}
然后编写一个mapper文件:
<?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="example1.dao.baiuserMapper" >
<resultMap id="BaseResultMap" type="example1.model.baiuser" >
<id column="ID" property="ID" jdbcType="BIGINT" />
<result column="USERNAME" property="USERNAME" jdbcType="VARCHAR" />
<result column="PASSWORD" property="PASSWORD" jdbcType="VARCHAR" />
<result column="STATUS" property="STATUS" jdbcType="INTEGER" />
<result column="DESCN" property="DESCN" jdbcType="VARCHAR" />
</resultMap>
<sql id="Base_Column_List" >
ID, USERNAME, PASSWORD, STATUS, DESCN
</sql>
<select id="select" resultMap="BaseResultMap" parameterType="java.lang.Long" >
select
<include refid="Base_Column_List" />
from bai_user
where ID = #{ID,jdbcType=BIGINT}
</select>
下面还有多个方法映射,与接口中定义的方法一致
这样mybatis会根据配置,自动完成该接口的实现类。
这里有几个要点:
a
<mapper namespace="example1.dao.baiuserMapper" >
namespace 要与接口对应
b insert 或者update语句其输入参数要有
<insert id="insert" parameterType="example1.model.baiuser" >
(3)mybatis-config.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>
<!-- 配置别名 -->
<typeAliases>
<typeAlias type="example1.dao.baiuserMapper" alias="baiuserMapper" />
<typeAlias type="example1.model.baiuser" alias="baiuser" />
</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://127.0.0.1:3306/public?characterEncoding=GBK" />
<property name="username" value="root" />
<property name="password" value="root" />
</dataSource>
</environment>
</environments>
<!-- 配置mappers -->
<mappers>
<mapper resource="example1/mapper/baiuser-mapper.xml" />
</mappers>
</configuration>
里面有别名配置、数据源、mapper配置。我们经常会将mybatis与spring整合在一起使用,那么mapper、数据源就可以在spring的配置文件中配置了,具体说来就是mybatis的SqlSessionFactory由spring容器进行创建,因此其需要的mapper与数据源作为其参数 。
好了,我们这个例子是不依赖于spring框架的,因此我们肯定要自己创建SqlSessionFactory和SqlSession等等。那么我们使用junit来创建一个测试类
package example1.test;
import org.junit.Test;
import org.junit.Before;
import java.io.IOException;
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;
import example1.dao.baiuserMapper;
import example1.model.baiuser;
public class baiuserTest {
private static SqlSessionFactoryBuilder sqlSessionFactoryBuilder;
private static SqlSessionFactory sqlSessionFactory;
@Before
public void before(){
String resource = "example1/conf/mybatis-config.xml";
Reader reader;
try {
reader = Resources.getResourceAsReader(resource);
sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
sqlSessionFactory = sqlSessionFactoryBuilder.build(reader);
} catch (IOException e) {
e.printStackTrace();
}
}
@Test
public void test(){
SqlSession session = sqlSessionFactory.openSession();
baiuserMapper userDao = session.getMapper(baiuserMapper.class);
baiuser user = userDao.select(1L);
System.out.println("user name is : "+user.getUSERNAME()+" password is : "+user.getPASSWORD());
}
}
例子源码在:
http://download.csdn.net/detail/u013269938/7247525